private static void WriteMetricValue <T>( IMetricSnapshotWriter writer, string context, MetricValueSourceBase <T> valueSource, string field, object value, DateTime timestamp) { var tags = ConcatMetricTags(valueSource); if (valueSource.IsMultidimensional) { writer.Write( context, valueSource.MultidimensionalName, field, value, tags, timestamp); return; } writer.Write(context, valueSource.Name, field, value, tags, timestamp); }
public static void WriteTimer( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <TimerValue> valueSource, IDictionary <MeterFields, string> meterFields, IDictionary <HistogramFields, string> histogramFields, DateTime timestamp) { if (valueSource == null) { return; } var data = new Dictionary <string, object>(); if (meterFields.Count > 0) { valueSource.Value.Rate.AddMeterValues(data, meterFields); } if (histogramFields.Count > 0) { valueSource.Value.Histogram.AddHistogramValues(data, histogramFields); } if (data.Count > 0) { WriteMetric(writer, context, valueSource, data, timestamp); } }
private static void WriteMetricWithSetItems <T>( IMetricSnapshotWriter writer, string context, MetricValueSourceBase <T> valueSource, MetricTags setItemTags, IDictionary <string, object> itemData, string metricSetItemSuffix, DateTime timestamp) { var keys = itemData.Keys.ToList(); var values = keys.Select(k => itemData[k]); var tags = ConcatMetricTags(valueSource, setItemTags); if (valueSource.IsMultidimensional) { writer.Write( context, valueSource.MultidimensionalName + metricSetItemSuffix, keys, values, tags, timestamp); return; } writer.Write(context, valueSource.Name + metricSetItemSuffix, keys, values, tags, timestamp); }
public static void WriteMeter( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <MeterValue> valueSource, DateTime timestamp) { if (valueSource.Value.Items.Any()) { foreach (var item in valueSource.Value.Items.Distinct()) { item.AddMeterSetItemValues(out IDictionary <string, object> setItemData, writer.MetricNameMapping.Meter); WriteMetricWithSetItems( writer, context, valueSource, item.Tags, setItemData, writer.MetricNameMapping.Meter[MeterValueDataKeys.MetricSetItemSuffix], timestamp); } } valueSource.Value.AddMeterValues(out IDictionary <string, object> data, writer.MetricNameMapping.Meter); WriteMetric(writer, context, valueSource, data, timestamp); }
private static void WriteMetric <T>( IMetricSnapshotWriter writer, string context, MetricValueSourceBase <T> valueSource, IDictionary <string, object> data, DateTime timestamp) { var keys = data.Keys.ToList(); var values = keys.Select(k => data[k]); var tags = ConcatMetricTags(valueSource); if (valueSource.IsMultidimensional) { writer.Write( context, valueSource.MultidimensionalName, keys, values, tags, timestamp); return; } writer.Write(context, valueSource.Name, keys, values, tags, timestamp); }
/// <summary> /// Serializes the specified <see cref="MetricsDataValueSource" /> and writes the metrics snapshot using the specified /// <see cref="IMetricSnapshotWriter" />. /// </summary> /// <param name="writer">The <see cref="IMetricSnapshotWriter" /> used to write the metrics snapshot.</param> /// <param name="metricsData">The <see cref="MetricsDataValueSource" /> to serilize.</param> /// <param name="fields">The metric fields to write</param> public void Serialize(IMetricSnapshotWriter writer, MetricsDataValueSource metricsData, MetricFields fields) { foreach (var contextValueSource in metricsData.Contexts) { foreach (var valueSource in contextValueSource.ApdexScores) { BuildMetricPayload(contextValueSource.Context, valueSource, writer, fields, metricsData.Timestamp); } foreach (var valueSource in contextValueSource.Gauges) { BuildMetricPayload(contextValueSource.Context, valueSource, writer, fields, metricsData.Timestamp); } foreach (var valueSource in contextValueSource.Counters) { BuildMetricPayload(contextValueSource.Context, valueSource, writer, fields, metricsData.Timestamp); } foreach (var valueSource in contextValueSource.Meters) { BuildMetricPayload(contextValueSource.Context, valueSource, writer, fields, metricsData.Timestamp); } foreach (var valueSource in contextValueSource.Timers) { BuildMetricPayload(contextValueSource.Context, valueSource, writer, fields, metricsData.Timestamp); } foreach (var valueSource in contextValueSource.Histograms) { BuildMetricPayload(contextValueSource.Context, valueSource, writer, fields, metricsData.Timestamp); } } }
private static void BuildMeterPayload( string context, MetricValueSourceBase <MeterValue> valueSource, IMetricSnapshotWriter writer, DateTime timestamp) { writer.WriteMeter(context, valueSource, timestamp); }
private static void BuildHistogramPayload( string context, MetricValueSourceBase <HistogramValue> valueSource, IMetricSnapshotWriter writer, DateTime timestamp) { writer.WriteHistogram(context, valueSource, timestamp); }
private static void BuildMeterPayload( string context, MetricValueSourceBase <MeterValue> valueSource, IMetricSnapshotWriter writer, IDictionary <MeterFields, string> fields, DateTime timestamp) { writer.WriteMeter(context, valueSource as MeterValueSource, fields, timestamp); }
private static void BuildApdexPayload( string context, MetricValueSourceBase <ApdexValue> valueSource, IMetricSnapshotWriter writer, IDictionary <ApdexFields, string> fields, DateTime timestamp) { writer.WriteApdex(context, valueSource, fields, timestamp); }
private static void BuildGaugePayload( string context, MetricValueSourceBase <double> valueSource, IMetricSnapshotWriter writer, IDictionary <GaugeFields, string> fields, DateTime timestamp) { writer.WriteGauge(context, valueSource, fields, timestamp); }
private static void BuildBucketHistogramPayload( string context, MetricValueSourceBase <BucketHistogramValue> valueSource, IMetricSnapshotWriter writer, IDictionary <string, string> fields, DateTime timestamp) { writer.WriteBucketHistogram(context, valueSource, fields, timestamp); }
private static void BuildTimerPayload( string context, MetricValueSourceBase <TimerValue> valueSource, IMetricSnapshotWriter writer, IDictionary <MeterFields, string> meterFields, IDictionary <HistogramFields, string> histogramFields, DateTime timestamp) { writer.WriteTimer(context, valueSource, meterFields, histogramFields, timestamp); }
private static void BuildCounterPayload( string context, MetricValueSourceBase <CounterValue> valueSource, IMetricSnapshotWriter writer, DateTime timestamp) { var counterValueSource = valueSource as CounterValueSource; writer.WriteCounter(context, valueSource, counterValueSource, timestamp); }
public static void WriteGauge( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <double> valueSource, DateTime timestamp) { if (!double.IsNaN(valueSource.Value) && !double.IsInfinity(valueSource.Value)) { WriteMetricValue(writer, context, valueSource, valueSource.Value, timestamp); } }
private static void BuildMetricPayload <TMetric>( string context, MetricValueSourceBase <TMetric> valueSource, IMetricSnapshotWriter writer, MetricFields fields, DateTime timestamp) { if (typeof(TMetric) == typeof(double)) { BuildGaugePayload(context, valueSource as MetricValueSourceBase <double>, writer, fields.Gauge, timestamp); return; } if (typeof(TMetric) == typeof(CounterValue)) { BuildCounterPayload(context, valueSource as MetricValueSourceBase <CounterValue>, writer, fields.Counter, timestamp); return; } if (typeof(TMetric) == typeof(MeterValue)) { BuildMeterPayload(context, valueSource as MetricValueSourceBase <MeterValue>, writer, fields.Meter, timestamp); return; } if (typeof(TMetric) == typeof(TimerValue)) { BuildTimerPayload(context, valueSource as MetricValueSourceBase <TimerValue>, writer, fields.Meter, fields.Histogram, timestamp); return; } if (typeof(TMetric) == typeof(BucketTimerValue)) { BuildBucketTimerPayload(context, valueSource as MetricValueSourceBase <BucketTimerValue>, writer, fields.Histogram.ToDictionary(x => x.Key.ToString(), x => x.Value), timestamp); return; } if (typeof(TMetric) == typeof(HistogramValue)) { BuildHistogramPayload(context, valueSource as MetricValueSourceBase <HistogramValue>, writer, fields.Histogram, timestamp); return; } if (typeof(TMetric) == typeof(BucketHistogramValue)) { BuildBucketHistogramPayload(context, valueSource as MetricValueSourceBase <BucketHistogramValue>, writer, fields.BucketHistogram.ToDictionary(x => x.Key.ToString(), x => x.Value), timestamp); return; } if (typeof(TMetric) == typeof(ApdexValue)) { BuildApdexPayload(context, valueSource as MetricValueSourceBase <ApdexValue>, writer, fields.Apdex, timestamp); } }
public static void WriteTimer( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <TimerValue> valueSource, DateTime timestamp) { valueSource.Value.Rate.AddMeterValues(out IDictionary <string, object> data, writer.MetricNameMapping.Meter); valueSource.Value.Histogram.AddHistogramValues(data, writer.MetricNameMapping.Histogram); WriteMetric(writer, context, valueSource, data, timestamp); }
public static void WriteHistogram( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <HistogramValue> valueSource, DateTime timestamp) { var data = new Dictionary <string, object>(); valueSource.Value.AddHistogramValues(data, writer.MetricNameMapping.Histogram); WriteMetric(writer, context, valueSource, data, timestamp); }
public static void WriteCounter( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <CounterValue> valueSource, CounterValueSource counterValueSource, IDictionary <CounterFields, string> fields, DateTime timestamp) { if (counterValueSource == null || fields.Count == 0) { return; } var value = counterValueSource.ValueProvider.GetValue(counterValueSource.ResetOnReporting); if (value.Items.Any() && counterValueSource.ReportSetItems && fields.ContainsKey(CounterFields.SetItem)) { var itemSuffix = fields[CounterFields.SetItem]; foreach (var item in value.Items.Distinct()) { var itemData = new Dictionary <string, object>(); if (fields.ContainsKey(CounterFields.Total)) { itemData.Add(fields[CounterFields.Total], item.Count); } if (counterValueSource.ReportItemPercentages && fields.ContainsKey(CounterFields.SetItemPercent)) { itemData.AddIfNotNanOrInfinity(fields[CounterFields.SetItemPercent], item.Percent); } if (itemData.Any()) { WriteMetricWithSetItems( writer, context, valueSource, item.Tags, itemData, itemSuffix, timestamp); } } } if (fields.ContainsKey(CounterFields.Value)) { var count = value.Count; WriteMetricValue(writer, context, valueSource, fields[CounterFields.Value], count, timestamp); } }
public static void WriteApdex( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <ApdexValue> valueSource, DateTime timestamp) { if (valueSource == null) { return; } var data = new Dictionary <string, object>(); valueSource.Value.AddApdexValues(data, writer.MetricNameMapping.Apdex); WriteMetric(writer, context, valueSource, data, timestamp); }
public static void WriteGauge( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <double> valueSource, IDictionary <GaugeFields, string> fields, DateTime timestamp) { if (valueSource == null || fields.Count == 0) { return; } if (!double.IsNaN(valueSource.Value) && !double.IsInfinity(valueSource.Value) && fields.ContainsKey(GaugeFields.Value)) { WriteMetricValue(writer, context, valueSource, fields[GaugeFields.Value], valueSource.Value, timestamp); } }
public static void WriteApdex( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <ApdexValue> valueSource, IDictionary <ApdexFields, string> fields, DateTime timestamp) { if (valueSource == null || fields.Count == 0) { return; } var data = new Dictionary <string, object>(); valueSource.Value.AddApdexValues(data, fields); WriteMetric(writer, context, valueSource, data, timestamp); }
public static void WriteHistogram( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <HistogramValue> valueSource, IDictionary <HistogramFields, string> fields, DateTime timestamp) { if (valueSource == null || fields.Count == 0) { return; } var data = new Dictionary <string, object>(); var value = valueSource.ValueProvider.GetValue(valueSource.ResetOnReporting); value.AddHistogramValues(data, fields); WriteMetric(writer, context, valueSource, data, timestamp); }
public static void WriteMeter( this IMetricSnapshotWriter writer, string context, MeterValueSource valueSource, IDictionary <MeterFields, string> fields, DateTime timestamp) { if (valueSource == null || fields.Count == 0) { return; } var data = new Dictionary <string, object>(); var value = valueSource.ValueProvider.GetValue(valueSource.ResetOnReporting); if (value.Items.Any() && valueSource.ReportSetItems && fields.ContainsKey(MeterFields.SetItem)) { var itemSuffix = fields[MeterFields.SetItem]; foreach (var item in value.Items.Distinct()) { var setItemData = new Dictionary <string, object>(); item.AddMeterSetItemValues(setItemData, fields); if (setItemData.Any()) { WriteMetricWithSetItems( writer, context, valueSource, item.Tags, setItemData, itemSuffix, timestamp); } } } value.AddMeterValues(data, fields); WriteMetric(writer, context, valueSource, data, timestamp); }
private static void BuildMetricPayload <TMetric>( string context, MetricValueSourceBase <TMetric> valueSource, IMetricSnapshotWriter writer, DateTime timestamp) { if (typeof(TMetric) == typeof(double)) { BuildGaugePayload(context, valueSource as MetricValueSourceBase <double>, writer, timestamp); return; } if (typeof(TMetric) == typeof(CounterValue)) { BuildCounterPayload(context, valueSource as MetricValueSourceBase <CounterValue>, writer, timestamp); return; } if (typeof(TMetric) == typeof(MeterValue)) { BuildMeterPayload(context, valueSource as MetricValueSourceBase <MeterValue>, writer, timestamp); return; } if (typeof(TMetric) == typeof(TimerValue)) { BuildTimerPayload(context, valueSource as MetricValueSourceBase <TimerValue>, writer, timestamp); return; } if (typeof(TMetric) == typeof(HistogramValue)) { BuildHistogramPayload(context, valueSource as MetricValueSourceBase <HistogramValue>, writer, timestamp); return; } if (typeof(TMetric) == typeof(ApdexValue)) { BuildApdexPayload(context, valueSource as MetricValueSourceBase <ApdexValue>, writer, timestamp); } }
public static void WriteCounter( this IMetricSnapshotWriter writer, string context, MetricValueSourceBase <CounterValue> valueSource, CounterValueSource counterValueSource, DateTime timestamp) { if (counterValueSource == null) { return; } if (counterValueSource.Value.Items.Any() && counterValueSource.ReportSetItems) { foreach (var item in counterValueSource.Value.Items.Distinct()) { var itemData = new Dictionary <string, object> { { writer.MetricNameMapping.Counter[CounterValueDataKeys.Total], item.Count } }; if (counterValueSource.ReportItemPercentages) { itemData.AddIfNotNanOrInfinity(writer.MetricNameMapping.Counter[CounterValueDataKeys.SetItemPercent], item.Percent); } WriteMetricWithSetItems( writer, context, valueSource, item.Tags, itemData, writer.MetricNameMapping.Counter[CounterValueDataKeys.MetricSetItemSuffix], timestamp); } } var count = valueSource.ValueProvider.GetValue(resetMetric: counterValueSource.ResetOnReporting).Count; WriteMetricValue(writer, context, valueSource, count, timestamp); }
private static void BuildGaugePayload(string context, MetricValueSourceBase <double> valueSource, IMetricSnapshotWriter writer, DateTime timestamp) { writer.WriteGauge(context, valueSource, timestamp); }