azuremonitor.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package azuremonitor
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "github.com/grafana/grafana/pkg/infra/log"
  7. "github.com/grafana/grafana/pkg/models"
  8. "github.com/grafana/grafana/pkg/tsdb"
  9. )
  10. var (
  11. azlog log.Logger
  12. )
  13. // AzureMonitorExecutor executes queries for the Azure Monitor datasource - all four services
  14. type AzureMonitorExecutor struct {
  15. httpClient *http.Client
  16. dsInfo *models.DataSource
  17. }
  18. // NewAzureMonitorExecutor initializes a http client
  19. func NewAzureMonitorExecutor(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) {
  20. httpClient, err := dsInfo.GetHttpClient()
  21. if err != nil {
  22. return nil, err
  23. }
  24. return &AzureMonitorExecutor{
  25. httpClient: httpClient,
  26. dsInfo: dsInfo,
  27. }, nil
  28. }
  29. func init() {
  30. azlog = log.New("tsdb.azuremonitor")
  31. tsdb.RegisterTsdbQueryEndpoint("grafana-azure-monitor-datasource", NewAzureMonitorExecutor)
  32. }
  33. // Query takes in the frontend queries, parses them into the query format
  34. // expected by chosen Azure Monitor service (Azure Monitor, App Insights etc.)
  35. // executes the queries against the API and parses the response into
  36. // the right format
  37. func (e *AzureMonitorExecutor) Query(ctx context.Context, dsInfo *models.DataSource, tsdbQuery *tsdb.TsdbQuery) (*tsdb.Response, error) {
  38. var result *tsdb.Response
  39. var err error
  40. var azureMonitorQueries []*tsdb.Query
  41. for _, query := range tsdbQuery.Queries {
  42. queryType := query.Model.Get("queryType").MustString("")
  43. switch queryType {
  44. case "Azure Monitor":
  45. azureMonitorQueries = append(azureMonitorQueries, query)
  46. default:
  47. return nil, fmt.Errorf("Alerting not supported for %s", queryType)
  48. }
  49. }
  50. azDatasource := &AzureMonitorDatasource{
  51. httpClient: e.httpClient,
  52. dsInfo: e.dsInfo,
  53. }
  54. result, err = azDatasource.executeTimeSeriesQuery(ctx, azureMonitorQueries, tsdbQuery.TimeRange)
  55. return result, err
  56. }