lib/azure/armrest/insights/metrics_service.rb
module Azure
module Armrest
module Insights
class MetricsService < ArmrestService
# Creates and returns a new MetricsService object.
#
def initialize(armrest_configuration, options = {})
super(armrest_configuration, 'metrics', 'Microsoft.Insights', options)
end
# Return the metric definitions for the given +provider+, +resource_type+,
# and +resource_name+ for +resource_group+. You may pass a :filter option as well.
#
# NOTE: This uses the older REST API. If you want the newer API, use the
# list_definitions method below.
#
# Example:
#
# metrics = Azure::Armrest::Insights::MetricsService.new(conf)
#
# metrics.list('Microsoft.SQL', 'servers', 'myServer/databases/myDB', 'mygroup')
# metrics.list('Microsoft.Compute', 'virtualMachines', 'myVm', 'mygroup')
#
def list(provider, resource_type, resource_name, resource_group = nil, options = {})
resource_group ||= configuration.resource_group
raise ArgumentError, "no resource group provided" unless resource_group
url = build_url(provider, resource_type, resource_name, resource_group, options)
response = rest_get(url)
Azure::Armrest::ArmrestCollection.create_from_response(
response,
Azure::Armrest::Insights::MetricDefinition
)
end
# Returns a list metrics for +resource_id+, which can be either a
# resource object or a plain resource string. You may also provide
# hash of filtering +options+ to limit the results. The possible
# options are:
#
# * :timespan => The timespan of the query in "start/end" format.
# * :interval => The interval (timegrain) of the query.
# * :metricnames => A comma separated list of metrics to retrieve.
# * :aggregation => A comma separated list of aggregration types to retrieve.
# * :segment => The name of the dimension to segment the metric values by.
# * :top => The maximum number of records to retrieve. Defaults to 10.
# * :orderby => The aggregation to use for sorting.
# * :filter => An expression used to filter the results.
# * :resultType => Reduces the set of data collected. Syntax is dependent on operation.
# * :metricnamespace => Metric namespace to query metric definitions for.
#
# If no filter expression is defined, the first metric defined
# for that resource will be returned using the primary aggregation
# type in the metric defintion over a time period of the last hour.
#
# vms = Azure::Armrest::VirtualMachineService.new(conf)
# mts = Azure::Armrest::Insights::MetricService.new(conf)
#
# vm = vms.get('your_vm', 'your_resource_group')
#
# options = {
# :metricnames => "'Percentage CPU'"
# :timespan => "2020-02-13T02:20:00Z/2020-02-14T04:20:00Z"
# :aggregation => "Average",
# :interval => "PT1M"
# }
#
# definitions = mts.list_metrics(vm.id, options)
#
def list_metrics(resource, options = {})
resource_id = resource.respond_to?(:id) ? resource.id : resource
options[:filter] = options if options.is_a?(String) # For backwards compatibility
url = File.join(
configuration.environment.resource_url,
resource_id,
'providers/microsoft.insights/metrics'
)
url << "?api-version=#{api_version}"
# The :filter option requires a leading '$'
options.each do |key, value|
key.to_s == 'filter' ? url << "&$" : url << "&"
url << "#{key}=#{value}"
end
response = rest_get(url)
Azure::Armrest::ArmrestCollection.create_from_response(response, Azure::Armrest::Insights::Metric)
end
# Get a list of metrics definitions for +resource_id+, which can be
# either a resource object or a plain resource string. You may also
# provide a +filter+ to limit the results.
#
# Note that the output for this method is different than the list
# method, which uses an older api-version.
#
# Example:
#
# vms = Azure::Armrest::VirtualMachineService.new(conf)
# mts = Azure::Armrest::Insights::MetricService.new(conf)
#
# vm = vms.get('your_vm', 'your_resource_group')
#
# # With or without filter
# definitions = mts.list_definitions(vm.id)
# definitions = mts.list_definitions(vm.id, "name.value eq 'Percentage CPU'")
#
def list_definitions(resource, filter = nil)
resource_id = resource.respond_to?(:id) ? resource.id : resource
version = configuration.provider_default_api_version(provider, 'metricDefinitions')
url = File.join(
configuration.environment.resource_url,
resource_id,
'providers/microsoft.insights/metricdefinitions'
)
url << "?api-version=#{version}"
url << "&$filter=#{filter}" if filter
response = rest_get(url)
Azure::Armrest::ArmrestCollection.create_from_response(
response,
Azure::Armrest::Insights::MetricDefinition
)
end
private
# Build a URL for the older version of the metrics definitions API.
#
def build_url(provider, resource_type, resource_name, resource_group, options)
url = File.join(
base_url,
'resourceGroups',
resource_group,
'providers',
provider,
resource_type,
resource_name,
'metricDefinitions'
)
url << "?api-version=2014-04-01"
url << "&$filter=#{options[:filter]}" if options[:filter]
url
end
end # MetricsService
end # Insights
end # Armrest
end # Azure