in edge-modules/metrics-collector/src/IotHubUpload/IotHubUpload.cs [62:120]
private string Transform(IEnumerable<ExportMetric> metrics)
{
DateTime timeGeneratedUtc = DateTime.MaxValue;
string deviceName = string.Empty;
string instanceNumber = string.Empty;
Dictionary<string, List<Dictionary<string, object>>> categorizedMetrics = new Dictionary<string, List<Dictionary<string, object>>>();
foreach (ExportMetric metric in metrics)
{
if (timeGeneratedUtc == DateTime.MaxValue)
{
timeGeneratedUtc = metric.TimeGeneratedUtc;
}
if (deviceName == string.Empty)
{
deviceName = metric.Labels.GetValueOrDefault("edge_device", string.Empty);
}
if (instanceNumber == string.Empty)
{
instanceNumber = metric.Labels.GetValueOrDefault("instance_number", string.Empty);
}
if (double.IsNaN(metric.Value) ||
double.IsNegativeInfinity(metric.Value) ||
double.IsPositiveInfinity(metric.Value))
{
continue;
}
var labels = TransformMetricLabels(metric);
if (categorizedMetrics.ContainsKey(metric.Name))
{
List<Dictionary<string, object>> list;
if (categorizedMetrics.TryGetValue(metric.Name, out list))
{
list.Add(labels);
}
}
else
{
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
list.Add(labels);
categorizedMetrics.Add(metric.Name, list);
}
}
string outputMessageString = "{" + $"\"TimeGeneratedUtc\":\"{timeGeneratedUtc}\", \"edge_device\":\"{deviceName}\", \"instance_number\":\"{instanceNumber}\"";
foreach (KeyValuePair<string, List<Dictionary<string, object>>> kvp in categorizedMetrics)
{
foreach (var obj in kvp.Value)
{
outputMessageString += $",\"{kvp.Key}\":" + JsonConvert.SerializeObject(obj);
}
}
outputMessageString += "}";
return outputMessageString;
}