Commit 5f94d31d by Carl Bergquist Committed by GitHub

Send jsondata for Datasources on DatasourceConfig for backend plugins (#22681)

ref https://github.com/grafana/grafana-plugin-sdk-go/pull/84
parent 62c824e3
...@@ -32,7 +32,7 @@ require ( ...@@ -32,7 +32,7 @@ require (
github.com/gorilla/websocket v1.4.1 github.com/gorilla/websocket v1.4.1
github.com/gosimple/slug v1.4.2 github.com/gosimple/slug v1.4.2
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4
github.com/grafana/grafana-plugin-sdk-go v0.20.0 github.com/grafana/grafana-plugin-sdk-go v0.21.0
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd
github.com/hashicorp/go-plugin v1.0.1 github.com/hashicorp/go-plugin v1.0.1
github.com/hashicorp/go-version v1.1.0 github.com/hashicorp/go-version v1.1.0
......
...@@ -133,8 +133,8 @@ github.com/gosimple/slug v1.4.2 h1:jDmprx3q/9Lfk4FkGZtvzDQ9Cj9eAmsjzeQGp24PeiQ= ...@@ -133,8 +133,8 @@ github.com/gosimple/slug v1.4.2 h1:jDmprx3q/9Lfk4FkGZtvzDQ9Cj9eAmsjzeQGp24PeiQ=
github.com/gosimple/slug v1.4.2/go.mod h1:ER78kgg1Mv0NQGlXiDe57DpCyfbNywXXZ9mIorhxAf0= github.com/gosimple/slug v1.4.2/go.mod h1:ER78kgg1Mv0NQGlXiDe57DpCyfbNywXXZ9mIorhxAf0=
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 h1:SPdxCL9BChFTlyi0Khv64vdCW4TMna8+sxL7+Chx+Ag= github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 h1:SPdxCL9BChFTlyi0Khv64vdCW4TMna8+sxL7+Chx+Ag=
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4/go.mod h1:nc0XxBzjeGcrMltCDw269LoWF9S8ibhgxolCdA1R8To= github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4/go.mod h1:nc0XxBzjeGcrMltCDw269LoWF9S8ibhgxolCdA1R8To=
github.com/grafana/grafana-plugin-sdk-go v0.20.0 h1:01Hit/9HNxyvUcfECvnFSB8LIrbsYSlHvyPvKKczuPo= github.com/grafana/grafana-plugin-sdk-go v0.21.0 h1:5en5MdVFgeD9tuHDuJgwHYdIVjPs0PN0a7ZQ2bZNxNk=
github.com/grafana/grafana-plugin-sdk-go v0.20.0/go.mod h1:G6Ov9M+FDOZXNw8eKXINO6XzqdUvTs7huwyQp5jLTBQ= github.com/grafana/grafana-plugin-sdk-go v0.21.0/go.mod h1:G6Ov9M+FDOZXNw8eKXINO6XzqdUvTs7huwyQp5jLTBQ=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd h1:rNuUHR+CvK1IS89MMtcF0EpcVMZtjKfPRp4MEmt/aTs= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd h1:rNuUHR+CvK1IS89MMtcF0EpcVMZtjKfPRp4MEmt/aTs=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE= github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE=
......
...@@ -275,20 +275,19 @@ func (hs *HTTPServer) CallDatasourceResource(c *models.ReqContext) { ...@@ -275,20 +275,19 @@ func (hs *HTTPServer) CallDatasourceResource(c *models.ReqContext) {
} }
config := backendplugin.PluginConfig{ config := backendplugin.PluginConfig{
OrgID: c.OrgId, OrgID: c.OrgId,
PluginID: plugin.Id, PluginID: plugin.Id,
PluginType: plugin.Type,
JSONData: ds.JsonData,
DecryptedSecureJSONData: ds.DecryptedValues(),
Updated: ds.Updated,
DataSourceConfig: &backendplugin.DataSourceConfig{ DataSourceConfig: &backendplugin.DataSourceConfig{
ID: ds.Id, ID: ds.Id,
Name: ds.Name, Name: ds.Name,
URL: ds.Url, URL: ds.Url,
Database: ds.Database, Database: ds.Database,
User: ds.User, User: ds.User,
BasicAuthEnabled: ds.BasicAuth, BasicAuthEnabled: ds.BasicAuth,
BasicAuthUser: ds.BasicAuthUser, BasicAuthUser: ds.BasicAuthUser,
JSONData: ds.JsonData,
DecryptedSecureJSONData: ds.DecryptedValues(),
Updated: ds.Updated,
}, },
} }
hs.BackendPluginManager.CallResource(config, c, c.Params("*")) hs.BackendPluginManager.CallResource(config, c, c.Params("*"))
......
...@@ -268,7 +268,6 @@ func (hs *HTTPServer) CallResource(c *models.ReqContext) { ...@@ -268,7 +268,6 @@ func (hs *HTTPServer) CallResource(c *models.ReqContext) {
config := backendplugin.PluginConfig{ config := backendplugin.PluginConfig{
OrgID: c.OrgId, OrgID: c.OrgId,
PluginID: plugin.Id, PluginID: plugin.Id,
PluginType: plugin.Type,
JSONData: jsonData, JSONData: jsonData,
DecryptedSecureJSONData: decryptedSecureJSONData, DecryptedSecureJSONData: decryptedSecureJSONData,
Updated: updated, Updated: updated,
......
...@@ -229,10 +229,9 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques ...@@ -229,10 +229,9 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques
Config: &pluginv2.PluginConfig{ Config: &pluginv2.PluginConfig{
OrgId: req.Config.OrgID, OrgId: req.Config.OrgID,
PluginId: req.Config.PluginID, PluginId: req.Config.PluginID,
PluginType: req.Config.PluginType,
JsonData: jsonDataBytes, JsonData: jsonDataBytes,
DecryptedSecureJsonData: req.Config.DecryptedSecureJSONData, DecryptedSecureJsonData: req.Config.DecryptedSecureJSONData,
UpdatedMS: req.Config.Updated.UnixNano() / int64(time.Millisecond), LastUpdatedMS: req.Config.Updated.UnixNano() / int64(time.Millisecond),
}, },
Path: req.Path, Path: req.Path,
Method: req.Method, Method: req.Method,
...@@ -251,14 +250,22 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques ...@@ -251,14 +250,22 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques
} }
if req.Config.DataSourceConfig != nil { if req.Config.DataSourceConfig != nil {
datasourceJSONData, err := req.Config.DataSourceConfig.JSONData.ToDB()
if err != nil {
return nil, err
}
protoReq.Config.DatasourceConfig = &pluginv2.DataSourceConfig{ protoReq.Config.DatasourceConfig = &pluginv2.DataSourceConfig{
Id: req.Config.DataSourceConfig.ID, Id: req.Config.DataSourceConfig.ID,
Name: req.Config.DataSourceConfig.Name, Name: req.Config.DataSourceConfig.Name,
Url: req.Config.DataSourceConfig.URL, Url: req.Config.DataSourceConfig.URL,
Database: req.Config.DataSourceConfig.Database, Database: req.Config.DataSourceConfig.Database,
User: req.Config.DataSourceConfig.User, User: req.Config.DataSourceConfig.User,
BasicAuthEnabled: req.Config.DataSourceConfig.BasicAuthEnabled, BasicAuthEnabled: req.Config.DataSourceConfig.BasicAuthEnabled,
BasicAuthUser: req.Config.DataSourceConfig.BasicAuthUser, BasicAuthUser: req.Config.DataSourceConfig.BasicAuthUser,
JsonData: datasourceJSONData,
DecryptedSecureJsonData: req.Config.DataSourceConfig.DecryptedSecureJSONData,
LastUpdatedMS: req.Config.DataSourceConfig.Updated.UnixNano() / int64(time.Millisecond),
} }
} }
......
...@@ -60,19 +60,21 @@ func checkHealthResultFromProto(protoResp *pluginv2.CheckHealthResponse) *CheckH ...@@ -60,19 +60,21 @@ func checkHealthResultFromProto(protoResp *pluginv2.CheckHealthResponse) *CheckH
} }
type DataSourceConfig struct { type DataSourceConfig struct {
ID int64 ID int64
Name string Name string
URL string URL string
User string User string
Database string Database string
BasicAuthEnabled bool BasicAuthEnabled bool
BasicAuthUser string BasicAuthUser string
JSONData *simplejson.Json
DecryptedSecureJSONData map[string]string
Updated time.Time
} }
type PluginConfig struct { type PluginConfig struct {
OrgID int64 OrgID int64
PluginID string PluginID string
PluginType string
JSONData *simplejson.Json JSONData *simplejson.Json
DecryptedSecureJSONData map[string]string DecryptedSecureJSONData map[string]string
Updated time.Time Updated time.Time
......
...@@ -32,20 +32,19 @@ func (tw *DatasourcePluginWrapperV2) Query(ctx context.Context, ds *models.DataS ...@@ -32,20 +32,19 @@ func (tw *DatasourcePluginWrapperV2) Query(ctx context.Context, ds *models.DataS
pbQuery := &pluginv2.QueryDataRequest{ pbQuery := &pluginv2.QueryDataRequest{
Config: &pluginv2.PluginConfig{ Config: &pluginv2.PluginConfig{
OrgId: ds.OrgId, OrgId: ds.OrgId,
PluginId: tw.pluginId, PluginId: tw.pluginId,
PluginType: tw.pluginType, LastUpdatedMS: ds.Updated.UnixNano() / int64(time.Millisecond),
UpdatedMS: ds.Updated.UnixNano() / int64(time.Millisecond),
JsonData: jsonDataBytes,
DecryptedSecureJsonData: ds.DecryptedValues(),
DatasourceConfig: &pluginv2.DataSourceConfig{ DatasourceConfig: &pluginv2.DataSourceConfig{
Id: ds.Id, Id: ds.Id,
Name: ds.Name, Name: ds.Name,
Url: ds.Url, Url: ds.Url,
Database: ds.Database, Database: ds.Database,
User: ds.User, User: ds.User,
BasicAuthEnabled: ds.BasicAuth, BasicAuthEnabled: ds.BasicAuth,
BasicAuthUser: ds.BasicAuthUser, BasicAuthUser: ds.BasicAuthUser,
JsonData: jsonDataBytes,
DecryptedSecureJsonData: ds.DecryptedValues(),
}, },
}, },
Queries: []*pluginv2.DataQuery{}, Queries: []*pluginv2.DataQuery{},
......
...@@ -53,16 +53,21 @@ func (CheckHealthResponse_HealthStatus) EnumDescriptor() ([]byte, []int) { ...@@ -53,16 +53,21 @@ func (CheckHealthResponse_HealthStatus) EnumDescriptor() ([]byte, []int) {
} }
type DataSourceConfig struct { type DataSourceConfig struct {
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"` Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
User string `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"` User string `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"`
Database string `protobuf:"bytes,5,opt,name=database,proto3" json:"database,omitempty"` Database string `protobuf:"bytes,5,opt,name=database,proto3" json:"database,omitempty"`
BasicAuthEnabled bool `protobuf:"varint,6,opt,name=basicAuthEnabled,proto3" json:"basicAuthEnabled,omitempty"` BasicAuthEnabled bool `protobuf:"varint,6,opt,name=basicAuthEnabled,proto3" json:"basicAuthEnabled,omitempty"`
BasicAuthUser string `protobuf:"bytes,7,opt,name=basicAuthUser,proto3" json:"basicAuthUser,omitempty"` BasicAuthUser string `protobuf:"bytes,7,opt,name=basicAuthUser,proto3" json:"basicAuthUser,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` // from [data_source.json_data] field in the database
XXX_unrecognized []byte `json:"-"` JsonData []byte `protobuf:"bytes,8,opt,name=jsonData,proto3" json:"jsonData,omitempty"`
XXX_sizecache int32 `json:"-"` // from [data_source.secure_json_data] field in the database
DecryptedSecureJsonData map[string]string `protobuf:"bytes,9,rep,name=decryptedSecureJsonData,proto3" json:"decryptedSecureJsonData,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
LastUpdatedMS int64 `protobuf:"varint,10,opt,name=lastUpdatedMS,proto3" json:"lastUpdatedMS,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
} }
func (m *DataSourceConfig) Reset() { *m = DataSourceConfig{} } func (m *DataSourceConfig) Reset() { *m = DataSourceConfig{} }
...@@ -139,14 +144,36 @@ func (m *DataSourceConfig) GetBasicAuthUser() string { ...@@ -139,14 +144,36 @@ func (m *DataSourceConfig) GetBasicAuthUser() string {
return "" return ""
} }
func (m *DataSourceConfig) GetJsonData() []byte {
if m != nil {
return m.JsonData
}
return nil
}
func (m *DataSourceConfig) GetDecryptedSecureJsonData() map[string]string {
if m != nil {
return m.DecryptedSecureJsonData
}
return nil
}
func (m *DataSourceConfig) GetLastUpdatedMS() int64 {
if m != nil {
return m.LastUpdatedMS
}
return 0
}
type PluginConfig struct { type PluginConfig struct {
OrgId int64 `protobuf:"varint,1,opt,name=orgId,proto3" json:"orgId,omitempty"` OrgId int64 `protobuf:"varint,1,opt,name=orgId,proto3" json:"orgId,omitempty"`
PluginId string `protobuf:"bytes,2,opt,name=pluginId,proto3" json:"pluginId,omitempty"` PluginId string `protobuf:"bytes,2,opt,name=pluginId,proto3" json:"pluginId,omitempty"`
PluginType string `protobuf:"bytes,3,opt,name=pluginType,proto3" json:"pluginType,omitempty"` // from [plugin_setting.json_data] field in the database
JsonData []byte `protobuf:"bytes,4,opt,name=jsonData,proto3" json:"jsonData,omitempty"` JsonData []byte `protobuf:"bytes,3,opt,name=jsonData,proto3" json:"jsonData,omitempty"`
DecryptedSecureJsonData map[string]string `protobuf:"bytes,5,rep,name=decryptedSecureJsonData,proto3" json:"decryptedSecureJsonData,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // from [plugin_setting.secure_json_data] field in the database
UpdatedMS int64 `protobuf:"varint,6,opt,name=updatedMS,proto3" json:"updatedMS,omitempty"` DecryptedSecureJsonData map[string]string `protobuf:"bytes,4,rep,name=decryptedSecureJsonData,proto3" json:"decryptedSecureJsonData,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
DatasourceConfig *DataSourceConfig `protobuf:"bytes,7,opt,name=datasourceConfig,proto3" json:"datasourceConfig,omitempty"` LastUpdatedMS int64 `protobuf:"varint,5,opt,name=lastUpdatedMS,proto3" json:"lastUpdatedMS,omitempty"`
DatasourceConfig *DataSourceConfig `protobuf:"bytes,6,opt,name=datasourceConfig,proto3" json:"datasourceConfig,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -191,13 +218,6 @@ func (m *PluginConfig) GetPluginId() string { ...@@ -191,13 +218,6 @@ func (m *PluginConfig) GetPluginId() string {
return "" return ""
} }
func (m *PluginConfig) GetPluginType() string {
if m != nil {
return m.PluginType
}
return ""
}
func (m *PluginConfig) GetJsonData() []byte { func (m *PluginConfig) GetJsonData() []byte {
if m != nil { if m != nil {
return m.JsonData return m.JsonData
...@@ -212,9 +232,9 @@ func (m *PluginConfig) GetDecryptedSecureJsonData() map[string]string { ...@@ -212,9 +232,9 @@ func (m *PluginConfig) GetDecryptedSecureJsonData() map[string]string {
return nil return nil
} }
func (m *PluginConfig) GetUpdatedMS() int64 { func (m *PluginConfig) GetLastUpdatedMS() int64 {
if m != nil { if m != nil {
return m.UpdatedMS return m.LastUpdatedMS
} }
return 0 return 0
} }
...@@ -912,6 +932,7 @@ func (m *CheckHealthResponse) GetJsonDetails() string { ...@@ -912,6 +932,7 @@ func (m *CheckHealthResponse) GetJsonDetails() string {
func init() { func init() {
proto.RegisterEnum("pluginv2.CheckHealthResponse_HealthStatus", CheckHealthResponse_HealthStatus_name, CheckHealthResponse_HealthStatus_value) proto.RegisterEnum("pluginv2.CheckHealthResponse_HealthStatus", CheckHealthResponse_HealthStatus_name, CheckHealthResponse_HealthStatus_value)
proto.RegisterType((*DataSourceConfig)(nil), "pluginv2.DataSourceConfig") proto.RegisterType((*DataSourceConfig)(nil), "pluginv2.DataSourceConfig")
proto.RegisterMapType((map[string]string)(nil), "pluginv2.DataSourceConfig.DecryptedSecureJsonDataEntry")
proto.RegisterType((*PluginConfig)(nil), "pluginv2.PluginConfig") proto.RegisterType((*PluginConfig)(nil), "pluginv2.PluginConfig")
proto.RegisterMapType((map[string]string)(nil), "pluginv2.PluginConfig.DecryptedSecureJsonDataEntry") proto.RegisterMapType((map[string]string)(nil), "pluginv2.PluginConfig.DecryptedSecureJsonDataEntry")
proto.RegisterType((*User)(nil), "pluginv2.User") proto.RegisterType((*User)(nil), "pluginv2.User")
...@@ -936,76 +957,77 @@ func init() { ...@@ -936,76 +957,77 @@ func init() {
func init() { proto.RegisterFile("backend.proto", fileDescriptor_5ab9ba5b8d8b2ba5) } func init() { proto.RegisterFile("backend.proto", fileDescriptor_5ab9ba5b8d8b2ba5) }
var fileDescriptor_5ab9ba5b8d8b2ba5 = []byte{ var fileDescriptor_5ab9ba5b8d8b2ba5 = []byte{
// 1094 bytes of a gzipped FileDescriptorProto // 1115 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x6e, 0xdb, 0x46, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6e, 0xdb, 0x46,
0x10, 0x2e, 0xa9, 0x3f, 0x73, 0xa4, 0x18, 0xea, 0xda, 0x71, 0x04, 0x35, 0x49, 0x05, 0x22, 0x40, 0x10, 0x2e, 0x49, 0xfd, 0x71, 0xa4, 0x18, 0xea, 0x5a, 0x71, 0x08, 0x35, 0x49, 0x05, 0x22, 0x40,
0x95, 0x14, 0x15, 0x5a, 0xe5, 0x52, 0x24, 0xa7, 0xd8, 0x52, 0xe1, 0xd8, 0xf1, 0x4f, 0x57, 0x36, 0x95, 0x14, 0x15, 0x5a, 0xe5, 0xd0, 0x22, 0x39, 0xc5, 0x96, 0x0a, 0xc7, 0x8e, 0x7f, 0xba, 0x8a,
0x0a, 0xa4, 0xe8, 0x61, 0x45, 0xae, 0x25, 0xd6, 0x24, 0x57, 0xd9, 0x5d, 0x1a, 0xd5, 0x13, 0xf4, 0x51, 0x20, 0x45, 0x0f, 0x2b, 0x72, 0x2d, 0xb1, 0xe6, 0x8f, 0xcc, 0x5d, 0x1a, 0xf5, 0x03, 0x14,
0x05, 0x7a, 0xed, 0x2b, 0xa4, 0x4f, 0xd1, 0x4b, 0xaf, 0x3d, 0xf4, 0x75, 0x8a, 0x5d, 0x2e, 0x45, 0x7d, 0x81, 0x3e, 0x47, 0xfa, 0x14, 0x3d, 0xf5, 0xd8, 0x43, 0x5f, 0xa7, 0xd8, 0xe5, 0x52, 0x24,
0xca, 0x96, 0x6c, 0xf4, 0x27, 0xb7, 0x99, 0xe1, 0xcc, 0xec, 0x7c, 0x33, 0xdf, 0x8c, 0x04, 0xf7, 0x6d, 0xc9, 0x46, 0x5b, 0xe7, 0xb6, 0x33, 0x9c, 0x9d, 0x9d, 0xf9, 0xe6, 0x9b, 0xcf, 0x32, 0xdc,
0xc6, 0xc4, 0xbb, 0xa4, 0xb1, 0xdf, 0x9b, 0x71, 0x26, 0x19, 0xda, 0x98, 0x85, 0xc9, 0x24, 0x88, 0x9b, 0x12, 0xe7, 0x8c, 0x86, 0xee, 0x60, 0x11, 0x47, 0x3c, 0x42, 0x8d, 0x85, 0x9f, 0xcc, 0xbc,
0xaf, 0xfa, 0xee, 0x1f, 0x16, 0x34, 0x07, 0x44, 0x92, 0x11, 0x4b, 0xb8, 0x47, 0xf7, 0x58, 0x7c, 0xf0, 0x62, 0x68, 0xff, 0x69, 0x40, 0x7b, 0x44, 0x38, 0x99, 0x44, 0x49, 0xec, 0xd0, 0x9d, 0x28,
0x11, 0x4c, 0xd0, 0x26, 0xd8, 0x81, 0xdf, 0xb2, 0x3a, 0x56, 0xb7, 0x84, 0xed, 0xc0, 0x47, 0x08, 0x3c, 0xf5, 0x66, 0x68, 0x03, 0x74, 0xcf, 0xb5, 0xb4, 0x9e, 0xd6, 0x37, 0xb0, 0xee, 0xb9, 0x08,
0xca, 0x31, 0x89, 0x68, 0xcb, 0xee, 0x58, 0x5d, 0x07, 0x6b, 0x19, 0x35, 0xa1, 0x94, 0xf0, 0xb0, 0x41, 0x25, 0x24, 0x01, 0xb5, 0xf4, 0x9e, 0xd6, 0x37, 0xb1, 0x3c, 0xa3, 0x36, 0x18, 0x49, 0xec,
0x55, 0xd2, 0x26, 0x25, 0x2a, 0xaf, 0x44, 0x50, 0xde, 0x2a, 0xa7, 0x5e, 0x4a, 0x46, 0x6d, 0xd8, 0x5b, 0x86, 0x74, 0x89, 0xa3, 0x88, 0x4a, 0x18, 0x8d, 0xad, 0x4a, 0x1a, 0x25, 0xce, 0xa8, 0x0b,
0xf0, 0x89, 0x24, 0x63, 0x22, 0x68, 0xab, 0xa2, 0xed, 0x0b, 0x1d, 0x3d, 0x83, 0xe6, 0x98, 0x88, 0x0d, 0x97, 0x70, 0x32, 0x25, 0x8c, 0x5a, 0x55, 0xe9, 0x5f, 0xda, 0xe8, 0x19, 0xb4, 0xa7, 0x84,
0xc0, 0x7b, 0x95, 0xc8, 0xe9, 0x30, 0x26, 0xe3, 0x90, 0xfa, 0xad, 0x6a, 0xc7, 0xea, 0x6e, 0xe0, 0x79, 0xce, 0xab, 0x84, 0xcf, 0xc7, 0x21, 0x99, 0xfa, 0xd4, 0xb5, 0x6a, 0x3d, 0xad, 0xdf, 0xc0,
0x1b, 0x76, 0xf4, 0x44, 0x21, 0x30, 0xb6, 0x73, 0xf5, 0x48, 0x4d, 0x27, 0x5b, 0x36, 0xba, 0xbf, 0xd7, 0xfc, 0xe8, 0x89, 0xe8, 0x40, 0xf9, 0x4e, 0xc4, 0x23, 0x75, 0x99, 0xac, 0xec, 0x14, 0xaf,
0x96, 0xa0, 0x71, 0xaa, 0x91, 0x19, 0x20, 0xdb, 0x50, 0x61, 0x7c, 0xf2, 0x3a, 0xc3, 0x92, 0x2a, 0xfd, 0xc4, 0xa2, 0x50, 0xf4, 0x63, 0x35, 0x7a, 0x5a, 0xbf, 0x85, 0x97, 0x36, 0x3a, 0x87, 0x07,
0xaa, 0xa8, 0x14, 0xff, 0x6b, 0xdf, 0x40, 0x5a, 0xe8, 0xe8, 0x31, 0x40, 0x2a, 0x9f, 0xcd, 0x67, 0x2e, 0x75, 0xe2, 0xcb, 0x05, 0xa7, 0xee, 0x84, 0x3a, 0x49, 0x4c, 0xf7, 0xb2, 0x50, 0xb3, 0x67,
0xd4, 0xa0, 0x2b, 0x58, 0x54, 0xec, 0x8f, 0x82, 0xc5, 0xaa, 0x65, 0x1a, 0x68, 0x03, 0x2f, 0x74, 0xf4, 0x9b, 0xc3, 0xaf, 0x07, 0x19, 0x28, 0x83, 0xab, 0x80, 0x0c, 0x46, 0xab, 0x6f, 0x8e, 0x43,
0x14, 0xc1, 0x03, 0x9f, 0x7a, 0x7c, 0x3e, 0x93, 0xd4, 0x1f, 0x51, 0x2f, 0xe1, 0xf4, 0x20, 0x73, 0x1e, 0x5f, 0xe2, 0x75, 0x79, 0x45, 0xd1, 0x3e, 0x61, 0xfc, 0x64, 0xe1, 0x12, 0x4e, 0xdd, 0x83,
0xad, 0x74, 0x4a, 0xdd, 0x7a, 0xff, 0x79, 0x2f, 0xeb, 0x7b, 0xaf, 0x58, 0x66, 0x6f, 0xb0, 0x3a, 0x89, 0x05, 0x12, 0xd1, 0xb2, 0xb3, 0xbb, 0x07, 0x0f, 0x6f, 0x4a, 0x2f, 0x80, 0x3e, 0xa3, 0x97,
0x6a, 0x18, 0x4b, 0x3e, 0xc7, 0xeb, 0x72, 0xa2, 0x87, 0xe0, 0x24, 0x33, 0x9f, 0x48, 0xea, 0x1f, 0x72, 0x1a, 0x26, 0x16, 0x47, 0xd4, 0x81, 0xea, 0x05, 0xf1, 0x93, 0x6c, 0x1e, 0xa9, 0xf1, 0x42,
0x8d, 0x74, 0xe3, 0x4a, 0x38, 0x37, 0xa0, 0x6f, 0xa0, 0xa9, 0x3a, 0x2d, 0x0a, 0x73, 0xd5, 0x4d, 0xff, 0x46, 0xb3, 0x7f, 0x31, 0xa0, 0x75, 0x2c, 0xbb, 0x50, 0x93, 0xec, 0x40, 0x35, 0x8a, 0x67,
0xab, 0xf7, 0xdb, 0x79, 0x15, 0xd7, 0x27, 0x8f, 0x6f, 0xc4, 0xb4, 0x0f, 0xe0, 0xe1, 0x6d, 0xe5, 0xaf, 0xb3, 0x61, 0xa6, 0x86, 0xc0, 0x29, 0xed, 0xf5, 0xb5, 0xab, 0x72, 0x2c, 0xed, 0x12, 0x86,
0x29, 0x1e, 0x5c, 0xd2, 0xb9, 0x6e, 0xb0, 0x83, 0x95, 0xa8, 0x9a, 0x7e, 0x45, 0xc2, 0x24, 0xa3, 0xc6, 0x15, 0x0c, 0x83, 0xf5, 0x18, 0x56, 0x24, 0x86, 0xcf, 0x73, 0x0c, 0x8b, 0x65, 0xdc, 0x15,
0x4b, 0xaa, 0xbc, 0xb0, 0xbf, 0xb6, 0xdc, 0xb7, 0x50, 0x56, 0x73, 0x52, 0x1e, 0x21, 0x9b, 0x04, 0x7e, 0xd5, 0x15, 0xf8, 0xa1, 0x6f, 0xa1, 0x2d, 0x28, 0xc5, 0x0a, 0xf3, 0x92, 0x34, 0x6a, 0x0e,
0xb1, 0x89, 0x4a, 0x95, 0x95, 0x2c, 0xdb, 0x86, 0x0a, 0x8d, 0x48, 0x90, 0xf1, 0x2c, 0x55, 0x94, 0xbb, 0xeb, 0x27, 0x8a, 0xaf, 0xdd, 0xb9, 0xd3, 0x39, 0xbc, 0x83, 0x8a, 0x24, 0x64, 0x07, 0xaa,
0x27, 0x67, 0x21, 0xcd, 0x98, 0xa6, 0x64, 0xf7, 0x09, 0xc0, 0x48, 0xf2, 0x20, 0x9e, 0xbc, 0x09, 0x7e, 0x34, 0xf3, 0x42, 0x75, 0x2b, 0x35, 0x56, 0xae, 0x53, 0x07, 0xaa, 0x34, 0x20, 0x5e, 0xb6,
0x84, 0x44, 0x3b, 0x50, 0xd5, 0xcf, 0x8a, 0x96, 0xd5, 0x29, 0x75, 0x1d, 0x6c, 0x34, 0xf7, 0x4f, 0x50, 0xa9, 0x21, 0x22, 0xe3, 0xc8, 0xa7, 0xd9, 0x4a, 0x89, 0xb3, 0xfd, 0x04, 0x60, 0xc2, 0x63,
0x1b, 0xb6, 0xf6, 0x48, 0x18, 0x62, 0x9a, 0x82, 0xc4, 0xf4, 0x5d, 0x42, 0x85, 0x44, 0x3d, 0xa8, 0x2f, 0x9c, 0xbd, 0xf1, 0x18, 0x47, 0x5b, 0x50, 0x93, 0xcf, 0x32, 0x4b, 0xeb, 0x19, 0x7d, 0x13,
0x7a, 0x69, 0x8f, 0x2c, 0xdd, 0xa3, 0x9d, 0xd5, 0x93, 0xc2, 0xc6, 0x0b, 0xb9, 0x86, 0xeb, 0xb6, 0x2b, 0xcb, 0xfe, 0x4b, 0x87, 0xcd, 0x1d, 0xe2, 0xfb, 0x98, 0xa6, 0x4d, 0x62, 0x7a, 0x9e, 0x50,
0xf6, 0xde, 0xcc, 0xbd, 0x15, 0x3e, 0xc3, 0x7d, 0x04, 0xe5, 0x19, 0x91, 0x53, 0x53, 0xba, 0x96, 0xc6, 0xd1, 0x00, 0x6a, 0x4e, 0x8a, 0x91, 0x26, 0x31, 0xda, 0x5a, 0x3d, 0x31, 0xac, 0xa2, 0x90,
0x55, 0x5d, 0x11, 0x95, 0x53, 0xe6, 0x9b, 0xda, 0x8d, 0x96, 0x6d, 0x53, 0x25, 0xdf, 0xa6, 0x01, 0xad, 0x96, 0x5a, 0x97, 0xd1, 0x1b, 0x79, 0xb4, 0xe8, 0x4f, 0x2d, 0x39, 0x82, 0xca, 0x82, 0xf0,
0xd4, 0xa6, 0x94, 0xf8, 0x94, 0x8b, 0x56, 0x55, 0x93, 0xe7, 0x59, 0xfe, 0xc8, 0x0a, 0x04, 0xbd, 0xb9, 0x2a, 0x5d, 0x9e, 0x45, 0x5d, 0x01, 0xe5, 0xf3, 0xc8, 0x55, 0xb5, 0x2b, 0x2b, 0x93, 0x8d,
0xfd, 0xd4, 0x39, 0xe5, 0x4c, 0x16, 0xaa, 0x6a, 0x18, 0x33, 0x7f, 0xae, 0x27, 0xdf, 0xc0, 0x5a, 0x6a, 0x2e, 0x1b, 0x23, 0xa8, 0xcf, 0x29, 0x71, 0x69, 0xcc, 0xac, 0x9a, 0x24, 0xd1, 0xb3, 0xfc,
0x6e, 0x9f, 0x42, 0xa3, 0xe8, 0xbc, 0x62, 0x82, 0xcf, 0x8a, 0x13, 0xac, 0xf7, 0xb7, 0xf3, 0x97, 0x91, 0x15, 0x1d, 0x0c, 0x76, 0xd3, 0xe0, 0x94, 0x3b, 0xd9, 0x55, 0x51, 0xc3, 0x34, 0x72, 0x2f,
0xf3, 0x16, 0x17, 0xe7, 0xfa, 0x97, 0x05, 0xdb, 0xcb, 0x35, 0x89, 0x19, 0x8b, 0x05, 0x55, 0xcf, 0xa5, 0x2e, 0xb4, 0xb0, 0x3c, 0x77, 0x8f, 0xa1, 0x55, 0x0c, 0x5e, 0x31, 0xc1, 0x67, 0xc5, 0x09,
0x7b, 0xcc, 0xa7, 0x3a, 0x77, 0x05, 0x6b, 0x19, 0x0d, 0x73, 0x60, 0xb6, 0x06, 0xf6, 0xf9, 0x3a, 0x36, 0x87, 0x9d, 0xfc, 0xe5, 0x1c, 0xe2, 0xe2, 0x5c, 0xff, 0xd6, 0xa0, 0x53, 0xae, 0x89, 0x2d,
0x60, 0x69, 0x92, 0x3b, 0x90, 0x95, 0x3e, 0x28, 0xb2, 0x43, 0x70, 0xce, 0x82, 0x88, 0x62, 0x12, 0xa2, 0x90, 0x51, 0xf1, 0xbc, 0x13, 0xb9, 0x54, 0xe6, 0xae, 0x62, 0x79, 0x46, 0xe3, 0xbc, 0x31,
0x4f, 0x28, 0xea, 0x40, 0xfd, 0x82, 0xb3, 0x68, 0x38, 0x63, 0xde, 0xf4, 0x68, 0x64, 0x6e, 0x4a, 0x5d, 0x36, 0xf6, 0xf9, 0xba, 0xc6, 0xd2, 0x24, 0xb7, 0x74, 0x66, 0x7c, 0xd0, 0xce, 0xf6, 0xc1,
0xd1, 0xa4, 0x56, 0x52, 0xb2, 0xec, 0xbb, 0x9d, 0xae, 0xe4, 0xc2, 0xe0, 0xbe, 0xb7, 0xc0, 0x51, 0x7c, 0xeb, 0x05, 0x14, 0x93, 0x70, 0x46, 0x51, 0x0f, 0x9a, 0xa7, 0x71, 0x14, 0x8c, 0x17, 0x91,
0x8b, 0xf3, 0x6d, 0x42, 0xb9, 0x5e, 0x13, 0x4e, 0x2f, 0xcc, 0x6d, 0x72, 0x70, 0xaa, 0xa8, 0x43, 0x33, 0x3f, 0x98, 0x28, 0xed, 0x28, 0xba, 0xd0, 0x43, 0x30, 0x79, 0x94, 0x7d, 0xd7, 0xe5, 0xf7,
0x17, 0x91, 0x9f, 0x94, 0xd7, 0x29, 0x0b, 0x62, 0x29, 0x4c, 0x96, 0x65, 0xa3, 0xba, 0x52, 0x41, 0xdc, 0x61, 0xbf, 0xd7, 0xc0, 0x14, 0x8b, 0xf3, 0x5d, 0x42, 0x63, 0xb9, 0x26, 0x31, 0x3d, 0x55,
0x2c, 0x29, 0xbf, 0x22, 0xe1, 0xd1, 0x48, 0xb7, 0xa0, 0x84, 0x0b, 0x16, 0xf4, 0x15, 0x38, 0x32, 0x1a, 0x64, 0xe2, 0xd4, 0x10, 0xcb, 0x1d, 0x90, 0x9f, 0x45, 0xd4, 0x71, 0xe4, 0x85, 0x9c, 0xa9,
0x2b, 0x5b, 0x33, 0xad, 0xde, 0xdf, 0xca, 0xa1, 0x2e, 0x10, 0xe1, 0xdc, 0x4b, 0xf5, 0x53, 0x1d, 0x2c, 0x65, 0x27, 0x7a, 0x0c, 0xe0, 0x85, 0x9c, 0xc6, 0x17, 0xc4, 0x3f, 0x98, 0x48, 0x08, 0x0c,
0x32, 0x4d, 0xc1, 0x06, 0xd6, 0xb2, 0xfb, 0x8b, 0x0d, 0x4d, 0x5d, 0xac, 0x7a, 0xfa, 0x43, 0xae, 0x5c, 0xf0, 0xa0, 0xaf, 0xc0, 0xe4, 0x59, 0xd9, 0x92, 0x69, 0xcd, 0xe1, 0x66, 0xde, 0xea, 0xb2,
0xca, 0xab, 0x9c, 0x13, 0x25, 0xcd, 0x89, 0xcf, 0x72, 0xb7, 0xeb, 0x05, 0xac, 0xe1, 0xc3, 0x17, 0x23, 0x9c, 0x47, 0x09, 0x3c, 0x85, 0xa0, 0x49, 0x0a, 0xb6, 0xb0, 0x3c, 0xdb, 0xbf, 0xe9, 0xd0,
0x50, 0x7b, 0x97, 0x50, 0x1e, 0x50, 0xd1, 0x2a, 0xeb, 0x14, 0x5b, 0xcb, 0x67, 0x4e, 0xa7, 0xc1, 0x96, 0xc5, 0x8a, 0xa7, 0x3f, 0xe4, 0xaa, 0xbc, 0xca, 0x39, 0x61, 0x48, 0x4e, 0x7c, 0x96, 0x87,
0x99, 0x4f, 0xfb, 0xc5, 0x9d, 0x54, 0x59, 0x7f, 0xc6, 0x7e, 0xb3, 0xe0, 0xe3, 0x42, 0x55, 0x86, 0x5d, 0x2d, 0x60, 0x0d, 0x1f, 0xbe, 0x80, 0xfa, 0x79, 0x42, 0x63, 0x8f, 0x32, 0x25, 0xba, 0x9b,
0xeb, 0x3b, 0x50, 0xbd, 0xe0, 0x24, 0x32, 0x27, 0xa7, 0x81, 0x8d, 0x86, 0x86, 0xb0, 0x11, 0x51, 0x65, 0x99, 0x93, 0x69, 0x70, 0x16, 0xd3, 0x7d, 0x71, 0x2b, 0x55, 0xd6, 0xcb, 0xd8, 0xef, 0x1a,
0x49, 0xd4, 0x61, 0x35, 0x84, 0x7f, 0xba, 0x12, 0x9c, 0x61, 0xfb, 0x91, 0xf1, 0x4d, 0xe1, 0x2d, 0x7c, 0x5c, 0xa8, 0x4a, 0x71, 0x7d, 0x0b, 0x6a, 0xa7, 0x31, 0x09, 0x94, 0xe4, 0xb4, 0xb0, 0xb2,
0x42, 0xdb, 0x2f, 0xe1, 0xde, 0xd2, 0xa7, 0x7f, 0x54, 0xf1, 0x03, 0xb8, 0xbf, 0xc7, 0xc2, 0x90, 0xd0, 0x18, 0x1a, 0x01, 0xe5, 0x44, 0x08, 0xab, 0x22, 0xfc, 0xd3, 0x95, 0xcd, 0x29, 0xb6, 0x1f,
0x7a, 0xf2, 0x88, 0x4a, 0x1e, 0x78, 0xc2, 0xf4, 0xd2, 0xfd, 0xd9, 0x82, 0x9d, 0xeb, 0x5f, 0x0c, 0xa8, 0xd8, 0xb4, 0xbd, 0xe5, 0xd5, 0xee, 0x4b, 0xb8, 0x57, 0xfa, 0xf4, 0xaf, 0x2a, 0x7e, 0x00,
0x9e, 0x5d, 0xa8, 0x45, 0xa9, 0xc9, 0x0c, 0xba, 0x5b, 0xd8, 0xd3, 0x95, 0x21, 0xbd, 0x53, 0x32, 0xf7, 0x77, 0x22, 0xdf, 0xa7, 0x0e, 0x3f, 0xa0, 0x3c, 0xf6, 0x1c, 0xa6, 0xb0, 0xb4, 0x7f, 0xd5,
0x0f, 0x19, 0xf1, 0x71, 0x16, 0xd8, 0x7e, 0x0a, 0x35, 0x63, 0xd3, 0x3f, 0xac, 0x9c, 0xa9, 0x73, 0x60, 0xeb, 0xea, 0x17, 0xd5, 0xcf, 0x36, 0xd4, 0x83, 0xd4, 0xa5, 0x06, 0xdd, 0x2f, 0xec, 0xe9,
0x47, 0x93, 0x34, 0x63, 0x03, 0x17, 0x2c, 0xee, 0x00, 0xd0, 0xde, 0x94, 0x7a, 0x97, 0xfb, 0x94, 0xca, 0x2b, 0x83, 0x63, 0x72, 0xe9, 0x47, 0xc4, 0xc5, 0xd9, 0xc5, 0xee, 0x53, 0xa8, 0x2b, 0x9f,
0x84, 0x72, 0xfa, 0x2f, 0xc9, 0xe6, 0xfe, 0x6e, 0xc1, 0xd6, 0x52, 0x9a, 0x05, 0x98, 0xaa, 0x90, 0xa0, 0xec, 0x22, 0x8e, 0x84, 0xdc, 0xd1, 0x24, 0xcd, 0xd8, 0xc2, 0x05, 0x8f, 0x3d, 0x02, 0xb4,
0x44, 0x9a, 0x97, 0x37, 0x97, 0x8e, 0xe9, 0x4d, 0xf7, 0x5e, 0xaa, 0x8e, 0x74, 0x04, 0x36, 0x91, 0x33, 0xa7, 0xce, 0xd9, 0x2e, 0x25, 0x3e, 0x9f, 0xff, 0x47, 0xb2, 0xd9, 0x7f, 0x68, 0xb0, 0x59,
0xa8, 0xa5, 0x1a, 0x22, 0x04, 0x99, 0x64, 0x0d, 0xce, 0x54, 0x75, 0x18, 0xf4, 0x9f, 0x00, 0x2a, 0x4a, 0xb3, 0x6c, 0xa6, 0xc6, 0x38, 0xe1, 0xea, 0xe5, 0x8d, 0x92, 0x98, 0x5e, 0x0f, 0x1f, 0xa4,
0x49, 0x10, 0x0a, 0x73, 0xf0, 0x8b, 0x26, 0xb7, 0xa7, 0xe9, 0xb6, 0xc8, 0x89, 0xea, 0x50, 0x3b, 0xe6, 0x44, 0xde, 0xc0, 0xea, 0x26, 0xb2, 0x04, 0x20, 0x8c, 0x91, 0x59, 0x06, 0x70, 0x66, 0x0a,
0x3f, 0x3e, 0x3c, 0x3e, 0xf9, 0xee, 0xb8, 0xf9, 0x11, 0xaa, 0x82, 0x7d, 0x72, 0xd8, 0xb4, 0x90, 0x61, 0x90, 0x3f, 0x06, 0x28, 0x27, 0x9e, 0xcf, 0x94, 0xe0, 0x17, 0x5d, 0xf6, 0x40, 0xd2, 0x6d,
0x03, 0x95, 0x21, 0xc6, 0x27, 0xb8, 0x69, 0xf7, 0xbf, 0x87, 0x8d, 0xec, 0x0e, 0xa2, 0x13, 0x68, 0x99, 0x13, 0x35, 0xa1, 0x7e, 0x72, 0xb8, 0x7f, 0x78, 0xf4, 0xfd, 0x61, 0xfb, 0x23, 0x54, 0x03,
0x14, 0xef, 0x22, 0x7a, 0x74, 0xeb, 0x0f, 0x41, 0xfb, 0xf1, 0xed, 0xe7, 0xf4, 0x4b, 0xab, 0xff, 0xfd, 0x68, 0xbf, 0xad, 0x21, 0x13, 0xaa, 0x63, 0x8c, 0x8f, 0x70, 0x5b, 0x1f, 0xfe, 0x00, 0x8d,
0x06, 0xca, 0xfa, 0x0f, 0xc4, 0x00, 0x9c, 0x05, 0xff, 0x50, 0x7b, 0xfd, 0xc6, 0xb5, 0x3f, 0xb9, 0x4c, 0x07, 0xd1, 0x11, 0xb4, 0x8a, 0xba, 0x88, 0x1e, 0xdd, 0xf8, 0x87, 0xa0, 0xfb, 0xf8, 0x66,
0x85, 0xb0, 0xfd, 0xf7, 0x16, 0xd4, 0x07, 0x01, 0x99, 0xc4, 0x4c, 0xc8, 0xc0, 0x13, 0x68, 0x04, 0x39, 0xfd, 0x52, 0x1b, 0xbe, 0x81, 0x8a, 0xfc, 0x21, 0x31, 0x02, 0x73, 0xc9, 0x3f, 0xd4, 0x5d,
0x9b, 0xcb, 0xf4, 0x40, 0x9f, 0xae, 0x27, 0x4e, 0x9a, 0xbf, 0x73, 0x17, 0xb3, 0xd0, 0x01, 0xd4, 0xbf, 0x71, 0xdd, 0x4f, 0x6e, 0x20, 0xec, 0xf0, 0xbd, 0x06, 0xcd, 0x91, 0x47, 0x66, 0x61, 0xc4,
0x0b, 0x73, 0x42, 0x0f, 0xd7, 0x8c, 0x2f, 0x4d, 0xf7, 0xe8, 0xd6, 0xe1, 0xf6, 0xcf, 0xc1, 0x39, 0xb8, 0xe7, 0x30, 0xb4, 0x07, 0xcd, 0x02, 0xa4, 0xe8, 0xe1, 0x1a, 0xa4, 0xd3, 0xcc, 0x8f, 0x6e,
0xe3, 0x24, 0x16, 0x17, 0x8c, 0x47, 0x68, 0x1f, 0xee, 0x2d, 0x94, 0xff, 0xd6, 0x87, 0x1f, 0xe0, 0x9c, 0x03, 0x9a, 0xc0, 0x46, 0x99, 0x6a, 0xe8, 0xd3, 0xf5, 0x24, 0x4c, 0x33, 0xf6, 0x6e, 0x63,
0xfe, 0x52, 0x26, 0xd5, 0xfc, 0x5d, 0xe2, 0x5d, 0xfe, 0x3f, 0x6d, 0xde, 0x6d, 0xbc, 0x85, 0xde, 0xe9, 0xf0, 0x04, 0xcc, 0xb7, 0x31, 0x09, 0xd9, 0x69, 0x14, 0x07, 0x68, 0x17, 0xee, 0x2d, 0x8d,
0xcb, 0xec, 0xfb, 0xb8, 0xaa, 0xff, 0xc7, 0x3f, 0xff, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x78, 0xcf, 0xff, 0x87, 0xc3, 0x8f, 0x70, 0xbf, 0x94, 0x49, 0x80, 0xbf, 0x4d, 0x9c, 0xb3, 0xbb, 0x81, 0x79,
0xf6, 0x25, 0xd8, 0x0b, 0x00, 0x00, 0xbb, 0xf5, 0x0e, 0x06, 0x2f, 0xb3, 0xef, 0xd3, 0x9a, 0xfc, 0x87, 0xe5, 0xf9, 0x3f, 0x01, 0x00,
0x00, 0xff, 0xff, 0x9f, 0xc1, 0xca, 0xb8, 0xc1, 0x0c, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
...@@ -1191,8 +1213,8 @@ var _Data_serviceDesc = grpc.ServiceDesc{ ...@@ -1191,8 +1213,8 @@ var _Data_serviceDesc = grpc.ServiceDesc{
// //
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type DiagnosticsClient interface { type DiagnosticsClient interface {
CollectMetrics(ctx context.Context, in *CollectMetricsRequest, opts ...grpc.CallOption) (*CollectMetricsResponse, error)
CheckHealth(ctx context.Context, in *CheckHealthRequest, opts ...grpc.CallOption) (*CheckHealthResponse, error) CheckHealth(ctx context.Context, in *CheckHealthRequest, opts ...grpc.CallOption) (*CheckHealthResponse, error)
CollectMetrics(ctx context.Context, in *CollectMetricsRequest, opts ...grpc.CallOption) (*CollectMetricsResponse, error)
} }
type diagnosticsClient struct { type diagnosticsClient struct {
...@@ -1203,18 +1225,18 @@ func NewDiagnosticsClient(cc *grpc.ClientConn) DiagnosticsClient { ...@@ -1203,18 +1225,18 @@ func NewDiagnosticsClient(cc *grpc.ClientConn) DiagnosticsClient {
return &diagnosticsClient{cc} return &diagnosticsClient{cc}
} }
func (c *diagnosticsClient) CollectMetrics(ctx context.Context, in *CollectMetricsRequest, opts ...grpc.CallOption) (*CollectMetricsResponse, error) { func (c *diagnosticsClient) CheckHealth(ctx context.Context, in *CheckHealthRequest, opts ...grpc.CallOption) (*CheckHealthResponse, error) {
out := new(CollectMetricsResponse) out := new(CheckHealthResponse)
err := c.cc.Invoke(ctx, "/pluginv2.Diagnostics/CollectMetrics", in, out, opts...) err := c.cc.Invoke(ctx, "/pluginv2.Diagnostics/CheckHealth", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return out, nil return out, nil
} }
func (c *diagnosticsClient) CheckHealth(ctx context.Context, in *CheckHealthRequest, opts ...grpc.CallOption) (*CheckHealthResponse, error) { func (c *diagnosticsClient) CollectMetrics(ctx context.Context, in *CollectMetricsRequest, opts ...grpc.CallOption) (*CollectMetricsResponse, error) {
out := new(CheckHealthResponse) out := new(CollectMetricsResponse)
err := c.cc.Invoke(ctx, "/pluginv2.Diagnostics/CheckHealth", in, out, opts...) err := c.cc.Invoke(ctx, "/pluginv2.Diagnostics/CollectMetrics", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -1223,57 +1245,57 @@ func (c *diagnosticsClient) CheckHealth(ctx context.Context, in *CheckHealthRequ ...@@ -1223,57 +1245,57 @@ func (c *diagnosticsClient) CheckHealth(ctx context.Context, in *CheckHealthRequ
// DiagnosticsServer is the server API for Diagnostics service. // DiagnosticsServer is the server API for Diagnostics service.
type DiagnosticsServer interface { type DiagnosticsServer interface {
CollectMetrics(context.Context, *CollectMetricsRequest) (*CollectMetricsResponse, error)
CheckHealth(context.Context, *CheckHealthRequest) (*CheckHealthResponse, error) CheckHealth(context.Context, *CheckHealthRequest) (*CheckHealthResponse, error)
CollectMetrics(context.Context, *CollectMetricsRequest) (*CollectMetricsResponse, error)
} }
// UnimplementedDiagnosticsServer can be embedded to have forward compatible implementations. // UnimplementedDiagnosticsServer can be embedded to have forward compatible implementations.
type UnimplementedDiagnosticsServer struct { type UnimplementedDiagnosticsServer struct {
} }
func (*UnimplementedDiagnosticsServer) CollectMetrics(ctx context.Context, req *CollectMetricsRequest) (*CollectMetricsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CollectMetrics not implemented")
}
func (*UnimplementedDiagnosticsServer) CheckHealth(ctx context.Context, req *CheckHealthRequest) (*CheckHealthResponse, error) { func (*UnimplementedDiagnosticsServer) CheckHealth(ctx context.Context, req *CheckHealthRequest) (*CheckHealthResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CheckHealth not implemented") return nil, status.Errorf(codes.Unimplemented, "method CheckHealth not implemented")
} }
func (*UnimplementedDiagnosticsServer) CollectMetrics(ctx context.Context, req *CollectMetricsRequest) (*CollectMetricsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CollectMetrics not implemented")
}
func RegisterDiagnosticsServer(s *grpc.Server, srv DiagnosticsServer) { func RegisterDiagnosticsServer(s *grpc.Server, srv DiagnosticsServer) {
s.RegisterService(&_Diagnostics_serviceDesc, srv) s.RegisterService(&_Diagnostics_serviceDesc, srv)
} }
func _Diagnostics_CollectMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Diagnostics_CheckHealth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CollectMetricsRequest) in := new(CheckHealthRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
return nil, err return nil, err
} }
if interceptor == nil { if interceptor == nil {
return srv.(DiagnosticsServer).CollectMetrics(ctx, in) return srv.(DiagnosticsServer).CheckHealth(ctx, in)
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: "/pluginv2.Diagnostics/CollectMetrics", FullMethod: "/pluginv2.Diagnostics/CheckHealth",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DiagnosticsServer).CollectMetrics(ctx, req.(*CollectMetricsRequest)) return srv.(DiagnosticsServer).CheckHealth(ctx, req.(*CheckHealthRequest))
} }
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Diagnostics_CheckHealth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Diagnostics_CollectMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CheckHealthRequest) in := new(CollectMetricsRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
return nil, err return nil, err
} }
if interceptor == nil { if interceptor == nil {
return srv.(DiagnosticsServer).CheckHealth(ctx, in) return srv.(DiagnosticsServer).CollectMetrics(ctx, in)
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: "/pluginv2.Diagnostics/CheckHealth", FullMethod: "/pluginv2.Diagnostics/CollectMetrics",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DiagnosticsServer).CheckHealth(ctx, req.(*CheckHealthRequest)) return srv.(DiagnosticsServer).CollectMetrics(ctx, req.(*CollectMetricsRequest))
} }
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
...@@ -1283,13 +1305,13 @@ var _Diagnostics_serviceDesc = grpc.ServiceDesc{ ...@@ -1283,13 +1305,13 @@ var _Diagnostics_serviceDesc = grpc.ServiceDesc{
HandlerType: (*DiagnosticsServer)(nil), HandlerType: (*DiagnosticsServer)(nil),
Methods: []grpc.MethodDesc{ Methods: []grpc.MethodDesc{
{ {
MethodName: "CollectMetrics",
Handler: _Diagnostics_CollectMetrics_Handler,
},
{
MethodName: "CheckHealth", MethodName: "CheckHealth",
Handler: _Diagnostics_CheckHealth_Handler, Handler: _Diagnostics_CheckHealth_Handler,
}, },
{
MethodName: "CollectMetrics",
Handler: _Diagnostics_CollectMetrics_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "backend.proto", Metadata: "backend.proto",
......
...@@ -147,7 +147,7 @@ github.com/gosimple/slug ...@@ -147,7 +147,7 @@ github.com/gosimple/slug
# github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 # github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4
github.com/grafana/grafana-plugin-model/go/datasource github.com/grafana/grafana-plugin-model/go/datasource
github.com/grafana/grafana-plugin-model/go/renderer github.com/grafana/grafana-plugin-model/go/renderer
# github.com/grafana/grafana-plugin-sdk-go v0.20.0 # github.com/grafana/grafana-plugin-sdk-go v0.21.0
github.com/grafana/grafana-plugin-sdk-go/backend/plugin github.com/grafana/grafana-plugin-sdk-go/backend/plugin
github.com/grafana/grafana-plugin-sdk-go/dataframe github.com/grafana/grafana-plugin-sdk-go/dataframe
github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2 github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment