private static string GetAggregation(MetricQueryOptions options)
 {
     if (options?.Aggregations == null ||
         options.Aggregations.Count == 0)
     {
         return(null);
     }
     return(string.Join(",", options.Aggregations));
 }
 /// <summary>
 /// Queries metrics for a resource.
 /// </summary>
 /// <param name="resource">The resource name.
 /// For example: <c>/subscriptions/[subscription_id]/resourceGroups/[resource_group_name]/providers/Microsoft.OperationalInsights/workspaces/[workspace_name]</c>.</param>
 /// <param name="metrics">The list of metrics to query.</param>
 /// <param name="options">The additional request options.</param>
 /// <param name="cancellationToken">The <see cref="CancellationToken"/> to use.</param>
 /// <returns>The <see cref="MetricQueryResult"/> instance containing the query results.</returns>
 public virtual Response <MetricQueryResult> Query(string resource, IEnumerable <string> metrics, MetricQueryOptions options = null, CancellationToken cancellationToken = default)
 {
     using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(MetricsClient)}.{nameof(Query)}");
     scope.Start();
     try
     {
         return(_metricsRestClient.List(resource,
                                        timespan: options?.TimeSpan?.ToString(),
                                        interval: options?.Interval,
                                        filter: options?.Filter,
                                        top: options?.Top,
                                        aggregation: GetAggregation(options),
                                        metricnames: string.Join(",", metrics),
                                        orderby: options?.OrderBy,
                                        metricnamespace: options?.MetricNamespace,
                                        cancellationToken: cancellationToken));
     }
     catch (Exception e)
     {
         scope.Failed(e);
         throw;
     }
 }