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);
        }
Пример #4
0
        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);
                }
            }
        }
Пример #7
0
 private static void BuildMeterPayload(
     string context,
     MetricValueSourceBase <MeterValue> valueSource,
     IMetricSnapshotWriter writer,
     DateTime timestamp)
 {
     writer.WriteMeter(context, valueSource, timestamp);
 }
Пример #8
0
 private static void BuildHistogramPayload(
     string context,
     MetricValueSourceBase <HistogramValue> valueSource,
     IMetricSnapshotWriter writer,
     DateTime timestamp)
 {
     writer.WriteHistogram(context, valueSource, timestamp);
 }
Пример #9
0
 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);
 }
Пример #10
0
 private static void BuildApdexPayload(
     string context,
     MetricValueSourceBase <ApdexValue> valueSource,
     IMetricSnapshotWriter writer,
     IDictionary <ApdexFields, string> fields,
     DateTime timestamp)
 {
     writer.WriteApdex(context, valueSource, fields, timestamp);
 }
Пример #11
0
 private static void BuildGaugePayload(
     string context,
     MetricValueSourceBase <double> valueSource,
     IMetricSnapshotWriter writer,
     IDictionary <GaugeFields, string> fields,
     DateTime timestamp)
 {
     writer.WriteGauge(context, valueSource, fields, timestamp);
 }
Пример #12
0
 private static void BuildBucketHistogramPayload(
     string context,
     MetricValueSourceBase <BucketHistogramValue> valueSource,
     IMetricSnapshotWriter writer,
     IDictionary <string, string> fields,
     DateTime timestamp)
 {
     writer.WriteBucketHistogram(context, valueSource, fields, timestamp);
 }
Пример #13
0
 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);
 }
Пример #14
0
        private static void BuildCounterPayload(
            string context,
            MetricValueSourceBase <CounterValue> valueSource,
            IMetricSnapshotWriter writer,
            DateTime timestamp)
        {
            var counterValueSource = valueSource as CounterValueSource;

            writer.WriteCounter(context, valueSource, counterValueSource, timestamp);
        }
Пример #15
0
 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);
     }
 }
Пример #16
0
        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);
            }
        }
Пример #17
0
        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);
        }
Пример #18
0
        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);
        }
Пример #19
0
        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);
            }
        }
Пример #20
0
        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);
        }
Пример #23
0
        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);
        }
Пример #24
0
        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);
        }
Пример #25
0
        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);
            }
        }
Пример #26
0
        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);
        }
Пример #27
0
 private static void BuildGaugePayload(string context, MetricValueSourceBase <double> valueSource, IMetricSnapshotWriter writer, DateTime timestamp)
 {
     writer.WriteGauge(context, valueSource, timestamp);
 }