private string Transform()

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