예제 #1
0
        private async Task <ICollection <MetricValueSet> > Fetch(FetchData data)
        {
            CloudException thrown = null;

            try {
                var values = await MetricsClientFacade.ListValuesAsync(
                    _credentials,
                    data.ResourceId,
                    data.MetricNames,
                    "",
                    data.TimeGrain,
                    data.From,
                    data.Till);

                return(values.MetricValueSetCollection.Value);
            }
            catch (CloudException e) {
                thrown = e;
            }

            if (thrown.Response.StatusCode == System.Net.HttpStatusCode.BadRequest && thrown.Message.Contains(TooManyValuesErrorMessage))
            {
                if (!data.PartitionTresholdReached())
                {
                    return(await PartitionAndFetch(data));
                }
            }

            throw thrown;
        }
예제 #2
0
        //the limit seems to be 2880 metrics per request
        async System.Threading.Tasks.Task <ICollection <MetricValueSet> > GetMetricsForResourceId(string resourceId, TimeSpan forHistory, MetricsFilter filter)
        {
            var metricsResult = await MetricsClientFacade.ListDefinitionsAsync(_credentials, resourceId, null, null);

            var metrics = filter.FilterMetrics(metricsResult.MetricDefinitionCollection.Value.Where(_ => _.MetricAvailabilities.Any()).ToList());

            if (!metrics.Any())
            {
                return(new MetricValueSet[0]);
            }

            var minTimeGrain = metrics.SelectMany(_ => _.MetricAvailabilities.Where(ma => forHistory < ma.Retention).Select(a => a.TimeGrain)).Min();

            var metricNames = metrics.Select(_ => _.Name).ToList();

            var till = DateTime.UtcNow.AddMinutes(1);
            var from = till.Add(forHistory.Negate());


            return(await Fetch(new FetchData {
                ResourceId = resourceId,
                MetricNames = metricNames,
                TimeGrain = minTimeGrain,
                From = from,
                Till = till
            }));
        }