Have recently migrated to Grfana7.1.0 to enable alerting to my custom DS plugin.
Followed the backend-plugin tutorial - [Build a data source backend plugin | Grafana Plugin Tools] and succesfully enabled alerting tab.
Tried to make this this method under sample-plugin.go to dynamic instead of using 2 static points given as an example.
Have search enough on how to make this dynamic and being new to GO , can someone help me in making this
1)method dynamic and
2) how to use the rest api of query method in Golang.
3)How specify format as Table so that i receive dataframe as table response when it tries to process in processDataFrames.ts file
Have referred simple-json-datasource as well .
Tried sample code.
func (td *SampleDatasource) query(ctx context.Context, query backend.DataQuery, req *backend.QueryDataRequest) backend.DataResponse {
// Unmarshal the json into our queryModel
var qm queryModel
//var nm neoModel
log.DefaultLogger.Info(“QUERY”, “query”, query)
var neoAttr map[string]*json.RawMessage
err := json.Unmarshal(query.JSON, &neoAttr)
if err != nil {
log.DefaultLogger.Info(“query”, “err–”, err)
}
log.DefaultLogger.Info("QUERY", "neoAttr", neoAttr)
queryText := neoAttr["queryText"]
log.DefaultLogger.Info("QUERY", "queryText--", queryText)
payload := simplejson.New()
log.DefaultLogger.Info("QUERY", "payload", payload)
payload.SetPath([]string{"range", "to"}, query.TimeRange.To)
payload.SetPath([]string{"range", "from"}, query.TimeRange.From)
log.DefaultLogger.Info("QUERY", "payload", payload)
qs := []interface{}{}
qs = append(qs, queryText)
log.DefaultLogger.Info("QUERY", "qs", qs)
payload.Set("targets", qs)
log.DefaultLogger.Info("QUERY", "payload", payload)
rbody, err := payload.MarshalJSON()
log.DefaultLogger.Info("QUERY", "rbody", rbody)
url := "http://grafana.staged-by-discourse.com/api/datasources/proxy/2"
log.DefaultLogger.Info("QUERY", "url", url)
queryRequest, err := http.NewRequest(http.MethodPost, url, strings.NewReader(string(rbody)))
queryRequest.Header.Add("Content-Type", "application/json")
if err != nil {
log.DefaultLogger.Info("QUERY", "err queryRequest", err)
}
log.DefaultLogger.Info("QUERY", "queryRequest", queryRequest)
queryResponse, err := ctxhttp.Do(ctx, httpClient, queryRequest)
if err != nil {
log.DefaultLogger.Info("QUERY", "err request", err)
}
log.DefaultLogger.Info("QUERY", "queryResponse", queryResponse)
response := backend.DataResponse{}
response.Error = json.Unmarshal(query.JSON, &qm)
if response.Error != nil {
return response
}
// Log a warning if `Format` is empty.
if qm.Format == "" {
log.DefaultLogger.Warn("format is empty. defaulting to time series")
}
// create data frame response
frame := data.NewFrame("response")
// add the time dimension
frame.Fields = append(frame.Fields,
data.NewField("time", nil, []time.Time{query.TimeRange.From, query.TimeRange.To}),
)
// add values
frame.Fields = append(frame.Fields,
data.NewField("values", nil, []int64{10, 20}),
)
// add the frames to the response
response.Frames = append(response.Frames, frame)
return response
}