Example #1
0
class HistoryClient(Client):
    def __init__(self):
        self.__log = None
        self.__log_configured = 0
        Client.__init__(self)
    def configure(self,config):
        set_attribute(self,'minimum_size',100,config,int)
        set_attribute(self,'maximum_size',200,config,int)
        Client.configure(self,config)
    def configuration(self):
        config = Client.configuration(self)
        get_attribute(self,'minimum_size',config,str)
        get_attribute(self,'maximum_size',config,str)
        return config
    def start(self):
        self.__log_configured = 0
        self.__log = TrimmingLog(self.parent.name + '_alarm_history')
        self.register_event(NewAlarmsEvent,self._log_alarms)
        Client.start(self)
    def stop(self):
        self.unregister_event(NewAlarmsEvent)
        Client.stop(self)
        self.__log = None
        self.__log_configured = 0
    def _log_alarms(self,event):
        if self.__log is None:
            raise ENotStarted('History log is None')
        if not self.__log_configured:
            self.__log.configure(event.alarms()[0].field_names(),
                                 self.minimum_size,self.maximum_size)
            self.__log_configured = 1
        for alarm in event:
            self.__log.add_entry(alarm.as_list())
    def newest_alarm_entry(self):
        return self.__log.get_last_record()
    def newest_alarm_values(self):
        return self.__log._get_last_row()
    def newest_alarm(self):
        entry = self.newest_alarm_entry()
        if not entry:
            return None
        alarm = Alarm()
        alarm.from_dictionary(entry)
        return alarm
    def newest_n_alarm_entries(self,count):
        sequence = len(self.__log)
        return self.__log.get_range('_seq',sequence - count,sequence)
    def newest_n_alarm_values(self,count):
        sequence = len(self.__log)
        return self.__log.get_range_values('_seq',sequence - count,sequence)
    def newest_n_alarms(self,count):
        alarms = []
        configs = self.newest_n_alarm_entries(count)
        for config in configs:
            alarm = Alarm()
            alarm.from_dictionary(config)
            alarms.append(alarm)
        return alarms
    def alarm_field_names(self):
        return self.__log.get_column_names()