azuremonitor: simple alerting for Azure Monitor API

Lots of edge cases and functionality left to implement but
a simple query works for alerting now.
This commit is contained in:
Daniel Lee
2019-02-08 18:15:17 +01:00
parent 0e228d582d
commit 10194df112
5 changed files with 118 additions and 16 deletions

View File

@@ -11,8 +11,8 @@ import (
"path"
"time"
// "github.com/grafana/grafana/pkg/components/null"
"github.com/grafana/grafana/pkg/api/pluginproxy"
"github.com/grafana/grafana/pkg/components/null"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/log"
"github.com/grafana/grafana/pkg/models"
@@ -113,10 +113,12 @@ func (e *AzureMonitorExecutor) buildQueries(tsdbQuery *tsdb.TsdbQuery) ([]*Azure
azureMonitorTarget := query.Model.Get("azureMonitor").MustMap()
resourceGroup := azureMonitorTarget["resourceGroup"].(string)
metricDefinition := azureMonitorTarget["metricDefinition"].(string)
resourceName := azureMonitorTarget["resourceName"].(string)
azureURL := fmt.Sprintf("resourceGroups/%s/providers/%s/%s/providers/microsoft.insights/metrics", resourceGroup, metricDefinition, resourceName)
urlComponents := make(map[string]string)
urlComponents["resourceGroup"] = azureMonitorTarget["resourceGroup"].(string)
urlComponents["metricDefinition"] = azureMonitorTarget["metricDefinition"].(string)
urlComponents["resourceName"] = azureMonitorTarget["resourceName"].(string)
azureURL := fmt.Sprintf("resourceGroups/%s/providers/%s/%s/providers/microsoft.insights/metrics", urlComponents["resourceGroup"], urlComponents["metricDefinition"], urlComponents["resourceName"])
alias := azureMonitorTarget["alias"].(string)
@@ -133,11 +135,12 @@ func (e *AzureMonitorExecutor) buildQueries(tsdbQuery *tsdb.TsdbQuery) ([]*Azure
}
azureMonitorQueries = append(azureMonitorQueries, &AzureMonitorQuery{
URL: azureURL,
Target: target,
Params: params,
RefID: query.RefId,
Alias: alias,
URL: azureURL,
UrlComponents: urlComponents,
Target: target,
Params: params,
RefID: query.RefId,
Alias: alias,
})
}
@@ -247,5 +250,21 @@ func (e *AzureMonitorExecutor) unmarshalResponse(res *http.Response) (AzureMonit
func (e *AzureMonitorExecutor) parseResponse(queryRes *tsdb.QueryResult, data AzureMonitorResponse, query *AzureMonitorQuery) error {
slog.Info("AzureMonitor", "Response", data)
for _, series := range data.Value {
points := make([]tsdb.TimePoint, 0)
defaultMetricName := fmt.Sprintf("%s.%s", query.UrlComponents["resourceName"], series.Name.LocalizedValue)
for _, point := range series.Timeseries[0].Data {
value := point.Average
points = append(points, tsdb.NewTimePoint(null.FloatFrom(value), float64((point.TimeStamp).Unix())*1000))
}
queryRes.Series = append(queryRes.Series, &tsdb.TimeSeries{
Name: defaultMetricName,
Points: points,
})
}
return nil
}