Newer
Older
# -*- coding: utf-8 -*-
#
#
#
#
# Distributed under the terms of the APACHE license.
# See LICENSE.txt for more info.
"""
# PyTango imports
from tango.server import run
from tango.server import device_property
from tango import AttrWriteType
# Additional import

Jan David Mol
committed
from clients.sst_client import sst_client, SST_collector
from util.attribute_wrapper import attribute_wrapper
from util.hardware_device import hardware_device

Jan David Mol
committed
from util.lofar_git import get_version
from util.lofar_logging import device_logging_to_python, log_exceptions
import numpy

Jan David Mol
committed
__all__ = ["Statistics", "main"]

Jan David Mol
committed
@device_logging_to_python({"device": "Statistics"})
class Statistics(hardware_device):
# -----------------
# Device Properties
# -----------------
SST_Port = device_property(
mandatory=True
)
# ----------
# Attributes
# ----------

Jan David Mol
committed
version_R = attribute(dtype = str, access = AttrWriteType.READ, fget = lambda self: get_version())
# SST client annotation consists of a dict that contains the parameter name that needs to be read.
# Example: comms_annotation={"parameter": "this_value_R"}

Jan David Mol
committed
nof_packets_R = attribute_wrapper(comms_annotation={"parameter": "nof_packets"}, datatype=numpy.uint64)
last_packet_timestamp_R = attribute_wrapper(comms_annotation={"parameter": "last_packet_timestamp"}, datatype=numpy.uint64)
queue_fill_percentage_R = attribute_wrapper(comms_annotation={"parameter": "queue_fill_percentage"}, datatype=numpy.float32)
nof_invalid_packets_R = attribute_wrapper(comms_annotation={"parameter": "nof_invalid_packets"}, datatype=numpy.uint64)
nof_valid_packets_R = attribute_wrapper(comms_annotation={"parameter": "nof_invalid_packets"}, dims=(SST_collector.MAX_INPUTS,), datatype=numpy.uint64)
nof_payload_errors_R = attribute_wrapper(comms_annotation={"parameter": "nof_payload_errors"}, dims=(SST_collector.MAX_INPUTS,), datatype=numpy.uint64)
last_value_R = attribute_wrapper(comms_annotation={"parameter": "last_values"}, dims=(SST_collector.MAX_INPUTS, SST_collector.MAX_SUBBANDS), datatype=numpy.uint64)
last_timestamp_R = attribute_wrapper(comms_annotation={"parameter": "last_timestamps"}, dims=(SST_collector.MAX_INPUTS,), datatype=numpy.uint64)
integration_interval_R = attribute_wrapper(comms_annotation={"parameter": "integration_intervals"}, dims=(SST_collector.MAX_INPUTS,), datatype=numpy.float32)
# --------
# overloaded functions
def configure_for_off(self):
""" user code here. is called when the state is set to OFF """
# Stop keep-alive
try:
except Exception as e:
self.warn_stream("Exception while stopping sst_client in configure_for_off function: {}. Exception ignored".format(e))
@log_exceptions()
def configure_for_initialise(self):
""" user code here. is called when the sate is set to INIT """
"""Initialises the attributes and properties of the statistics device."""
self.sst_client = sst_client("0.0.0.0", self.SST_Port, self.Fault, self)
# map an access helper class
for i in self.attr_list():
try:
i.set_comm_client(self.sst_client)
except Exception as e:
# use the pass function instead of setting read/write fails
i.set_pass_func()
self.warn_stream("error while setting the sst attribute {} read/write function. {}. using pass function instead".format(i, e))
pass
self.sst_client.start()
# --------
# Commands
# --------
# ----------
# Run server
# ----------
def main(args=None, **kwargs):

Jan David Mol
committed
return run((Statistics,), args=args, **kwargs)
if __name__ == '__main__':
main()