in pkg/sls-plugin.go [71:126]
func (ds *SlsDatasource) QueryData(ctx context.Context, req *backend.QueryDataRequest) (res *backend.QueryDataResponse, err error) {
//log.DefaultLogger.Info("QueryData called", "request", req)
config, err := LoadSettings(req.PluginContext)
if err != nil {
return
}
provider := sls.NewStaticCredentialsProvider(config.AccessKeyId, config.AccessKeySecret, "")
client := sls.CreateNormalInterfaceV2(config.Endpoint, provider)
client.SetUserAgent("grafana-go")
if config.Region != "" {
client.SetAuthVersion(sls.AuthV4)
client.SetRegion(config.Region)
}
// create response struct
response := backend.NewQueryDataResponse()
queries := req.Queries
ch := make(chan Result, len(queries))
defer func() {
close(ch)
client = nil
config = nil
if r := recover(); r != nil {
switch r.(type) {
case string:
err = errors.New(r.(string))
case error:
err = r.(error)
}
log.DefaultLogger.Error("QueryData recover", "error", err)
}
}()
log.DefaultLogger.Debug("len(queries)", "len", len(queries))
wg := sync.WaitGroup{}
for _, query := range queries {
wg.Add(1)
log.DefaultLogger.Debug("range_queries", "RefID", query.RefID,
"JSON", query.JSON, "QueryType", query.QueryType)
go ds.QueryLogs(ch, query, client, config)
}
go func(chan Result) {
for res := range ch {
response.Responses[res.refId] = res.dataResponse
wg.Done()
}
}(ch)
wg.Wait()
return response, nil
}