Example #1
0
        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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
        }