using System; using System.Diagnostics; using log4net; namespace Amazon.AwsToolkit.Telemetry.Events.Core { public static class MetricDatumExtensionMethods { private static readonly ILog Logger = LogManager.GetLogger(typeof(MetricDatumExtensionMethods)); /// /// Add metadata to a metric datum, only if the value is non-blank /// public static void AddMetadata(this MetricDatum metricDatum, string key, string value) { if (string.IsNullOrWhiteSpace(value)) { return; } metricDatum.Metadata[key] = value; } /// /// Add metadata to a metric datum, only if the value is non-blank (object overload) /// public static void AddMetadata(this MetricDatum metricDatum, string key, object value) { if (value == null) { return; } metricDatum.AddMetadata(key, value.ToString()); } /// /// Add metadata to a metric datum, only if the value is non-blank (bool overload) /// public static void AddMetadata(this MetricDatum metricDatum, string key, bool value) { string valueStr = "false"; if (value) { valueStr = "true"; } metricDatum.AddMetadata(key, valueStr); } /// /// Add metadata to a metric datum, only if the value is non-blank (double overload) /// public static void AddMetadata(this MetricDatum metricDatum, string key, double value) { metricDatum.AddMetadata(key, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); } /// /// Add metadata to a metric datum, only if the value is non-blank (int overload) /// public static void AddMetadata(this MetricDatum metricDatum, string key, int value) { metricDatum.AddMetadata(key, value.ToString(System.Globalization.CultureInfo.InvariantCulture)); } /// /// If the transform function isn't null, invoke it and assign metric datum to it's result /// public static MetricDatum InvokeTransform(this MetricDatum metricDatum, Func transformDatum = null) { try { if (transformDatum != null) { metricDatum = transformDatum.Invoke(metricDatum); } } catch (Exception e) { Logger.Error("Error invoking transform function", e); Debug.Assert(!Debugger.IsAttached, "Error invoking transform function"); } return metricDatum; } } }