diff --git a/tangostationcontrol/tangostationcontrol/toolkit/archiver.py b/tangostationcontrol/tangostationcontrol/toolkit/archiver.py index 49cd0d91bbdb9acc946f75dc92801a3b8c47d438..2c002f1cf866c98738c13203fbf8e0cd864edabd 100644 --- a/tangostationcontrol/tangostationcontrol/toolkit/archiver.py +++ b/tangostationcontrol/tangostationcontrol/toolkit/archiver.py @@ -429,12 +429,8 @@ class Archiver(): """ es = DeviceProxy(es_name or self.get_next_subscriber()) attribute_list = es.AttributeStartedList or [] - attributes_started = [] pattern = re.compile(regex) - for a in attribute_list: - if pattern.search(a): - attributes_started.append(a) - return attributes_started + return [a for a in attribute_list if pattern.search(a)] def get_attribute_subscriber(self, attribute_name:str): """ @@ -491,18 +487,18 @@ class Archiver(): # Get the list of attributes info attributes_info = DeviceProxy(device_name).attribute_list_query() # Filter the archived attributes - for i in range(len(attributes_info)): - if attributes_info[i].name.lower() in attributes_started: - attr_dict = {'attribute': attributes_info[i].name.lower(), - 'polling_period': AttributeProxy(device_name+'/'+attributes_info[i].name).get_poll_period(), - 'data_type': str(attributes_info[i].data_type).split('.')[-1], - 'dim_x': attributes_info[i].max_dim_x, - 'dim_y': attributes_info[i].max_dim_y} + for attribute_info in attributes_info: + if attribute_info.name.lower() in attributes_started: + attr_dict = {'attribute': attribute_info.name.lower(), + 'polling_period': AttributeProxy(device_name+'/'+attribute_info.name).get_poll_period(), + 'data_type': attribute_info.data_type, + 'dim_x': attribute_info.max_dim_x, + 'dim_y': attribute_info.max_dim_y} load_list.append(attr_dict) # Compute the total load polling_load = 0 for a in load_list: - polling_period = float(a['polling_period']/1000) # in seconds + polling_period = a['polling_period']/1000 # in seconds n_bytes = get_size_from_datatype(a['data_type']) x = int(a['dim_x']) or 1 y = int(a['dim_y']) or 1 diff --git a/tangostationcontrol/tangostationcontrol/toolkit/archiver_util.py b/tangostationcontrol/tangostationcontrol/toolkit/archiver_util.py index 932b9682826835bdb3a58dd7a2c93e8ff82a323c..2929dca36608552955953f2947c36c137948b7c9 100644 --- a/tangostationcontrol/tangostationcontrol/toolkit/archiver_util.py +++ b/tangostationcontrol/tangostationcontrol/toolkit/archiver_util.py @@ -4,7 +4,7 @@ Utility functions for the Archiver functionality. """ -from tango import DeviceProxy +from tango import DeviceProxy, CmdArgType import re def get_db_config(device_name:str) -> dict: @@ -105,26 +105,28 @@ def retrieve_attributes_from_wildcards(device_name: str, matching_list: list): matched_list.append(a) return matched_list -def get_bytesize_dict() -> dict: +def DATATYPES_SIZE_DICT() -> dict: """ Return a dictionary whose keys are the Tango datatypes mapping, and the values are the relative byte size See reference https://tango-controls.readthedocs.io/en/latest/development/advanced/reference.html#tango-data-type and https://www.tutorialspoint.com/cplusplus/cpp_data_types.htm TODO: manage String attributes """ - datatypes_dict = {'1_Boolean':1, '2_Short':2, '3_Long':8, '4_Float':4, '5_Double':8,'6_UShort':2,'7_ULong':8,'8_String':20, - '9_CharArray':None, '10_ShortArray':None, '11_LongArray': None,'12_FloatArray':None ,'13_DoubleArray':None ,'14_UShortArray':None, - '15_ULongArray': None, '16_StringArray': None,'17_LongStringArray': None,'18_DoubleStringArray':None, - '19_State':3,'20_ConstDevString':None,'21_BooleanArray':None,'22_UChar':1,'23_Long64':8,'24_ULong64':8,'25_Long64Array':None, - '26_ULong64Array':None, '27_Int':4,'28_Encoded':None, '29_Enum':None, '30_PipeBlob':None,'31_StateArray':None} + datatypes_dict = {CmdArgType.DevBoolean:1, CmdArgType.DevShort:2, CmdArgType.DevLong:8, CmdArgType.DevFloat:4, CmdArgType.DevDouble:8, + CmdArgType.DevUShort:2, CmdArgType.DevULong:8, CmdArgType.DevString:20, CmdArgType.DevVarCharArray:None, CmdArgType.DevVarShortArray:None, + CmdArgType.DevVarLongArray: None,CmdArgType.DevVarFloatArray:None, CmdArgType.DevVarDoubleArray:None, CmdArgType.DevVarUShortArray:None, + CmdArgType.DevVarULongArray: None, CmdArgType.DevVarStringArray: None, CmdArgType.DevVarLongStringArray: None, CmdArgType.DevVarDoubleStringArray:None, + CmdArgType.DevState:3, CmdArgType.ConstDevString:None, CmdArgType.DevVarBooleanArray:None, CmdArgType.DevUChar:1, CmdArgType.DevLong64:8, + CmdArgType.DevULong64:8,CmdArgType.DevVarLong64Array:None,CmdArgType.DevVarULong64Array:None, CmdArgType.DevInt:4,CmdArgType.DevEncoded:None, + CmdArgType.DevEnum:None, CmdArgType.DevPipeBlob:None} return datatypes_dict -def get_size_from_datatype(datatype:str) -> int: +def get_size_from_datatype(datatype:int) -> int: """ Return the number of bytes for a given Tango datatype """ - datatypes_dict = get_bytesize_dict() + datatypes_dict = DATATYPES_SIZE_DICT() try : - return [v for k,v in datatypes_dict.items() if k.startswith(f"{datatype}_")][0] + return datatypes_dict[datatype] except IndexError: return 1