public void WhenConvertingToSmartDetectorsMetricQueryResultThenItWasConvertedCorrectly() { var timestamp = DateTime.UtcNow; var responseInner = new ResponseInner("timespan", GetMetricList(timestamp)); List <MetricQueryResult> metrics = responseInner.ToMetricQueryResult().ToList(); // Validate first metric was converted successfully Assert.AreEqual("MetricName1", metrics[0].Name, "First metric name isn't correct"); Assert.AreEqual("ByteSeconds", metrics[0].Unit, "First metric unit isn't correct"); Assert.AreEqual(0, metrics[0].Timeseries.Count, "First metric timeseries should be empty"); // Validate second metric was converted successfully Assert.AreEqual("MetricName2", metrics[1].Name, "Second metric name isn't correct"); Assert.AreEqual("MilliSeconds", metrics[1].Unit, "Second metric unit isn't correct"); Assert.AreEqual(5, metrics[1].Timeseries.Count, "Second metric timeseries should be empty"); Assert.AreEqual(2, metrics[1].Timeseries[0].Data.Count, "Second metric first timeseries (Dimension1Value1) length should be 2"); Assert.AreEqual(2, metrics[1].Timeseries[1].Data.Count, "Second metric second timeseries (Dimension1Value2) length should be 2"); Assert.AreEqual(1.1, metrics[1].Timeseries[0].Data[0].Average, "Second metric first timeseries first average is wrong"); Assert.AreEqual(1.0, metrics[1].Timeseries[0].Data[1].Average, "Second metric first timeseries second average is wrong"); Assert.AreEqual(timestamp.AddMinutes(-1), metrics[1].Timeseries[0].Data[0].TimeStamp, "Second metric first timeseries first timestamp is wrong"); Assert.IsNull(metrics[1].Timeseries[0].Data[0].Total, "Second metric first timeseries first total should be null"); Assert.IsNull(metrics[1].Timeseries[0].Data[0].Maximum, "Second metric first timeseries first maximum should be null"); Assert.IsNull(metrics[1].Timeseries[0].Data[0].Minimum, "Second metric first timeseries first minimum should be null"); Assert.IsNull(metrics[1].Timeseries[0].Data[0].Count, "Second metric first timeseries first count should be null"); Assert.AreEqual(2.1, metrics[1].Timeseries[1].Data[0].Minimum, "Second metric second timeseries first minimum is wrong"); Assert.AreEqual(3.1, metrics[1].Timeseries[2].Data[0].Maximum, "Second metric third timeseries first maximum is wrong"); Assert.AreEqual(4.1, metrics[1].Timeseries[3].Data[0].Total, "Second metric forth timeseries first total is wrong"); Assert.AreEqual(1, metrics[1].Timeseries[4].Data[0].Count, "Second metric fifth timeseries first count is wrong"); Assert.AreEqual(1, metrics[1].Timeseries[0].MetaData.Count, "Second metric first timeseries metadata length is wrong"); Assert.AreEqual("Dimension1", metrics[1].Timeseries[0].MetaData[0].Key, "Second metric first timeseries first metadata key is wrong"); Assert.AreEqual("Dimension1Value1", metrics[1].Timeseries[0].MetaData[0].Value, "Second metric first timeseries first metadata value is wrong"); }
public async Task <IEnumerable <MetricQueryResult> > GetResourceMetricsAsync(string resourceUri, QueryParameters queryParameters, CancellationToken cancellationToken = default(CancellationToken)) { this.tracer.TraceInformation($"Running GetResourceMetrics with an instance of {this.GetType().Name}, with params: {queryParameters}"); ResponseInner metrics = await this.retryPolicy.RunAndTrackDependencyAsync( this.tracer, DependencyName, "GetResourceMetrics", () => this.monitorManagementClient.Metrics.ListAsync( resourceUri: resourceUri, timespan: queryParameters.TimeRange, interval: queryParameters.Interval, metricnames: queryParameters.MetricNames == null ? string.Empty : string.Join(",", queryParameters.MetricNames), metricnamespace: queryParameters.MetricNamespace, aggregation: queryParameters.Aggregations != null ? string.Join(",", queryParameters.Aggregations) : null, top: queryParameters.Top, orderby: queryParameters.Orderby, odataQuery: queryParameters.Filter, resultType: null, cancellationToken: cancellationToken)); this.tracer.TraceInformation($"Running GetResourceMetrics completed. Total Metrics: {metrics.Value.Count}."); IList <MetricQueryResult> result = metrics.ToMetricQueryResult(); return(result); }
/// <summary> /// Converts an MDM query response to an internal DTO and returns it /// </summary> /// <param name="mdmQueryResponse">The MDM query response as returned by Azure Monitoring</param> /// <returns>A list of MDM query results</returns> private IList <MdmQueryResult> ConvertMdmResponseToQueryResult(ResponseInner mdmQueryResponse) { var mdmQueryResults = new List <MdmQueryResult>(); // Convert each metric (a single metric is created per metric name) foreach (Metric metric in mdmQueryResponse.Value) { List <MetricTimeSeries> timeSeriesList = new List <MetricTimeSeries>(); if (metric.Timeseries != null) { // Convert the time series. A time series is created per filtered dimension. // The info regarding the relevant dimension is set int he MetaData field foreach (TimeSeriesElement timeSeries in metric.Timeseries) { var data = new List <MetricValues>(); var metaData = new List <KeyValuePair <string, string> >(); if (timeSeries.Data != null) { // Convert all metric values data = timeSeries.Data.Select(metricValue => new MetricValues(metricValue.TimeStamp, metricValue.Average, metricValue.Minimum, metricValue.Maximum, metricValue.Total, metricValue.Count)).ToList(); } if (timeSeries.Metadatavalues != null) { // Convert metadata metaData = timeSeries.Metadatavalues.Select(metaDataValue => new KeyValuePair <string, string>(metaDataValue.Name.Value, metaDataValue.Value)).ToList(); } timeSeriesList.Add(new MetricTimeSeries(data, metaData)); } } var mdmQueryResult = new MdmQueryResult(metric.Name.Value, metric.Unit.ToString(), timeSeriesList); mdmQueryResults.Add(mdmQueryResult); this.tracer.TraceInformation($"Metric converted successully. Name: {mdmQueryResult.Name}, Timeseries count: {mdmQueryResult.Timeseries.Count}, Total series length: {mdmQueryResult.Timeseries.Sum(timeSeries => timeSeries.Data.Count)}"); } return(mdmQueryResults); }
/// <summary> /// Converts a <see cref="ResponseInner"/> to a list of <see cref="MetricQueryResult"/> and returns it /// </summary> /// <param name="queryResponse">The metric query response as returned by Azure Monitoring</param> /// <returns>A list of metric query results</returns> public static IList <MetricQueryResult> ToMetricQueryResult(this ResponseInner queryResponse) { var queryResults = new List <MetricQueryResult>(); // Convert each metric (a single metric is created per metric name) foreach (Metric metric in queryResponse.Value) { List <MetricTimeSeries> timeSeriesList = new List <MetricTimeSeries>(); if (metric.Timeseries != null) { // Convert the time series. A time series is created per filtered dimension. // The info regarding the relevant dimension is set int he MetaData field foreach (TimeSeriesElement timeSeries in metric.Timeseries) { var data = new List <MetricValues>(); var metaData = new List <KeyValuePair <string, string> >(); if (timeSeries.Data != null) { // Convert all metric values data = timeSeries.Data.Select(metricValue => new MetricValues(metricValue.TimeStamp, metricValue.Average, metricValue.Minimum, metricValue.Maximum, metricValue.Total, metricValue.Count)).ToList(); } if (timeSeries.Metadatavalues != null) { // Convert metadata metaData = timeSeries.Metadatavalues.Select(metaDataValue => new KeyValuePair <string, string>(metaDataValue.Name.Value, metaDataValue.Value)).ToList(); } timeSeriesList.Add(new MetricTimeSeries(data, metaData)); } } var queryResult = new MetricQueryResult(metric.Name.Value, metric.Unit.ToString(), timeSeriesList); queryResults.Add(queryResult); } return(queryResults); }