Exemplo n.º 1
0
        public override void Process(string meterName, string metricName, LabelSet labelSet, Aggregator <double> aggregator)
        {
            var metric = new ProcessedMetric <double>(meterName, metricName, meterName + metricName, labelSet.Labels, aggregator.GetAggregationType());

            metric.Data = aggregator.ToMetricData();
            var metricKey = new MetricKey(metricName, labelSet.Labels);

            if (this.DoubleMetrics.ContainsKey(metricKey))
            {
                var previousMetric = DoubleMetrics[metricKey];
                switch (previousMetric.AggregationType)
                {
                case AggregationType.LongSum:
                    DoubleMetrics[metricKey] = UpdateSum(metric, previousMetric);
                    break;

                case AggregationType.Summary:
                    DoubleMetrics[metricKey] = UpdateSummary(metric, previousMetric);
                    break;
                }
            }
            else
            {
                DoubleMetrics.Add(metricKey, metric);
            }
        }
Exemplo n.º 2
0
 public void AddMetric(ICounterPayload metric)
 {
     lock (_allMetrics)
     {
         var metricKey = new MetricKey(metric);
         if (!_allMetrics.TryGetValue(metricKey, out Queue <ICounterPayload> metrics))
         {
             metrics = new Queue <ICounterPayload>();
             _allMetrics.Add(metricKey, metrics);
         }
         metrics.Enqueue(metric);
         if (metrics.Count > _maxMetricCount)
         {
             metrics.Dequeue();
         }
     }
 }
Exemplo n.º 3
0
 public void PublishCounters(string id, string category, CounterTypeEnum counterType, IDictionary <string, MetricValue> counters)
 {
     foreach (var counter in counters)
     {
         var key = new MetricKey {
             Id = id, Category = category, Name = counter.Key
         };
         Metrics.AddOrUpdate(key,
                             addValueFactory: (k, val) => val,
                             updateValueFactory: (k, old, val) =>
         {
             var newVal = counterType == CounterTypeEnum.CurrentValue
                     ? val.Value
                     : old.Value + val.Value;
             return(new MetricValue(newVal, old.Unit));
         },
                             factoryArgument: counter.Value);
         Metrics[key] = counter.Value;
     }
 }