private Dictionary TransformMetricLabels()

in edge-modules/metrics-collector/src/IotHubUpload/IotHubUpload.cs [122:251]


        private Dictionary<string, object> TransformMetricLabels(ExportMetric metric)
        {
            var labels = new Dictionary<string, object>();
            labels.Add("value", metric.Value);

            string command = metric.Labels.GetValueOrDefault("command", string.Empty);
            if (command != string.Empty)
            {
                labels.Add("command", command);
            }

            string diskName = metric.Labels.GetValueOrDefault("disk_name", string.Empty);
            if (diskName != string.Empty)
            {
                labels.Add("disk_name", diskName);
            }

            string from = metric.Labels.GetValueOrDefault("from", string.Empty);
            if (from == string.Empty)
            {
                from = metric.Labels.GetValueOrDefault("module_name", string.Empty);
                if (from == string.Empty)
                {
                    from = metric.Labels.GetValueOrDefault("id", string.Empty);
                    if (from != string.Empty && from.Contains("[IotHubHostName:"))
                    {
                        // Process ids like: 'DeviceId: <deviceId>; ModuleId: <moduleName> [IotHubHostName: <iothubFullyQualifiedName>]'
                        // to make them look like <deviceId>/<moduleId>
                        string device = string.Empty;
                        string module = string.Empty;
                        string temp = from.Replace('[', ';');
                        string[] idParts = temp.Split(';', StringSplitOptions.RemoveEmptyEntries);
                        foreach (string idPart in idParts)
                        {
                            string part = idPart.Trim().ToLowerInvariant();
                            string[] subParts = part.Split(':', StringSplitOptions.RemoveEmptyEntries);
                            if (subParts.Length == 2)
                            {
                                if (subParts[0].Trim() == "deviceid")
                                {
                                    device = subParts[1].Trim();
                                    continue;
                                }

                                if (subParts[0].Trim() == "moduleid")
                                {
                                    module = subParts[1].Trim();
                                    continue;
                                }
                            }
                        }

                        if (device == string.Empty || module == string.Empty)
                        {
                            LoggerUtil.Writer.LogInformation($"skipped transforming from: '{from}' in metric: '{metric.Name}'");
                            from = string.Empty;
                        }
                        else
                        {
                            from = $"{device}/{module}";
                        }
                    }
                }
            }
            if (from != string.Empty)
            {
                labels.Add("from", from);
            }

            string fromRouteOutput = metric.Labels.GetValueOrDefault("from_route_output", string.Empty);
            if (fromRouteOutput == string.Empty)
            {
                fromRouteOutput = metric.Labels.GetValueOrDefault("route_output", string.Empty);
                if (fromRouteOutput == string.Empty)
                {
                    fromRouteOutput = metric.Labels.GetValueOrDefault("source", string.Empty);
                }
            }
            if (fromRouteOutput != string.Empty)
            {
                labels.Add("from_route_output", fromRouteOutput);
            }

            string to = metric.Labels.GetValueOrDefault("to", string.Empty);
            if (to == string.Empty)
            {
                to = metric.Labels.GetValueOrDefault("to_route_input", string.Empty);
                if (to == string.Empty)
                {
                    to = metric.Labels.GetValueOrDefault("target", string.Empty);
                }
            }
            if (to != string.Empty)
            {
                labels.Add("to", to);
            }

            string priorityString = metric.Labels.GetValueOrDefault("priority", string.Empty);
            if (priorityString != string.Empty)
            {
                try
                {
                    long priority = Convert.ToInt64(priorityString);
                    labels.Add("priority", priority);
                }
                catch
                {
                    LoggerUtil.Writer.LogInformation($"skipped transforming priority: '{priorityString}' in metric: '{metric.Name}'");
                }
            }

            string quantileString = metric.Labels.GetValueOrDefault("quantile", string.Empty);
            if (quantileString != string.Empty)
            {
                double quantile;
                if (double.TryParse(quantileString, out quantile) &&
                    !(double.IsNaN(quantile) ||
                      double.IsNegativeInfinity(quantile) ||
                      double.IsNegativeInfinity(quantile)))
                {
                    labels.Add("quantile", quantile);
                }
                else
                {
                    LoggerUtil.Writer.LogInformation($"skipped transforming quantile: '{quantileString}' in metric: '{metric.Name}'");
                }
            }

            return labels;
        }