From 120c8bb42d33eac7c150eb67301ee4830b616909 Mon Sep 17 00:00:00 2001 From: stedif <stefano.difrischia@inaf.it> Date: Thu, 28 Jul 2022 11:45:20 +0200 Subject: [PATCH] L2SS-777: update archiver-policy devices --- .../code/tango-prometheus-client.py | 51 +++++++++++++------ .../lofar2-policy.json | 4 ++ 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/docker-compose/tango-prometheus-exporter/code/tango-prometheus-client.py b/docker-compose/tango-prometheus-exporter/code/tango-prometheus-client.py index 505c89c5a..cb3953412 100644 --- a/docker-compose/tango-prometheus-exporter/code/tango-prometheus-client.py +++ b/docker-compose/tango-prometheus-exporter/code/tango-prometheus-client.py @@ -6,6 +6,7 @@ from tango import Database, DeviceProxy, CmdArgType as ArgType, AttrDataFormat, import logging import json import fnmatch +import re from logstash_async.handler import AsynchronousLogstashHandler, LogstashFormatter logger = logging.getLogger() @@ -37,8 +38,42 @@ class ArchiverPolicy(object): def __init__(self, config: dict = None): self.config = config or self.EMPTY_POLICY + def device_list(self) -> list: + """ Retrieve the device list from TangoDB """ + device_list = [] + db = Database() + server_list = db.get_server_list() # e.g. SDP/STAT, RECV/STAT + for i in range(0, len(server_list)): + # https://pytango.readthedocs.io/en/stable/database.html#tango.Database.get_device_class_list + class_list = db.get_device_class_list(server_list[i]) + for j in range(0, len(class_list), 2): + if "dserver" in class_list[j]: + continue + device_list.append(class_list[j].lower()) + return device_list + + def multimember_device_list(config_devices: list) -> list: + """ Retrieve multimember devices if there are any regulare expressions in the policy file """ + multimember_devices = [] + for device in config_devices: + if re.match('.*/.*/[*]', device): + members = Database().get_device_member(device) + retrieved_devices = [f"{device[:-1]}{m}" for m in members] + multimember_devices += retrieved_devices + return multimember_devices + def devices(self) -> list: - return list(self.config["devices"].keys()) + """ Filter the device list from TangoDB following the lofar2-policy file """ + # Devices list from TangoDB + db_devices = self.device_list() + # Devices listed in policy file + config_devices = list(k.lower() for k in self.config["devices"].keys()) + # Multimember device list + multimember_devices = self.multimember_device_list + # Filter devices following policy file + devices = [x for x in db_devices if x in config_devices] + devices += multimember_devices + return devices def attribute_list(self, device_name: str, attribute_list: list) -> dict: """ Return the full set of archiving policy for the given device. """ @@ -176,20 +211,6 @@ class CustomCollector(object): return metrics - def device_list(self) -> list: - """ Retrieve the device list from TangoDB """ - device_list = [] - db = Database() - server_list = db.get_server_list() # e.g. SDP/STAT, RECV/STAT - for i in range(0, len(server_list)): - # https://pytango.readthedocs.io/en/stable/database.html#tango.Database.get_device_class_list - class_list = db.get_device_class_list(server_list[i]) - for j in range(0, len(class_list), 2): - if "dserver" in class_list[j]: - continue - device_list.append(class_list[j].lower()) - return device_list - def collect(self): """ Yield all scraped metrics from all devices, as configured. """ diff --git a/docker-compose/tango-prometheus-exporter/lofar2-policy.json b/docker-compose/tango-prometheus-exporter/lofar2-policy.json index 5c7d49b01..06a1febb3 100644 --- a/docker-compose/tango-prometheus-exporter/lofar2-policy.json +++ b/docker-compose/tango-prometheus-exporter/lofar2-policy.json @@ -29,6 +29,10 @@ }, "STAT/Docker/1": { }, + "STAT/Observation/*":{ + }, + "STAT/ObservationControl/1":{ + }, "STAT/PSOC/1": { }, "STAT/RECV/1": { -- GitLab