Select Git revision
-
Mattia Mancini authoredMattia Mancini authored
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,))