mirror of
https://github.com/grafana/grafana.git
synced 2024-11-24 09:50:29 -06:00
AzureMonitor: Correctly set filter values in portal URL (#60627)
* Correctly set filter values in portal URL * Refactor to include dimensions as a part of AzureMonitor query * Correctly set splitting value in URL - Add type for dimension filters object * Update tests * Don't test dimensions
This commit is contained in:
parent
cb1ca92419
commit
2e4bc200f5
@ -178,12 +178,13 @@ func (e *AzureMonitorDatasource) buildQueries(logger log.Logger, queries []backe
|
|||||||
}
|
}
|
||||||
|
|
||||||
query := &types.AzureMonitorQuery{
|
query := &types.AzureMonitorQuery{
|
||||||
URL: azureURL,
|
URL: azureURL,
|
||||||
Target: target,
|
Target: target,
|
||||||
Params: params,
|
Params: params,
|
||||||
RefID: query.RefID,
|
RefID: query.RefID,
|
||||||
Alias: alias,
|
Alias: alias,
|
||||||
TimeRange: query.TimeRange,
|
TimeRange: query.TimeRange,
|
||||||
|
Dimensions: azJSONModel.DimensionFilters,
|
||||||
}
|
}
|
||||||
if filterString != "" {
|
if filterString != "" {
|
||||||
if filterInBody {
|
if filterInBody {
|
||||||
@ -397,25 +398,75 @@ func getQueryUrl(query *types.AzureMonitorQuery, azurePortalUrl, resourceID, res
|
|||||||
}
|
}
|
||||||
escapedTime := url.QueryEscape(string(timespan))
|
escapedTime := url.QueryEscape(string(timespan))
|
||||||
|
|
||||||
chartDef, err := json.Marshal(map[string]interface{}{
|
var filters []types.AzureMonitorDimensionFilterBackend
|
||||||
"v2charts": []interface{}{
|
var grouping map[string]interface{}
|
||||||
map[string]interface{}{
|
|
||||||
"metrics": []types.MetricChartDefinition{
|
if len(query.Dimensions) > 0 {
|
||||||
{
|
for _, dimension := range query.Dimensions {
|
||||||
ResourceMetadata: map[string]string{
|
var dimensionInt int
|
||||||
"id": resourceID,
|
dimensionFilters := dimension.Filters
|
||||||
},
|
|
||||||
Name: query.Params.Get("metricnames"),
|
// Only the first dimension determines the splitting shown in the Azure Portal
|
||||||
AggregationType: aggregationType,
|
if grouping == nil {
|
||||||
Namespace: query.Params.Get("metricnamespace"),
|
grouping = map[string]interface{}{
|
||||||
MetricVisualization: types.MetricVisualization{
|
"dimension": dimension.Dimension,
|
||||||
DisplayName: query.Params.Get("metricnames"),
|
"sort": 2,
|
||||||
ResourceDisplayName: resourceName,
|
"top": 10,
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
|
if len(dimension.Filters) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
switch dimension.Operator {
|
||||||
|
case "eq":
|
||||||
|
dimensionInt = 0
|
||||||
|
case "ne":
|
||||||
|
dimensionInt = 1
|
||||||
|
case "sw":
|
||||||
|
dimensionInt = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
filter := types.AzureMonitorDimensionFilterBackend{
|
||||||
|
Key: dimension.Dimension,
|
||||||
|
Operator: dimensionInt,
|
||||||
|
Values: dimensionFilters,
|
||||||
|
}
|
||||||
|
filters = append(filters, filter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chart := map[string]interface{}{
|
||||||
|
"metrics": []types.MetricChartDefinition{
|
||||||
|
{
|
||||||
|
ResourceMetadata: map[string]string{
|
||||||
|
"id": resourceID,
|
||||||
|
},
|
||||||
|
Name: query.Params.Get("metricnames"),
|
||||||
|
AggregationType: aggregationType,
|
||||||
|
Namespace: query.Params.Get("metricnamespace"),
|
||||||
|
MetricVisualization: types.MetricVisualization{
|
||||||
|
DisplayName: query.Params.Get("metricnames"),
|
||||||
|
ResourceDisplayName: resourceName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if filters != nil {
|
||||||
|
chart["filterCollection"] = map[string]interface{}{
|
||||||
|
"filters": filters,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if grouping != nil {
|
||||||
|
chart["grouping"] = grouping
|
||||||
|
}
|
||||||
|
|
||||||
|
chartDef, err := json.Marshal(map[string]interface{}{
|
||||||
|
"v2charts": []interface{}{
|
||||||
|
chart,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -45,6 +45,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
queryInterval time.Duration
|
queryInterval time.Duration
|
||||||
expectedURL string
|
expectedURL string
|
||||||
expectedFilter string
|
expectedFilter string
|
||||||
|
expectedPortalURL *string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Parse queries from frontend and build AzureMonitor API queries",
|
name: "Parse queries from frontend and build AzureMonitor API queries",
|
||||||
@ -113,6 +114,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
expectedInterval: "PT1M",
|
expectedInterval: "PT1M",
|
||||||
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
||||||
expectedFilter: "blob eq '*'",
|
expectedFilter: "blob eq '*'",
|
||||||
|
expectedPortalURL: ptr.String("http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22grouping%22%3A%7B%22dimension%22%3A%22blob%22%2C%22sort%22%3A2%2C%22top%22%3A10%7D%2C%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "legacy query without resourceURI and has dimensionFilter*s* property with two dimensions",
|
name: "legacy query without resourceURI and has dimensionFilter*s* property with two dimensions",
|
||||||
@ -125,6 +127,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
expectedInterval: "PT1M",
|
expectedInterval: "PT1M",
|
||||||
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
||||||
expectedFilter: "blob eq '*' and tier eq '*'",
|
expectedFilter: "blob eq '*' and tier eq '*'",
|
||||||
|
expectedPortalURL: ptr.String("http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22grouping%22%3A%7B%22dimension%22%3A%22blob%22%2C%22sort%22%3A2%2C%22top%22%3A10%7D%2C%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "legacy query without resourceURI and has a dimension filter without specifying a top",
|
name: "legacy query without resourceURI and has a dimension filter without specifying a top",
|
||||||
@ -149,6 +152,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
expectedInterval: "PT1M",
|
expectedInterval: "PT1M",
|
||||||
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
||||||
expectedFilter: "blob ne 'test'",
|
expectedFilter: "blob ne 'test'",
|
||||||
|
expectedPortalURL: ptr.String("http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22filterCollection%22%3A%7B%22filters%22%3A%5B%7B%22key%22%3A%22blob%22%2C%22operator%22%3A1%2C%22values%22%3A%5B%22test%22%5D%7D%5D%7D%2C%22grouping%22%3A%7B%22dimension%22%3A%22blob%22%2C%22sort%22%3A2%2C%22top%22%3A10%7D%2C%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "has dimensionFilter*s* property with startsWith operator",
|
name: "has dimensionFilter*s* property with startsWith operator",
|
||||||
@ -161,6 +165,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
expectedInterval: "PT1M",
|
expectedInterval: "PT1M",
|
||||||
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
||||||
expectedFilter: "blob sw 'test'",
|
expectedFilter: "blob sw 'test'",
|
||||||
|
expectedPortalURL: ptr.String("http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22filterCollection%22%3A%7B%22filters%22%3A%5B%7B%22key%22%3A%22blob%22%2C%22operator%22%3A3%2C%22values%22%3A%5B%22test%22%5D%7D%5D%7D%2C%22grouping%22%3A%7B%22dimension%22%3A%22blob%22%2C%22sort%22%3A2%2C%22top%22%3A10%7D%2C%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "correctly sets dimension operator to eq (irrespective of operator) when filter value is '*'",
|
name: "correctly sets dimension operator to eq (irrespective of operator) when filter value is '*'",
|
||||||
@ -173,6 +178,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
expectedInterval: "PT1M",
|
expectedInterval: "PT1M",
|
||||||
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
||||||
expectedFilter: "blob eq '*' and tier eq '*'",
|
expectedFilter: "blob eq '*' and tier eq '*'",
|
||||||
|
expectedPortalURL: ptr.String("http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22grouping%22%3A%7B%22dimension%22%3A%22blob%22%2C%22sort%22%3A2%2C%22top%22%3A10%7D%2C%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "correctly constructs target when multiple filter values are provided for the 'eq' operator",
|
name: "correctly constructs target when multiple filter values are provided for the 'eq' operator",
|
||||||
@ -185,6 +191,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
expectedInterval: "PT1M",
|
expectedInterval: "PT1M",
|
||||||
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
||||||
expectedFilter: "blob eq 'test' or blob eq 'test2'",
|
expectedFilter: "blob eq 'test' or blob eq 'test2'",
|
||||||
|
expectedPortalURL: ptr.String("http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22filterCollection%22%3A%7B%22filters%22%3A%5B%7B%22key%22%3A%22blob%22%2C%22operator%22%3A0%2C%22values%22%3A%5B%22test%22%2C%22test2%22%5D%7D%5D%7D%2C%22grouping%22%3A%7B%22dimension%22%3A%22blob%22%2C%22sort%22%3A2%2C%22top%22%3A10%7D%2C%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "correctly constructs target when multiple filter values are provided for ne 'eq' operator",
|
name: "correctly constructs target when multiple filter values are provided for ne 'eq' operator",
|
||||||
@ -197,6 +204,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
expectedInterval: "PT1M",
|
expectedInterval: "PT1M",
|
||||||
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
||||||
expectedFilter: "blob ne 'test' and blob ne 'test2'",
|
expectedFilter: "blob ne 'test' and blob ne 'test2'",
|
||||||
|
expectedPortalURL: ptr.String("http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22filterCollection%22%3A%7B%22filters%22%3A%5B%7B%22key%22%3A%22blob%22%2C%22operator%22%3A1%2C%22values%22%3A%5B%22test%22%2C%22test2%22%5D%7D%5D%7D%2C%22grouping%22%3A%7B%22dimension%22%3A%22blob%22%2C%22sort%22%3A2%2C%22top%22%3A10%7D%2C%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Includes a region",
|
name: "Includes a region",
|
||||||
@ -245,6 +253,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
expectedInterval: "PT1M",
|
expectedInterval: "PT1M",
|
||||||
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
azureMonitorQueryTarget: "aggregation=Average&api-version=2021-05-01&interval=PT1M&metricnames=Percentage+CPU&metricnamespace=Microsoft.Compute%2FvirtualMachines×pan=2018-03-15T13%3A00%3A00Z%2F2018-03-15T13%3A34%3A00Z&top=30",
|
||||||
expectedFilter: "(Microsoft.ResourceId eq '/subscriptions/12345678-aaaa-bbbb-cccc-123456789abc/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/vm') and (blob ne 'test' and blob ne 'test2')",
|
expectedFilter: "(Microsoft.ResourceId eq '/subscriptions/12345678-aaaa-bbbb-cccc-123456789abc/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/vm') and (blob ne 'test' and blob ne 'test2')",
|
||||||
|
expectedPortalURL: ptr.String("http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22filterCollection%22%3A%7B%22filters%22%3A%5B%7B%22key%22%3A%22blob%22%2C%22operator%22%3A1%2C%22values%22%3A%5B%22test%22%2C%22test2%22%5D%7D%5D%7D%2C%22grouping%22%3A%7B%22dimension%22%3A%22blob%22%2C%22sort%22%3A2%2C%22top%22%3A10%7D%2C%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,6 +302,7 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
To: fromStart.Add(34 * time.Minute),
|
To: fromStart.Add(34 * time.Minute),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if tt.azureMonitorVariedProperties["region"] != nil {
|
if tt.azureMonitorVariedProperties["region"] != nil {
|
||||||
// If the region is included, the filter will be added in the Body of the request
|
// If the region is included, the filter will be added in the Body of the request
|
||||||
azureMonitorQuery.BodyFilter = tt.expectedFilter
|
azureMonitorQuery.BodyFilter = tt.expectedFilter
|
||||||
@ -308,17 +318,21 @@ func TestAzureMonitorBuildQueries(t *testing.T) {
|
|||||||
azureMonitorQuery.URL = "/subscriptions/12345678-aaaa-bbbb-cccc-123456789abc/resourceGroups/grafanastaging/providers/Microsoft.Compute/virtualMachines/grafana/providers/microsoft.insights/metrics"
|
azureMonitorQuery.URL = "/subscriptions/12345678-aaaa-bbbb-cccc-123456789abc/resourceGroups/grafanastaging/providers/Microsoft.Compute/virtualMachines/grafana/providers/microsoft.insights/metrics"
|
||||||
}
|
}
|
||||||
|
|
||||||
if diff := cmp.Diff(azureMonitorQuery, queries[0], cmpopts.IgnoreUnexported(simplejson.Json{}), cmpopts.IgnoreFields(types.AzureMonitorQuery{}, "Params")); diff != "" {
|
if diff := cmp.Diff(azureMonitorQuery, queries[0], cmpopts.IgnoreUnexported(simplejson.Json{}), cmpopts.IgnoreFields(types.AzureMonitorQuery{}, "Params", "Dimensions")); diff != "" {
|
||||||
t.Errorf("Result mismatch (-want +got):\n%s", diff)
|
t.Errorf("Result mismatch (-want +got):\n%s", diff)
|
||||||
}
|
}
|
||||||
|
|
||||||
expected := `http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/` +
|
expectedPortalURL := `http://ds/#blade/Microsoft_Azure_MonitoringMetrics/Metrics.ReactView/Referer/MetricsExplorer/` +
|
||||||
`TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/` +
|
`TimeContext/%7B%22absolute%22%3A%7B%22startTime%22%3A%222018-03-15T13%3A00%3A00Z%22%2C%22endTime%22%3A%222018-03-15T13%3A34%3A00Z%22%7D%7D/` +
|
||||||
`ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C` +
|
`ChartDefinition/%7B%22v2charts%22%3A%5B%7B%22metrics%22%3A%5B%7B%22resourceMetadata%22%3A%7B%22id%22%3A%22%2Fsubscriptions%2F12345678-aaaa-bbbb-cccc-123456789abc%2FresourceGroups%2Fgrafanastaging%2Fproviders%2FMicrosoft.Compute%2FvirtualMachines%2Fgrafana%22%7D%2C` +
|
||||||
`%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D`
|
`%22name%22%3A%22Percentage%20CPU%22%2C%22aggregationType%22%3A4%2C%22namespace%22%3A%22Microsoft.Compute%2FvirtualMachines%22%2C%22metricVisualization%22%3A%7B%22displayName%22%3A%22Percentage%20CPU%22%2C%22resourceDisplayName%22%3A%22grafana%22%7D%7D%5D%7D%5D%7D`
|
||||||
|
if tt.expectedPortalURL != nil {
|
||||||
|
expectedPortalURL = *tt.expectedPortalURL
|
||||||
|
}
|
||||||
|
|
||||||
actual, err := getQueryUrl(queries[0], "http://ds", "/subscriptions/12345678-aaaa-bbbb-cccc-123456789abc/resourceGroups/grafanastaging/providers/Microsoft.Compute/virtualMachines/grafana", "grafana")
|
actual, err := getQueryUrl(queries[0], "http://ds", "/subscriptions/12345678-aaaa-bbbb-cccc-123456789abc/resourceGroups/grafanastaging/providers/Microsoft.Compute/virtualMachines/grafana", "grafana")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, expected, actual)
|
require.Equal(t, expectedPortalURL, actual)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,7 @@ type AzureMonitorQuery struct {
|
|||||||
Alias string
|
Alias string
|
||||||
TimeRange backend.TimeRange
|
TimeRange backend.TimeRange
|
||||||
BodyFilter string
|
BodyFilter string
|
||||||
|
Dimensions []AzureMonitorDimensionFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
// AzureMonitorResponse is the json response from the Azure Monitor API
|
// AzureMonitorResponse is the json response from the Azure Monitor API
|
||||||
@ -158,6 +159,12 @@ type AzureMonitorDimensionFilter struct {
|
|||||||
Filter *string `json:"filter,omitempty"`
|
Filter *string `json:"filter,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AzureMonitorDimensionFilterBackend struct {
|
||||||
|
Key string `json:"key"`
|
||||||
|
Operator int `json:"operator"`
|
||||||
|
Values []string `json:"values"`
|
||||||
|
}
|
||||||
|
|
||||||
func (a AzureMonitorDimensionFilter) ConstructFiltersString() string {
|
func (a AzureMonitorDimensionFilter) ConstructFiltersString() string {
|
||||||
var filterStrings []string
|
var filterStrings []string
|
||||||
for _, filter := range a.Filters {
|
for _, filter := range a.Filters {
|
||||||
|
Loading…
Reference in New Issue
Block a user