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