Skip to content
Snippets Groups Projects
Select Git revision
  • 582e406cd707b1054a40e5204b143e15b428fe34
  • master default protected
  • MAM-56-prepare-update-for-sip-version-3
  • TMSS-1777
  • SDC-545_update_SIP
  • lofar_repo
  • 2.7.1
  • 2.8.0
8 results

feedback.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    CentralLogger.py 3.00 KiB
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """CentralLogger device server receiving logs from SendingDS server"""
    import sys
    import time
    import logging
    from PyTango import server, DeviceProxy, Database, DbDevInfo, DevState, DebugIt, AttrQuality, AttrWriteType, DispLevel 
    from PyTango.server import Device, DeviceMeta, attribute, command, run, device_property
    
    
    """CentralLogger device server class"""
    class CentralLogger(Device):
        __metaclass__ = DeviceMeta
    
        def init_device(self):
            Device.init_device(self)
            self.set_state(DevState.STANDBY)
            self.info_stream("Init CentralLogger Device.")
    
        @command(dtype_in='DevVarLongStringArray', dtype_out=None)
        def SetCentralLoggingLevel(self, element_devices_and_levels):
            CentralLoggingLevel = element_devices_and_levels[0][:]
            CentralLoggingDevice = element_devices_and_levels[1][:]
            i = 0
            while i < len(CentralLoggingLevel[:]):
                self.info_stream("%s,%s", CentralLoggingLevel[i], CentralLoggingDevice[i])
                dev1 = DeviceProxy(CentralLoggingDevice[i])
                dev1.centralLoggingLevel = CentralLoggingLevel[i]
                property_names = ["logging_level",
                                  "logging_target",
                                 ]
                dev_properties = dev1.get_property(property_names)
                dev_properties["logging_level"] = ["DEBUG"]
                dev_properties["logging_target"].append("device::central/cdev/cdev1")
                dev1.put_property(dev_properties)
                dev1.add_logging_target("device::central/cdev/cdev1")
                i+=1
    
        """Logs are received from all element devices at all levels.
           Filtering happens within the log function depending upon
           CentralLoggingLevel of each element device.
           NOTE : This fiteration logic is still under consideration."""
        @command(dtype_in='DevVarStringArray', dtype_out=None)
        def log(self, details):
            cmessage = details[3]
            clevel = details[1]
            tango_log_level = {"FATAL": 1, "ERROR": 2, "WARN": 3, "INFO": 4, "DEBUG": 5}
            level_number = tango_log_level[clevel]
            clogsource = details[2]
            if clogsource == details[2]:
                device = DeviceProxy(clogsource)
                deviceLogLevel = device.centralLoggingLevel
    
                if clevel == "FATAL" and level_number <= deviceLogLevel:
                    self.fatal_stream("%s : %s", clogsource, cmessage)
                elif clevel == "ERROR" and level_number <= deviceLogLevel:
                    self.error_stream("%s : %s", clogsource, cmessage)
                elif clevel == "WARN" and level_number <= deviceLogLevel:
                    self.warn_stream("%s : %s", clogsource, cmessage)
                elif clevel == "INFO" and level_number <= deviceLogLevel:
                    self.info_stream("%s : %s", clogsource, cmessage)
                elif clevel == "DEBUG" and level_number <= deviceLogLevel:
                    self.debug_stream("%s : %s", clogsource, cmessage)
                else:
                    pass
            else:
                pass
    
    run((CentralLogger,))