Skip to content
Snippets Groups Projects
Commit 77502150 authored by Stefano Di Frischia's avatar Stefano Di Frischia
Browse files

L2SS-542: fix archiver base and minor bugs

parent cd8ad239
No related branches found
No related tags found
1 merge request!240Resolve L2SS-542 "Add timescaledb views"
......@@ -3,7 +3,7 @@
import logging
from tango import DeviceProxy, AttributeProxy, DevState, DevFailed
from toolkit.archiver_util import get_db_config, attribute_name_from_url, device_name_url
from tangostationcontrol.toolkit.archiver_util import get_db_config, attribute_name_from_url, device_name_url, attribute_name_url
import time
import json
......@@ -277,7 +277,7 @@ class Archiver():
# search returns all matches in which attribute_name is part of the name,
# so check whether an exact match is included.
return attribute_name_from_url(attribute_name) in attributes
return any(attribute_name.lower() in a for a in attributes)
def update_archiving_attribute(self, attribute_name: str, polling_period: int, event_period: int, strategy: str = 'RUN'):
"""
......
......@@ -24,52 +24,65 @@ class Lofar_Scalar_Attribute(Base):
data_time = Column(TIMESTAMP, primary_key=True)
device = Column(String, primary_key=True)
name = Column(String, primary_key=True)
value = Column(FLOAT)
def __repr__(self):
return f"<Attribute(device='{self.device}', name='{self.name}', data_time='{self.data_time}',value='{self.value}'>"
class Lofar_Scalar_Boolean(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_boolean'
value = Column(Boolean)
class Lofar_Scalar_Double(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_double'
value = Column(FLOAT)
class Lofar_Scalar_Encoded(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_encoded'
value = Column(BYTEA)
class Lofar_Scalar_Enum(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_enum'
value = Column(INTEGER)
class Lofar_Scalar_Float(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_float'
value = Column(FLOAT)
class Lofar_Scalar_Long(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_long'
value = Column(INT4RANGE)
class Lofar_Scalar_Long64(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_long64'
value = Column(INT8RANGE)
class Lofar_Scalar_Short(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_short'
value = Column(INTEGER)
class Lofar_Scalar_State(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_state'
value = Column(INTEGER)
class Lofar_Scalar_String(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_string'
value = Column(TEXT)
class Lofar_Scalar_Uchar(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_uchar'
value = Column(INTEGER)
class Lofar_Scalar_Ulong(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_ulong'
value = Column(INTEGER)
class Lofar_Scalar_Ulong64(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_ulong64'
value = Column(INTEGER)
class Lofar_Scalar_Ushort(Lofar_Scalar_Attribute):
__tablename__ = 'lofar_scalar_ushort'
value = Column(INTEGER)
class Lofar_Array_Attribute(Base):
"""
......@@ -82,52 +95,65 @@ class Lofar_Array_Attribute(Base):
device = Column(String, primary_key=True)
name = Column(String, primary_key=True)
x = Column(INTEGER, primary_key=True)
value = Column(FLOAT)
def __repr__(self):
return f"<Attribute(device='{self.device}', name='{self.name}', data_time='{self.data_time}',index='{self.x}',value='{self.value}'>"
class Lofar_Array_Boolean(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_boolean'
value = Column(Boolean)
class Lofar_Array_Double(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_double'
value = Column(FLOAT)
class Lofar_Array_Encoded(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_encoded'
value = Column(BYTEA)
class Lofar_Array_Enum(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_enum'
value = Column(INTEGER)
class Lofar_Array_Float(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_float'
value = Column(FLOAT)
class Lofar_Array_Long(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_long'
value = Column(INT4RANGE)
class Lofar_Array_Long64(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_long64'
value = Column(INT8RANGE)
class Lofar_Array_Short(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_short'
value = Column(INTEGER)
class Lofar_Array_State(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_state'
value = Column(INTEGER)
class Lofar_Array_String(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_string'
value = Column(TEXT)
class Lofar_Array_Uchar(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_uchar'
value = Column(INTEGER)
class Lofar_Array_Ulong(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_ulong'
value = Column(INTEGER)
class Lofar_Array_Ulong64(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_ulong64'
value = Column(INTEGER)
class Lofar_Array_Ushort(Lofar_Array_Attribute):
__tablename__ = 'lofar_array_ushort'
value = Column(INTEGER)
# ----------------- ----------------- ----------------- #
class Attribute(Base):
......
......@@ -44,6 +44,19 @@ def device_name_url(device_name:str, tango_host:str = 'databaseds:10000'):
return f"tango://{tango_host}/{device_name}"
def attribute_name_url(attribute_name:str, tango_host:str = 'databaseds:10000'):
"""
For some operations Tango devices must be transformed from the form 'domain/family/name/attribute'
to 'tango://db:port/domain/family/name/attribute'
"""
if attribute_name.startswith('tango://'):
return attribute_name
if len(attribute_name.split('/')) != 4:
raise ValueError(f"Expected attribute name of format 'domain/family/name/attribute', got {attribute_name}")
return f"tango://{tango_host}/{attribute_name}"
def split_tango_name(tango_fqname:str, tango_type:str):
"""
Helper function to split device or attribute Tango full qualified names
......
#! /usr/bin/env python3
from toolkit.archiver_util import get_db_config, split_tango_name
from tangostationcontrol.toolkit.archiver_util import get_db_config, split_tango_name
from abc import ABC, abstractmethod
from datetime import datetime, timedelta
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment