From 9d3e385ced6a02a8e6ac03112d9464419809dae9 Mon Sep 17 00:00:00 2001
From: stedif <stefano.difrischia@inaf.it>
Date: Thu, 28 Jul 2022 16:51:51 +0200
Subject: [PATCH] L2SS-777: simplify matching between device names

---
 .../code/tango-prometheus-client.py           | 22 +++++--------------
 1 file changed, 6 insertions(+), 16 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 e7455becd..f00be30ab 100644
--- a/docker-compose/tango-prometheus-exporter/code/tango-prometheus-client.py
+++ b/docker-compose/tango-prometheus-exporter/code/tango-prometheus-client.py
@@ -6,7 +6,6 @@ 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()
@@ -51,16 +50,6 @@ class ArchiverPolicy(object):
                     continue
                 device_list.append(cls.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:
         """ Filter the device list from TangoDB following the lofar2-policy file """
@@ -68,11 +57,12 @@ class ArchiverPolicy(object):
         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(config_devices)
-        # Filter devices following policy file
-        devices = list( set(db_devices) & set(config_devices) ) # list intersection
-        devices += multimember_devices
+        # Match device names fetched from DB against device names in policy file
+        devices = []
+        for config_dev in config_devices:
+            for db_dev in db_devices:
+                if fnmatch.fnmatch(db_dev, config_dev):
+                    devices.append(db_dev)
         return devices
 
     def attribute_list(self, device_name: str, attribute_list: list) -> dict:
-- 
GitLab