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); } }
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(); } } }
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; } }