enh(mode): Azure getmetrics dimension filter (#2031)

This commit is contained in:
Thibault S 2020-06-03 22:39:16 +02:00 committed by GitHub
parent db9abbae05
commit 2deab981ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 31 deletions

View File

@ -295,6 +295,7 @@ sub azure_get_metrics_set_url {
"/" . $options{resource} . "/providers/microsoft.insights/metrics?api-version=" . $self->{api_version} .
"&metricnames=" . $encoded_metrics . "&aggregation=" . $encoded_aggregations .
"&timespan=" . $encoded_timespan . "&interval=" . $options{interval};
$url .= "&\$filter=" . $options{dimension} if defined($options{dimension});
return $url;
}

View File

@ -173,6 +173,7 @@ sub azure_get_metrics_set_cmd {
"--interval $options{interval} --aggregation '" . join('\' \'', @{$options{aggregations}}) . "' --only-show-errors --output json --resource '$options{resource}' " .
"--resource-group '$options{resource_group}' --resource-type '$options{resource_type}' --resource-namespace '$options{resource_namespace}'";
$cmd_options .= " --subscription '$self->{subscription}'" if (defined($self->{subscription}) && $self->{subscription} ne '');
$cmd_options .= " --filter '$options{dimension}'" if defined($options{dimension});
return $cmd_options;
}

View File

@ -99,6 +99,7 @@ sub new {
"resource-type:s" => { name => 'resource_type' },
"resource-namespace:s" => { name => 'resource_namespace' },
"metric:s@" => { name => 'metric' },
"filter-dimension:s" => { name => 'filter_dimension'}
});
return $self;
@ -146,20 +147,25 @@ sub check_options {
}
}
}
if (defined($self->{option_results}->{filter_dimension}) && $self->{option_results}->{filter_dimension} ne '') {
$self->{az_metrics_dimension} = $self->{option_results}->{filter_dimension};
}
}
sub manage_selection {
my ($self, %options) = @_;
my ($results, $raw_results) = $options{custom}->azure_get_metrics(
resource => $self->{az_resource},
resource_group => $self->{az_resource_group},
resource_type => $self->{az_resource_type},
resource_namespace => $self->{az_resource_namespace},
metrics => $self->{az_metrics},
aggregations => $self->{az_aggregation},
timeframe => $self->{az_timeframe},
interval => $self->{az_interval},
resource => $self->{az_resource},
resource_group => $self->{az_resource_group},
resource_type => $self->{az_resource_type},
resource_namespace => $self->{az_resource_namespace},
metrics => $self->{az_metrics},
aggregations => $self->{az_aggregation},
timeframe => $self->{az_timeframe},
interval => $self->{az_interval},
dimension => $self->{az_metrics_dimension}
);
$self->{metrics} = {};
@ -177,6 +183,10 @@ sub manage_selection {
};
}
}
if (scalar(keys %{$self->{metrics}}) <= 0) {
$self->{output}->add_option_msg(short_msg => "No metric found (Are the filters properly set?)");
$self->{output}->option_exit();
}
$self->{output}->output_add(long_msg => sprintf("Raw data:\n%s", Dumper($raw_results)), debug => 1);
}
@ -220,6 +230,12 @@ Set resource type (Required if resource's name is used).
Set monitor metrics (Required) (Can be multiple).
=item B<--filter-dimension>
Specify the metric dimension (required for some specific metrics)
Syntax example:
--filter-dimension="$metricname eq '$metricvalue'"
=item B<--warning-metric>
Threshold warning.