From 63019752cb35482b386b0fe208f78eef63867fbf Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Fri, 3 Sep 2021 11:44:17 +0200 Subject: [PATCH] L2SS-359: Expose 2D arrays as well, and prefix single-digit indices with 0 to allow alphabetical sorting. --- .../code/collector.py | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/docker-compose/tango-prometheus-exporter/code/collector.py b/docker-compose/tango-prometheus-exporter/code/collector.py index 9c765e400..970d730a2 100644 --- a/docker-compose/tango-prometheus-exporter/code/collector.py +++ b/docker-compose/tango-prometheus-exporter/code/collector.py @@ -50,15 +50,15 @@ class CustomCollector(object): attr_info.data_type == ArgType.DevLong64 or attr_info.data_type == ArgType.DevULong64 or attr_info.data_type == ArgType.DevInt or attr_info.data_type == ArgType.DevFloat or attr_info.data_type == ArgType.DevDouble): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, '', 'float', str(attr_value.dim_x), str(attr_value.dim_y), str(x), '0'], float(attr_value.value[x])) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, '', 'float', str(attr_value.dim_x), str(attr_value.dim_y), f"{x:02}", '0'], float(attr_value.value[x])) elif(attr_info.data_type == ArgType.DevBoolean): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, '','bool', str(attr_value.dim_x), str(attr_value.dim_y), str(x), '0'], int(attr_value.value[x])) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, '','bool', str(attr_value.dim_x), str(attr_value.dim_y), f"{x:02}", '0'], int(attr_value.value[x])) elif(attr_info.data_type == ArgType.DevString): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[x]),'string', str(attr_value.dim_x), str(attr_value.dim_y), str(x), '0'], 1) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[x]),'string', str(attr_value.dim_x), str(attr_value.dim_y), f"{x:02}", '0'], 1) elif(attr_info.data_type == ArgType.DevEnum): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[x]),'enum', str(attr_value.dim_x), str(attr_value.dim_y), str(x), '0'], int(attr_value.value[x])) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[x]),'enum', str(attr_value.dim_x), str(attr_value.dim_y), f"{x:02}", '0'], int(attr_value.value[x])) elif(attr_info.data_type == ArgType.DevState): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[x]),'state', str(attr_value.dim_x), str(attr_value.dim_y), str(x), '0'], int(attr_value.value[x])) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[x]),'state', str(attr_value.dim_x), str(attr_value.dim_y), f"{x:02}", '0'], int(attr_value.value[x])) else: pass return 1 @@ -67,20 +67,23 @@ class CustomCollector(object): attr_value = dev.read_attribute(attr_info.name) for y in range(int(attr_value.dim_y)): for x in range(int(attr_value.dim_x)): + """ NOTE: We switch x and y in the annotation, to allow queries to combine 1D and 2D arrays in their first dimension using the same label (x). We effectively expose + the array as [x][y] instead of [y][x]. """ + if(attr_info.data_type == ArgType.DevShort or attr_info.data_type == ArgType.DevLong or attr_info.data_type == ArgType.DevUShort or attr_info.data_type == ArgType.DevULong or attr_info.data_type == ArgType.DevLong64 or attr_info.data_type == ArgType.DevULong64 or attr_info.data_type == ArgType.DevInt or attr_info.data_type == ArgType.DevFloat or attr_info.data_type == ArgType.DevDouble): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, '', 'float', str(attr_value.dim_x), str(attr_value.dim_y), str(x), str(y)], float(attr_value.value[y][x])) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, '', 'float', str(attr_value.dim_x), str(attr_value.dim_y), f"{y:02}", f"{x:02}"], float(attr_value.value[y][x])) elif(attr_info.data_type == ArgType.DevBoolean): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, '','bool', str(attr_value.dim_x), str(attr_value.dim_y), str(x), str(y)], int(attr_value.value[y][x])) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, '','bool', str(attr_value.dim_x), str(attr_value.dim_y), f"{y:02}", f"{x:02}"], int(attr_value.value[y][x])) elif(attr_info.data_type == ArgType.DevString): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[y][x]),'string', str(attr_value.dim_x), str(attr_value.dim_y), str(x), str(y)], 1) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[y][x]),'string', str(attr_value.dim_x), str(attr_value.dim_y), f"{y:02}", f"{x:02}"], 1) elif(attr_info.data_type == ArgType.DevEnum): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[y][x]),'enum', str(attr_value.dim_x), str(attr_value.dim_y), str(x), str(y)], int(attr_value.value[y][x])) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[y][x]),'enum', str(attr_value.dim_x), str(attr_value.dim_y), f"{y:02}", f"{x:02}"], int(attr_value.value[y][x])) elif(attr_info.data_type == ArgType.DevState): - metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[y][x]),'state', str(attr_value.dim_x), str(attr_value.dim_y), str(x), str(y)], int(attr_value.value[y][x])) + metric.add_metric([dev.dev_name(), attr_info.name, attr_info.label, str(attr_value.value[y][x]),'state', str(attr_value.dim_x), str(attr_value.dim_y), f"{y:02}", f"{x:02}"], int(attr_value.value[y][x])) else: pass return 1 @@ -179,12 +182,13 @@ class CustomCollector(object): read_count += 1 elif(attr_info.data_format == AttrDataFormat.IMAGE): - # res = self.add_to_metric_image(dev, attr_info, attribute_metrics) - # if(res <= 0): - not_managed_attribute_count += 1 + res = self.add_to_metric_image(dev, attr_info, attribute_metrics) + if(res <= 0): + not_managed_attribute_count += 1 #print("*******NOT MANAGED: "+attr_info.name) - image_count += 1 - # read_count += 1 + else: + image_count += 1 + read_count += 1 else: # AttrDataFormat.FMT_UNKNOWN not_managed_attribute_count += 1 -- GitLab