enh(plugin) add metricnamespace option to Azure Monitor get-metric mode (#2675)

* Added metricnamespace as parameter to the Azure Metrics script

* Adjusted azcli.pm + added count as aggregation
This commit is contained in:
petneli 2021-03-30 08:28:11 +02:00 committed by GitHub
parent 005dd5e042
commit e6535f8cc3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 7 deletions

View File

@ -279,6 +279,7 @@ sub azure_get_metrics_set_url {
"&metricnames=" . $encoded_metrics . "&aggregation=" . $encoded_aggregations .
"&timespan=" . $encoded_timespan . "&interval=" . $options{interval};
$url .= "&\$filter=" . $options{dimension} if defined($options{dimension});
$url .= "&metricnamespace=" . $uri->encode($options{metric_namespace}) if defined($options{metric_namespace});
return $url;
}
@ -318,6 +319,9 @@ sub azure_get_metrics {
$results->{$metric_name}->{total} += $point->{total};
$results->{$metric_name}->{points}++;
}
if (defined($point->{count})) {
$results->{$metric_name}->{count} = $point->{count};
}
}
}
@ -719,7 +723,7 @@ Set interval of the metric query (Can be : PT1M, PT5M, PT15M, PT30M, PT1H, PT6H,
=item B<--aggregation>
Set monitor aggregation (Can be multiple, Can be: 'minimum', 'maximum', 'average', 'total').
Set monitor aggregation (Can be multiple, Can be: 'minimum', 'maximum', 'average', 'total', 'count').
=item B<--zeroed>

View File

@ -82,7 +82,7 @@ sub check_options {
if (defined($self->{option_results}->{aggregation})) {
foreach my $aggregation (@{$self->{option_results}->{aggregation}}) {
if ($aggregation !~ /average|maximum|minimum|total/i) {
if ($aggregation !~ /average|maximum|minimum|total|count/i) {
$self->{output}->add_option_msg(short_msg => "Aggregation '" . $aggregation . "' is not handled");
$self->{output}->option_exit();
}
@ -154,7 +154,7 @@ sub azure_get_metrics_set_cmd {
return if (defined($self->{option_results}->{command_options}) && $self->{option_results}->{command_options} ne '');
my $cmd_options = "monitor metrics list --metrics '" . join('\' \'', @{$options{metrics}}) . "' --start-time $options{start_time} --end-time $options{end_time} " .
my $cmd_options = "monitor metrics list --metrics '" . join('\' \'', @{$options{metrics}}) . "' --namespace $options{metric_namespace} --start-time $options{start_time} --end-time $options{end_time} " .
"--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 '');
@ -198,6 +198,9 @@ sub azure_get_metrics {
$results->{$metric_name}->{total} += $point->{total};
$results->{$metric_name}->{points}++;
}
if (defined($point->{count})) {
$results->{$metric_name}->{count} = $point->{count};
}
}
}
@ -237,7 +240,7 @@ sub azure_list_resources_set_cmd {
return if (defined($self->{option_results}->{command_options}) && $self->{option_results}->{command_options} ne '');
my $cmd_options = "resource list --only-show-errors --output json";
$cmd_options .= " --namespace '$options{namespace}'" if (defined($options{namespace}) && $options{namespace} ne '');
$cmd_options .= " --namespace '$options{resource_namespace}'" if (defined($options{resource_namespace}) && $options{resource_namespace} ne '');
$cmd_options .= " --resource-type '$options{resource_type}'" if (defined($options{resource_type}) && $options{resource_type} ne '');
$cmd_options .= " --location '$options{location}'" if (defined($options{location}) && $options{location} ne '');
$cmd_options .= " --resource-group '$options{resource_group}'" if (defined($options{resource_group}) && $options{resource_group} ne '');
@ -601,7 +604,7 @@ Set interval of the metric query (Can be : PT1M, PT5M, PT15M, PT30M, PT1H, PT6H,
=item B<--aggregation>
Set monitor aggregation (Can be multiple, Can be: 'minimum', 'maximum', 'average', 'total').
Set monitor aggregation (Can be multiple, Can be: 'minimum', 'maximum', 'average', 'total', 'count').
=item B<--zeroed>

View File

@ -99,7 +99,8 @@ sub new {
"resource-type:s" => { name => 'resource_type' },
"resource-namespace:s" => { name => 'resource_namespace' },
"metric:s@" => { name => 'metric' },
"filter-dimension:s" => { name => 'filter_dimension'}
"filter-dimension:s" => { name => 'filter_dimension' },
"metric-namespace:s" => { name => 'metric_namespace' }
});
return $self;
@ -151,6 +152,9 @@ 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};
}
if (defined($self->{option_results}->{metric_namespace}) && $self->{option_results}->{metric_namespace} ne '') {
$self->{az_metric_namespace} = $self->{option_results}->{metric_namespace};
}
}
sub manage_selection {
@ -163,6 +167,7 @@ sub manage_selection {
resource_namespace => $self->{az_resource_namespace},
metrics => $self->{az_metrics},
aggregations => $self->{az_aggregation},
metric_namespace => $self->{az_metric_namespace},
timeframe => $self->{az_timeframe},
interval => $self->{az_interval},
dimension => $self->{az_metrics_dimension}
@ -170,7 +175,7 @@ sub manage_selection {
$self->{metrics} = {};
foreach my $label (keys %{$results}) {
foreach my $aggregation (('minimum', 'maximum', 'average', 'total')) {
foreach my $aggregation (('minimum', 'maximum', 'average', 'total', 'count')) {
next if (!defined($results->{$label}->{$aggregation}));
$self->{metrics}->{$label . '_' . $aggregation} = {
@ -230,6 +235,10 @@ Set resource type (Required if resource's name is used).
Set monitor metrics (Required) (Can be multiple).
=item B<--metric-namespace>
Set monitor metric namespace.
=item B<--filter-dimension>
Specify the metric dimension (required for some specific metrics)