private static void PackMetricWithSetItems <T, TU>( IMetricPayloadBuilder <T> payloadBuilder, Func <string, string, string> metricNameFormatter, string context, MetricValueSourceBase <TU> valueSource, MetricTags setItemTags, IDictionary <string, object> itemData, string metricSetItemSuffix) { var keys = itemData.Keys.ToList(); var values = keys.Select(k => itemData[k]); var tags = ConcatMetricTags(valueSource, setItemTags); if (valueSource.IsMultidimensional) { payloadBuilder.Pack( metricNameFormatter(context, valueSource.MultidimensionalName + metricSetItemSuffix), keys, values, tags); return; } payloadBuilder.Pack(metricNameFormatter(context, valueSource.Name + metricSetItemSuffix), keys, values, tags); }
public void Build <TPayload>(MetricsDataValueSource metricsData, IMetricPayloadBuilder <TPayload> payloadBuilder) { foreach (var contextValueSource in metricsData.Contexts) { foreach (var valueSource in contextValueSource.ApdexScores) { BuildMetricPayload(contextValueSource.Context, valueSource, payloadBuilder); } foreach (var valueSource in contextValueSource.Gauges) { BuildMetricPayload(contextValueSource.Context, valueSource, payloadBuilder); } foreach (var valueSource in contextValueSource.Counters) { BuildMetricPayload(contextValueSource.Context, valueSource, payloadBuilder); } foreach (var valueSource in contextValueSource.Meters) { BuildMetricPayload(contextValueSource.Context, valueSource, payloadBuilder); } foreach (var valueSource in contextValueSource.Timers) { BuildMetricPayload(contextValueSource.Context, valueSource, payloadBuilder); } foreach (var valueSource in contextValueSource.Histograms) { BuildMetricPayload(contextValueSource.Context, valueSource, payloadBuilder); } } }
private static void BuildMeterPayload <T>( string context, MetricValueSourceBase <MeterValue> valueSource, IMetricPayloadBuilder <T> payloadBuilder) { payloadBuilder.PackMeter(context, valueSource); }
public static void PackCounter <T>( this IMetricPayloadBuilder <T> payloadBuilder, Func <string, string, string> metricNameFormatter, string context, MetricValueSourceBase <CounterValue> valueSource, CounterValueSource counterValueSource, IDictionary <CounterValueDataKeys, string> dataKeys) { 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> { { dataKeys[CounterValueDataKeys.Total], item.Count } }; if (counterValueSource.ReportItemPercentages) { itemData.AddIfNotNanOrInfinity(dataKeys[CounterValueDataKeys.SetItemPercent], item.Percent); } PackMetricWithSetItems(payloadBuilder, metricNameFormatter, context, valueSource, item.Tags, itemData, dataKeys[CounterValueDataKeys.MetricSetItemSuffix]); } } var count = valueSource.ValueProvider.GetValue(resetMetric: counterValueSource.ResetOnReporting).Count; PackMetricValue(payloadBuilder, metricNameFormatter, context, valueSource, count); }
private static void BuildApdexPayload <T>( string context, MetricValueSourceBase <ApdexValue> valueSource, IMetricPayloadBuilder <T> payloadBuilder) { payloadBuilder.PackApdex(context, valueSource); }
private static void BuildHistogramPayload <T>( string context, MetricValueSourceBase <HistogramValue> valueSource, IMetricPayloadBuilder <T> payloadBuilder) { payloadBuilder.PackHistogram(context, valueSource); }
public TestReporter(IMetricPayloadBuilder <TestMetricPayload> payloadBuilder, MetricValueDataKeys dataKeys = null) { _dataKeys = dataKeys ?? new MetricValueDataKeys(); _payloadBuilder = payloadBuilder; _metricNameFormatter = (metricContext, metricName) => metricContext.IsMissing() ? $"{metricName}".Replace(' ', '_').ToLowerInvariant() : $"{metricContext}__{metricName}".Replace(' ', '_').ToLowerInvariant(); }
private static void BuildCounterPayload <T>( string context, MetricValueSourceBase <CounterValue> valueSource, IMetricPayloadBuilder <T> payloadBuilder) { var counterValueSource = valueSource as CounterValueSource; payloadBuilder.PackCounter(context, valueSource, counterValueSource); }
public static void PackTimer <T>( this IMetricPayloadBuilder <T> payloadBuilder, string context, MetricValueSourceBase <TimerValue> valueSource) { valueSource.Value.Rate.AddMeterValues(out IDictionary <string, object> data, payloadBuilder.DataKeys.Meter); valueSource.Value.Histogram.AddHistogramValues(data, payloadBuilder.DataKeys.Histogram); PackMetric(payloadBuilder, context, valueSource, data); }
public static void PackHistogram <T>( this IMetricPayloadBuilder <T> payloadBuilder, string context, MetricValueSourceBase <HistogramValue> valueSource) { var data = new Dictionary <string, object>(); valueSource.Value.AddHistogramValues(data, payloadBuilder.DataKeys.Histogram); PackMetric(payloadBuilder, context, valueSource, data); }
public static void PackGauge <T>( this IMetricPayloadBuilder <T> payloadBuilder, string context, MetricValueSourceBase <double> valueSource) { if (!double.IsNaN(valueSource.Value) && !double.IsInfinity(valueSource.Value)) { PackMetricValue(payloadBuilder, context, valueSource, valueSource.Value); } }
private static IMetricReporter CreateReporter(IMetricPayloadBuilder <GraphitePayload> payloadBuilder) { var reportInterval = TimeSpan.FromSeconds(1); var loggerFactory = new LoggerFactory(); return(new ReportRunner <GraphitePayload>( p => Task.FromResult(true), payloadBuilder, reportInterval, "Graphite Reporter", loggerFactory)); }
public static void PackHistogram <T>( this IMetricPayloadBuilder <T> payloadBuilder, Func <string, string, string> metricNameFormatter, string context, MetricValueSourceBase <HistogramValue> valueSource, IDictionary <HistogramValueDataKeys, string> dataKeys) { var data = new Dictionary <string, object>(); valueSource.Value.AddHistogramValues(data, dataKeys); PackMetric(payloadBuilder, metricNameFormatter, context, valueSource, data); }
private static IMetricReporter CreateReporter(IMetricPayloadBuilder <LineProtocolPayload> payloadBuilder) { var reportInterval = TimeSpan.FromSeconds(1); var loggerFactory = new LoggerFactory(); return(new ReportRunner <LineProtocolPayload>( p => AppMetricsTaskCache.SuccessTask, payloadBuilder, reportInterval, "InfluxDB Reporter", loggerFactory)); }
public static void PackTimer <T>( this IMetricPayloadBuilder <T> payloadBuilder, Func <string, string, string> metricNameFormatter, string context, MetricValueSourceBase <TimerValue> valueSource, IDictionary <MeterValueDataKeys, string> meterDataKeys, IDictionary <HistogramValueDataKeys, string> histogramDataKeys) { valueSource.Value.Rate.AddMeterValues(out IDictionary <string, object> data, meterDataKeys); valueSource.Value.Histogram.AddHistogramValues(data, histogramDataKeys); PackMetric(payloadBuilder, metricNameFormatter, context, valueSource, data); }
public ReportRunner( Func <IMetricPayloadBuilder <T>, Task <bool> > flushAsync, IMetricPayloadBuilder <T> payloadBuilder, TimeSpan reportInterval, ILoggerFactory loggerFactory) : this( flushAsync, payloadBuilder, reportInterval, typeof(ReportRunner <T>).Name, loggerFactory) { }
public ReportRunner( Func <IMetricPayloadBuilder <T>, Task <bool> > flushAsync, IMetricPayloadBuilder <T> payloadBuilder, TimeSpan reportInterval, string name, ILoggerFactory loggerFactory) { ReportInterval = reportInterval; Name = name; _payloadBuilder = payloadBuilder; _logger = loggerFactory.CreateLogger <ReportRunner <T> >(); _flushAsync = flushAsync; }
public static void PackApdex <T>( this IMetricPayloadBuilder <T> payloadBuilder, string context, MetricValueSourceBase <ApdexValue> valueSource) { if (valueSource == null) { return; } var data = new Dictionary <string, object>(); valueSource.Value.AddApdexValues(data, payloadBuilder.DataKeys.Apdex); PackMetric(payloadBuilder, context, valueSource, data); }
public ReportRunner( Func <IMetricPayloadBuilder <T>, Task <bool> > flushAsync, IMetricPayloadBuilder <T> payloadBuilder, TimeSpan reportInterval, ILoggerFactory loggerFactory, Func <string, string, string> metricNameFormatter, MetricValueDataKeys customDataKeys = null) : this( flushAsync, payloadBuilder, reportInterval, typeof(ReportRunner <T>).Name, loggerFactory, metricNameFormatter, customDataKeys) { }
public static void PackApdex <T>( this IMetricPayloadBuilder <T> payloadBuilder, Func <string, string, string> metricNameFormatter, string context, MetricValueSourceBase <ApdexValue> valueSource, IDictionary <ApdexValueDataKeys, string> dataKeys) { if (valueSource == null) { return; } var data = new Dictionary <string, object>(); valueSource.Value.AddApdexValues(data, dataKeys); PackMetric(payloadBuilder, metricNameFormatter, context, valueSource, data); }
private static IMetricReporter CreateReporter(IMetricPayloadBuilder <TestMetricPayload> payloadBuilder) { var loggerFactory = new LoggerFactory(); var settings = new TestReporterSettings(); return(new ReportRunner <TestMetricPayload>( p => { var payload = p.Payload(); return AppMetricsTaskCache.SuccessTask; }, payloadBuilder, settings.ReportInterval, "Test Reporter", loggerFactory, settings.MetricNameFormatter, settings.DataKeys)); }
public ReportRunner( Func <IMetricPayloadBuilder <T>, Task <bool> > flushAsync, IMetricPayloadBuilder <T> payloadBuilder, TimeSpan reportInterval, string name, ILoggerFactory loggerFactory, Func <string, string, string> metricNameFormatter, MetricValueDataKeys customDataKeys = null) { ReportInterval = reportInterval; Name = name; _payloadBuilder = payloadBuilder; _metricNameFormatter = metricNameFormatter; _dataKeys = customDataKeys ?? new MetricValueDataKeys(); _logger = loggerFactory.CreateLogger <ReportRunner <T> >(); _flushAsync = flushAsync; }
public static void PackMeter <T>( this IMetricPayloadBuilder <T> payloadBuilder, Func <string, string, string> metricNameFormatter, string context, MetricValueSourceBase <MeterValue> valueSource, IDictionary <MeterValueDataKeys, string> dataKeys) { if (valueSource.Value.Items.Any()) { foreach (var item in valueSource.Value.Items.Distinct()) { item.AddMeterSetItemValues(out IDictionary <string, object> setItemData, dataKeys); PackMetricWithSetItems(payloadBuilder, metricNameFormatter, context, valueSource, item.Tags, setItemData, dataKeys[MeterValueDataKeys.MetricSetItemSuffix]); } } valueSource.Value.AddMeterValues(out IDictionary <string, object> data, dataKeys); PackMetric(payloadBuilder, metricNameFormatter, context, valueSource, data); }
private static void PackMetricValue <T, TU>( IMetricPayloadBuilder <T> payloadBuilder, Func <string, string, string> metricNameFormatter, string context, MetricValueSourceBase <TU> valueSource, object value) { var tags = ConcatMetricTags(valueSource); if (valueSource.IsMultidimensional) { payloadBuilder.Pack( metricNameFormatter(context, valueSource.MultidimensionalName), value, tags); return; } payloadBuilder.Pack(metricNameFormatter(context, valueSource.Name), value, tags); }
private static void BuildMetricPayload <TMetric, TPayload>( string context, MetricValueSourceBase <TMetric> valueSource, IMetricPayloadBuilder <TPayload> payloadBuilder) { if (typeof(TMetric) == typeof(double)) { BuildGaugePayload(context, valueSource as MetricValueSourceBase <double>, payloadBuilder); return; } if (typeof(TMetric) == typeof(CounterValue)) { BuildCounterPayload(context, valueSource as MetricValueSourceBase <CounterValue>, payloadBuilder); return; } if (typeof(TMetric) == typeof(MeterValue)) { BuildMeterPayload(context, valueSource as MetricValueSourceBase <MeterValue>, payloadBuilder); return; } if (typeof(TMetric) == typeof(TimerValue)) { BuildTimerPayload(context, valueSource as MetricValueSourceBase <TimerValue>, payloadBuilder); return; } if (typeof(TMetric) == typeof(HistogramValue)) { BuildHistogramPayload(context, valueSource as MetricValueSourceBase <HistogramValue>, payloadBuilder); return; } if (typeof(TMetric) == typeof(ApdexValue)) { BuildApdexPayload(context, valueSource as MetricValueSourceBase <ApdexValue>, payloadBuilder); } }
private static void PackMetric <T1, T2>( IMetricPayloadBuilder <T1> payloadBuilder, Func <string, string, string> metricNameFormatter, string context, MetricValueSourceBase <T2> valueSource, IDictionary <string, object> data) { var keys = data.Keys.ToList(); var values = keys.Select(k => data[k]); var tags = ConcatMetricTags(valueSource); if (valueSource.IsMultidimensional) { payloadBuilder.Pack( metricNameFormatter(context, valueSource.MultidimensionalName), keys, values, tags); return; } payloadBuilder.Pack(metricNameFormatter(context, valueSource.Name), keys, values, tags); }
private static void BuildGaugePayload <T>(string context, MetricValueSourceBase <double> valueSource, IMetricPayloadBuilder <T> payloadBuilder) { payloadBuilder.PackGauge(context, valueSource); }
public TestReporter(IMetricPayloadBuilder <TestMetricPayload> payloadBuilder) { _payloadBuilder = payloadBuilder; }