public MetricValueCollectionWrapper Convert(string info)
        {
            var collection = new MetricValueCollectionWrapper();
            var queues     = JArray.Parse(info);

            foreach (var q in queues)
            {
                var qName = q.Value <string>("name");

                for (var i = 0; i < PathsWithDetailRate.Length; i++)
                {
                    var pathValue = PathsWithDetailRate[i];
                    collection.Add(q.ValueFromPath <float?>($"{pathValue}"), StatsDimensionTranslations[i], qName);
                    collection.Add(q.ValueFromPath <float?>($"{pathValue}{DetailsRateSuffix}"), StatsDimensionRateTranslations[i], qName);
                }

                for (var i = 0; i < Paths.Length; i++)
                {
                    var pathValue = Paths[i];
                    collection.Add(q.ValueFromPath <float?>($"{pathValue}"), PathsDimensionTranslations[i], qName);
                }

                for (var i = 0; i < Calculations.Length; i++)
                {
                    Calculations[i](q, collection, qName);
                }
            }

            return(collection);
        }
Ejemplo n.º 2
0
        public Task PublishAsync(MetricValueCollectionWrapper collector)
        {
            var values = collector.Values;

            if (values.Count <= 0)
            {
                return(Task.CompletedTask);
            }

            var numberOfDimensions = values[0].Dimensions.Length;

            var types = new Type[1 + numberOfDimensions];

            types[0] = typeof(double);
            for (var i = 0; i < numberOfDimensions; i++)
            {
                types[i + 1] = typeof(string);
            }

            var method     = this.metric.GetType().GetMethod(nameof(this.metric.TrackValue), types);
            var parameters = new object[types.Length];

            foreach (var itm in collector.Values)
            {
                parameters[0] = itm.Value; // boxing
                for (var i = 0; i < numberOfDimensions; i++)
                {
                    parameters[i + 1] = itm.Dimensions[i];
                }

                method.Invoke(this.metric, parameters);
            }

            return(Task.CompletedTask);
        }
Ejemplo n.º 3
0
        public MetricValueCollectionWrapper Convert(string info)
        {
            var exchanges = JArray.Parse(info);

            var collection = new MetricValueCollectionWrapper();

            foreach (var q in exchanges)
            {
                if (q.SelectToken(MessageStats) == null)
                {
                    continue;
                }

                var exchangeName = q.Value <string>("name");
                if (string.IsNullOrEmpty(exchangeName))
                {
                    continue;
                }

                for (var i = 0; i < PathsWithDetailRate.Length; i++)
                {
                    var pathValue = PathsWithDetailRate[i];
                    collection.Add(q.ValueFromPath <float?>($"{pathValue}"), DimensionTranslations[i], exchangeName);
                    collection.Add(q.ValueFromPath <float?>($"{pathValue}{DetailsRateSuffix}"), DimensionRateTranslations[i], exchangeName);
                }
            }

            return(collection);
        }
        /// <summary>
        /// Calculates the delay of the delivery relative to the publishing of the messages and publishes
        /// that value in the passed in metric.
        /// </summary>
        /// <param name="jToken">Token to use to parse.</param>
        /// <param name="collection">The collection to store the value.</param>
        /// <param name="queueName">The queue name of the metric.</param>
        private static void CalculateDeliveryDelay(JToken jToken, MetricValueCollectionWrapper collection, string queueName)
        {
            var deliverRate = jToken.ValueFromPath <float>(MessageStats + ".deliver_get" + DetailsRateSuffix);
            var publishRate = jToken.ValueFromPath <float>(MessageStats + ".publish" + DetailsRateSuffix);

            var relativeDelay = (publishRate > 0) ? Math.Round(1 - (deliverRate / publishRate), 2) : 0;

            collection.Add((float)relativeDelay, CalculationTranslations[(int)CalculationType.DeliveryDelay], queueName);
        }
Ejemplo n.º 5
0
        public void When_Calling_TelemetryClient_With_Multiple_Dimensions_Metrics_Are_Accepted(string[] dimensions)
        {
            var metricIdentifier = CreateMetricIdentifier(dimensions);
            var tc                = new TelemetryClient(TelemetryConfiguration.CreateDefault());
            var metric            = tc.GetMetric(metricIdentifier);
            var publisher         = new TelemetryClientPublisher(metric);
            var collectionWrapper = new MetricValueCollectionWrapper();

            collectionWrapper.Add(0, dimensions);

            Assert.DoesNotThrowAsync(async() => await publisher.PublishAsync(collectionWrapper));
        }
Ejemplo n.º 6
0
        public MetricValueCollectionWrapper Convert(string info)
        {
            var collection = new MetricValueCollectionWrapper();

            var overviewInfo = JObject.Parse(info);

            for (var i = 0; i < ChurnRatesPaths.Length; i++)
            {
                var path = ChurnRatesPaths[i];
                collection.Add(overviewInfo.ValueFromPath <float?>($"{ChurnRates}.{path}"), DimensionTranslations[i]);
            }

            return(collection);
        }
Ejemplo n.º 7
0
 public Task PublishAsync(MetricValueCollectionWrapper values)
 {
     MetricsPublished?.Invoke(values);
     return(Task.CompletedTask);
 }