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