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

ref https://github.com/grafana/grafana-plugin-sdk-go/pull/84
This commit is contained in:
Carl Bergquist
2020-03-10 15:18:27 +01:00
committed by GitHub
parent 62c824e3a4
commit 5f94d31da9
9 changed files with 208 additions and 180 deletions

2
go.mod
View File

@ -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

4
go.sum
View File

@ -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=

View File

@ -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("*"))

View File

@ -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,

View File

@ -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
} }
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),
} }
} }

View File

@ -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

View File

@ -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{},

View File

@ -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 {
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 {
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 {
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 {
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() {
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{
// //
// 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,15 +1225,6 @@ 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) {
out := new(CollectMetricsResponse)
err := c.cc.Invoke(ctx, "/pluginv2.Diagnostics/CollectMetrics", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *diagnosticsClient) CheckHealth(ctx context.Context, in *CheckHealthRequest, opts ...grpc.CallOption) (*CheckHealthResponse, error) { func (c *diagnosticsClient) CheckHealth(ctx context.Context, in *CheckHealthRequest, opts ...grpc.CallOption) (*CheckHealthResponse, error) {
out := new(CheckHealthResponse) out := new(CheckHealthResponse)
err := c.cc.Invoke(ctx, "/pluginv2.Diagnostics/CheckHealth", in, out, opts...) err := c.cc.Invoke(ctx, "/pluginv2.Diagnostics/CheckHealth", in, out, opts...)
@ -1221,45 +1234,36 @@ func (c *diagnosticsClient) CheckHealth(ctx context.Context, in *CheckHealthRequ
return out, nil return out, nil
} }
func (c *diagnosticsClient) CollectMetrics(ctx context.Context, in *CollectMetricsRequest, opts ...grpc.CallOption) (*CollectMetricsResponse, error) {
out := new(CollectMetricsResponse)
err := c.cc.Invoke(ctx, "/pluginv2.Diagnostics/CollectMetrics", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// 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) {
in := new(CollectMetricsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DiagnosticsServer).CollectMetrics(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pluginv2.Diagnostics/CollectMetrics",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DiagnosticsServer).CollectMetrics(ctx, req.(*CollectMetricsRequest))
}
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_CheckHealth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CheckHealthRequest) in := new(CheckHealthRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -1278,18 +1282,36 @@ func _Diagnostics_CheckHealth_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Diagnostics_CollectMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CollectMetricsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DiagnosticsServer).CollectMetrics(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pluginv2.Diagnostics/CollectMetrics",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DiagnosticsServer).CollectMetrics(ctx, req.(*CollectMetricsRequest))
}
return interceptor(ctx, in, info, handler)
}
var _Diagnostics_serviceDesc = grpc.ServiceDesc{ var _Diagnostics_serviceDesc = grpc.ServiceDesc{
ServiceName: "pluginv2.Diagnostics", ServiceName: "pluginv2.Diagnostics",
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",

2
vendor/modules.txt vendored
View File

@ -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