Skip to content
Snippets Groups Projects
Select Git revision
  • faa4516eeb7f63b27e07aae6b0bddeaff2fc5e4d
  • main default protected
2 results

power_plot.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ElementLogger.py 3.65 KiB
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """ElementLogger device server receiving logs from another device 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
    
    
    """ElementLogger device server class"""
    class ElementLogger(Device):
        __metaclass__ = DeviceMeta
    
        def init_device(self):
            Device.init_device(self)
            self.__StorageLoggingLevel = 5 #Storage logging level for ElementLogger(Unused currently)
            self.__ElementLoggingLevel = 5 #Element logging level for all Element devices(Unused currently)
            self.set_state(DevState.STANDBY)
            self.info_stream("Init ElementLogger Device.")
    
        @command(dtype_in='DevVarLongStringArray', dtype_out=None)
        def SetStorageLoggingLevel(self, storages):
            StorageLoggingLevel = storages[0][:]
            StorageLoggingDevice = storages[1][:]
            i = 0
            while i < len(StorageLoggingLevel[:]):
                self.info_stream("%s,%s", StorageLoggingLevel[i], StorageLoggingDevice[i])
                dev1 = DeviceProxy(StorageLoggingDevice[i])
                dev1.storageLoggingLevel = StorageLoggingLevel[i]
                i+=1
    
        @command(dtype_in='DevVarLongStringArray', dtype_out=None)
        def SetElementLoggingLevel(self, element_devices_and_levels):
            ElementLoggingLevel = element_devices_and_levels[0][:]
            ElementLoggingDevice = element_devices_and_levels[1][:]
            i = 0
            while i < len(ElementLoggingLevel[:]):
                self.info_stream("%s,%s", ElementLoggingLevel[i], ElementLoggingDevice[i])
                dev1 = DeviceProxy(ElementLoggingDevice[i])
                dev1.elementLoggingLevel = ElementLoggingLevel[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::ellogger/elem/elem1")
                dev1.put_property(dev_properties)
                dev1.add_logging_target("device::ellogger/elem/elem1")
                i+=1
            
        """Logs are received from all element devices at all levels.
           Filteration happens within the log function depending upon
           ElementLoggingLevel of each element device.
           NOTE : This fiteration logic is still under consideration."""
        @command(dtype_in='DevVarStringArray', dtype_out=None)
        def log(self, details):
    	message = details[3]
            level = details[1]
            tango_log_level = {"FATAL":1,"ERROR":2,"WARN":3,"INFO":4,"DEBUG":5}
            level_number = tango_log_level[level]
            logsource = details[2]
            if logsource == details[2]:
                device = DeviceProxy(logsource)
                deviceLogLevel = device.elementLoggingLevel
                if level == "FATAL" and level_number <= deviceLogLevel:
                    self.fatal_stream("%s : %s",logsource, message)
                elif level == "ERROR" and level_number <= deviceLogLevel:
                    self.error_stream("%s : %s",logsource, message)
                elif level == "WARN" and level_number <= deviceLogLevel:
                    self.warn_stream("%s : %s",logsource, message)
                elif level == "INFO" and level_number <= deviceLogLevel:
                    self.info_stream("%s : %s",logsource, message)
                elif level == "DEBUG" and level_number <= deviceLogLevel: 
                    self.debug_stream("%s : %s",logsource, message)
                else:
                    pass
            else:
                pass
    
    run((ElementLogger,))