Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cs/ds/alarm-handler
  • francesco.tripaldi/alarm-handler
2 results
Show changes
Showing
with 4492 additions and 1915 deletions
docs/images/alarm_ng.png

206 KiB

docs/images/alarm_ng_history.png

78.6 KiB

docs/images/alarm_notify_properties.png

11.7 KiB

docs/images/free_properties.png

68.8 KiB

This diff is collapsed.
......@@ -33,8 +33,7 @@
#ifndef AlarmHandler_H
#define AlarmHandler_H
#include <tango.h>
#include <mysql.h>
#include <tango/tango.h>
#include <boost/version.hpp>
#if BOOST_VERSION >= 103600
......@@ -45,7 +44,9 @@
#include "event_table.h"
#include "SubscribeThread.h"
#define MAX_ALARMS 10000
#define MAX_ALARMS 2000
#define MAX_ATTR_NAME 1000
#define MAX_ATTR_SUMMARY 10000
//#define _USE_ELETTRA_DB_RW
......@@ -60,7 +61,15 @@ class update_thread;
# define ELAPSED(before, after) \
1000.0*(after.tv_sec-before.tv_sec) + \
((double)after.tv_usec-before.tv_usec) / 1000
#ifndef TANGO_LOG
#define TANGO_LOG cout
#endif
#ifndef TANGO_LOG_INFO
#define TANGO_LOG_INFO cout2
#endif
#ifndef TANGO_LOG_DEBUG
#define TANGO_LOG_DEBUG cout4
#endif
/*----- PROTECTED REGION END -----*/ // AlarmHandler.h
......@@ -80,6 +89,7 @@ enum _AlarmStateEnum {
_SHLVD,
_DSUPR,
_OOSRV,
_ERROR,
} ;
typedef _AlarmStateEnum AlarmStateEnum;
......@@ -98,20 +108,31 @@ class AlarmHandler : public TANGO_BASE_CLASS
public:
bool compare_without_domain(string str1, string str2);
string remove_domain(string str);
//TODO: real attributes
Tango::DevLong attr_AttributeStartedNumber_read;
Tango::DevLong attr_AttributePausedNumber_read;
Tango::DevLong attr_AttributeStoppedNumber_read;
Tango::DevLong attr_AttributeNumber_read;
vector<string> normalAlarms_read;
vector<string> unacknowledgedAlarms_read;
vector<string> acknowledgedAlarms_read;
vector<string> unacknowledgedNormalAlarms_read;
vector<string> shelvedAlarms_read;
vector<string> outOfServiceAlarms_read;
vector<string> silencedAlarms_read;
vector<string> listAlarms_read;
string normalAlarms_read[MAX_ALARMS];
string unacknowledgedAlarms_read[MAX_ALARMS];
string acknowledgedAlarms_read[MAX_ALARMS];
string unacknowledgedNormalAlarms_read[MAX_ALARMS];
string shelvedAlarms_read[MAX_ALARMS];
string outOfServiceAlarms_read[MAX_ALARMS];
string silencedAlarms_read[MAX_ALARMS];
string listAlarms_read[MAX_ALARMS];
string alarmSummary_read[MAX_ALARMS];
string eventList_read[MAX_ATTR_SUMMARY];
string eventSummary_read[MAX_ATTR_SUMMARY];
string alarmDisabled_read[MAX_ALARMS];
/* char c_normalAlarms_read[MAX_ALARMS][MAX_ATTR_NAME];
char c_unacknowledgedAlarms_read[MAX_ALARMS][MAX_ATTR_NAME];
char c_acknowledgedAlarms_read[MAX_ALARMS][MAX_ATTR_NAME];
char c_unacknowledgedNormalAlarms_read[MAX_ALARMS][MAX_ATTR_NAME];
char c_shelvedAlarms_read[MAX_ALARMS][MAX_ATTR_NAME];
char c_outOfServiceAlarms_read[MAX_ALARMS][MAX_ATTR_NAME];
char c_silencedAlarms_read[MAX_ALARMS][MAX_ATTR_NAME];
char c_listAlarms_read[MAX_ALARMS][MAX_ATTR_NAME];
#define MAX_SUMMARY 2*MAX_ATTR_NAME //TODO: max summary length!!!
char c_alarmSummary_read[MAX_ALARMS][MAX_SUMMARY];*/
size_t normalAlarms_sz;
size_t unacknowledgedAlarms_sz;
......@@ -121,9 +142,15 @@ public:
size_t outOfServiceAlarms_sz;
size_t silencedAlarms_sz;
size_t listAlarms_sz;
size_t alarmSummary_sz;
size_t eventList_sz;
size_t eventSummary_sz;
size_t alarmDisabled_sz;
double last_statistics_reset_time;
omni_mutex *prepare_alm_mtx;
/*----- PROTECTED REGION END -----*/ // AlarmHandler::Data Members
// Device property data members
......@@ -134,21 +161,29 @@ public:
Tango::DevLong subscribeRetryPeriod;
// StatisticsTimeWindow: Time window to compute statistics in seconds
vector<Tango::DevLong> statisticsTimeWindow;
// ErrorDelay: Delay in seconds before changing to ERROR state after an exception is received.
Tango::DevULong errorDelay;
// SetAlarmQuality: Set alarm attribute quality as computed using quality of attributes in the formula
Tango::DevBoolean setAlarmQuality;
// Attribute data members
public:
Tango::DevBoolean *attr_audibleAlarm_read;
Tango::DevBoolean *attr_alarmAudible_read;
Tango::DevDouble *attr_StatisticsResetTime_read;
Tango::DevString *attr_alarm_read;
Tango::DevString *attr_normalAlarms_read;
Tango::DevString *attr_unacknowledgedAlarms_read;
Tango::DevString *attr_acknowledgedAlarms_read;
Tango::DevString *attr_unacknowledgedNormalAlarms_read;
Tango::DevString *attr_shelvedAlarms_read;
Tango::DevString *attr_outOfServiceAlarms_read;
Tango::DevString *attr_silencedAlarms_read;
Tango::DevString *attr_listAlarms_read;
Tango::DevDouble *attr_frequencyAlarms_read;
Tango::DevString *attr_alarmNormal_read;
Tango::DevString *attr_alarmUnacknowledged_read;
Tango::DevString *attr_alarmAcknowledged_read;
Tango::DevString *attr_alarmUnacknowledgedNormal_read;
Tango::DevString *attr_alarmShelved_read;
Tango::DevString *attr_alarmOutOfService_read;
Tango::DevString *attr_alarmSilenced_read;
Tango::DevString *attr_alarmList_read;
Tango::DevDouble *attr_alarmFrequency_read;
Tango::DevString *attr_alarmSummary_read;
Tango::DevString *attr_eventList_read;
Tango::DevString *attr_eventSummary_read;
Tango::DevString *attr_alarmDisabled_read;
// Constructors and destructors
public:
......@@ -211,14 +246,14 @@ public:
virtual void read_attr_hardware(vector<long> &attr_list);
/**
* Attribute audibleAlarm related methods
* Attribute alarmAudible related methods
* Description: True if there is at least one alarm that needs audible indication on the GUI
*
* Data type: Tango::DevBoolean
* Attr type: Scalar
*/
virtual void read_audibleAlarm(Tango::Attribute &attr);
virtual bool is_audibleAlarm_allowed(Tango::AttReqType type);
virtual void read_alarmAudible(Tango::Attribute &attr);
virtual bool is_alarmAudible_allowed(Tango::AttReqType type);
/**
* Attribute StatisticsResetTime related methods
* Description: Time elapsed in seconds since last Resetstatistics
......@@ -238,86 +273,122 @@ public:
virtual void read_alarm(Tango::Attribute &attr);
virtual bool is_alarm_allowed(Tango::AttReqType type);
/**
* Attribute normalAlarms related methods
* Attribute alarmNormal related methods
* Description: List of alarms in normal state
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_normalAlarms(Tango::Attribute &attr);
virtual bool is_normalAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmNormal(Tango::Attribute &attr);
virtual bool is_alarmNormal_allowed(Tango::AttReqType type);
/**
* Attribute unacknowledgedAlarms related methods
* Attribute alarmUnacknowledged related methods
* Description: List of alarms in unacknowledged state
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_unacknowledgedAlarms(Tango::Attribute &attr);
virtual bool is_unacknowledgedAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmUnacknowledged(Tango::Attribute &attr);
virtual bool is_alarmUnacknowledged_allowed(Tango::AttReqType type);
/**
* Attribute acknowledgedAlarms related methods
* Attribute alarmAcknowledged related methods
* Description: List of alarms in acknowledged state
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_acknowledgedAlarms(Tango::Attribute &attr);
virtual bool is_acknowledgedAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmAcknowledged(Tango::Attribute &attr);
virtual bool is_alarmAcknowledged_allowed(Tango::AttReqType type);
/**
* Attribute unacknowledgedNormalAlarms related methods
* Attribute alarmUnacknowledgedNormal related methods
* Description: List of alarms in unacknowledged normal state
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_unacknowledgedNormalAlarms(Tango::Attribute &attr);
virtual bool is_unacknowledgedNormalAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmUnacknowledgedNormal(Tango::Attribute &attr);
virtual bool is_alarmUnacknowledgedNormal_allowed(Tango::AttReqType type);
/**
* Attribute shelvedAlarms related methods
* Attribute alarmShelved related methods
* Description: List of alarms in shelved state
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_shelvedAlarms(Tango::Attribute &attr);
virtual bool is_shelvedAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmShelved(Tango::Attribute &attr);
virtual bool is_alarmShelved_allowed(Tango::AttReqType type);
/**
* Attribute outOfServiceAlarms related methods
* Attribute alarmOutOfService related methods
* Description: List of alarms in out of service state
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_outOfServiceAlarms(Tango::Attribute &attr);
virtual bool is_outOfServiceAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmOutOfService(Tango::Attribute &attr);
virtual bool is_alarmOutOfService_allowed(Tango::AttReqType type);
/**
* Attribute silencedAlarms related methods
* Attribute alarmSilenced related methods
* Description: List of alarms in silenced state
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_silencedAlarms(Tango::Attribute &attr);
virtual bool is_silencedAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmSilenced(Tango::Attribute &attr);
virtual bool is_alarmSilenced_allowed(Tango::AttReqType type);
/**
* Attribute listAlarms related methods
* Attribute alarmList related methods
* Description: List of all alarms
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_listAlarms(Tango::Attribute &attr);
virtual bool is_listAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmList(Tango::Attribute &attr);
virtual bool is_alarmList_allowed(Tango::AttReqType type);
/**
* Attribute frequencyAlarms related methods
* Attribute alarmFrequency related methods
* Description: List of frequency of evaluation of all alarms
*
* Data type: Tango::DevDouble
* Attr type: Spectrum max = 10000
*/
virtual void read_frequencyAlarms(Tango::Attribute &attr);
virtual bool is_frequencyAlarms_allowed(Tango::AttReqType type);
virtual void read_alarmFrequency(Tango::Attribute &attr);
virtual bool is_alarmFrequency_allowed(Tango::AttReqType type);
/**
* Attribute alarmSummary related methods
* Description:
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_alarmSummary(Tango::Attribute &attr);
virtual bool is_alarmSummary_allowed(Tango::AttReqType type);
/**
* Attribute eventList related methods
* Description: List of all subscribed attributes
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_eventList(Tango::Attribute &attr);
virtual bool is_eventList_allowed(Tango::AttReqType type);
/**
* Attribute eventSummary related methods
* Description:
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_eventSummary(Tango::Attribute &attr);
virtual bool is_eventSummary_allowed(Tango::AttReqType type);
/**
* Attribute alarmDisabled related methods
* Description: List of alarms in out of service or shelved state
*
* Data type: Tango::DevString
* Attr type: Spectrum max = 10000
*/
virtual void read_alarmDisabled(Tango::Attribute &attr);
virtual bool is_alarmDisabled_allowed(Tango::AttReqType type);
// Dynamic attribute methods
public:
......@@ -461,11 +532,18 @@ public:
* Command GetAlarmInfo related method
* Description: Returns the complete attribute info as an array of key=value
*
* @param argin Alarm name
* @param argin Alarm name followed optionally by wanted key names
* @returns Complete attribute info as an array of key=value
*/
virtual Tango::DevVarStringArray *get_alarm_info(Tango::DevString argin);
virtual Tango::DevVarStringArray *get_alarm_info(const Tango::DevVarStringArray *argin);
virtual bool is_GetAlarmInfo_allowed(const CORBA::Any &any);
/**
* Command ReLoadAll related method
* Description: Re Load all alarms.
*
*/
virtual void re_load_all();
virtual bool is_ReLoadAll_allowed(const CORBA::Any &any);
//--------------------------------------------------------
......@@ -501,6 +579,7 @@ private:
ReadersWritersLock *dslock;
int period; //subscribe thread period
map<string, string> saved_alarms;
ReadersWritersLock *savedlock;
static int instanceCounter;
......@@ -513,14 +592,14 @@ private:
#if 0
void init_alarms(map< string,vector<string> > &alarm_events);
#endif
void add_alarm(alarm_t& a, bool starting=false) throw(string&);
void add_event(alarm_t& a, vector<string> &evn) throw(string&);
void add_alarm(alarm_t& a, bool starting=false);
void add_event(alarm_t& a, vector<string> &evn);
#if 0
void subscribe_event(alarm_t& a, EventCallBack& ecb, vector<string> &evn) throw(string&);
void subscribe_event(alarm_t& a, EventCallBack& ecb, vector<string> &evn);
#endif
// void do_alarm(bei_t& e); //gcc 4 problem??
bool remove_alarm(string& s) throw(string&);
//void add_to_database(alarm_t& a) throw(string&);
bool remove_alarm(string& s);
//void add_to_database(alarm_t& a);
void set_internal_alarm(string name, Tango::TimeVal t, string msg, unsigned int count=1);
void load_alarm(string alarm_string, alarm_t &alm, vector<string> &evn);
......@@ -528,17 +607,24 @@ private:
formula_res_t eval_formula(tree_parse_info_t tree, string &attr_values);
void find_event_formula(tree_parse_info_t tree, vector<string> &);
formula_res_t eval_expression(iter_t const& i, string &attr_values, int ev_ind=0); //recursive tree node evaluation
formula_res_t eval_expression(iter_t const& i, string &attr_values, vector< vector<double> > ev_ind={}); //recursive tree node evaluation
void eval_index_range(iter_t const& i, string &attr_values, vector<double> & ind);
void eval_node_event(iter_t const& i, vector<string> & ev); //recursive tree node evaluation
void prepare_alarm_attr(); //for read attribute alarm and push_change_event
void prepare_event_list();
void prepare_event_summary();
void remove_AlarmState_dynamic_attribute_no_clean_db(string attname);
void parse_alarm(string &alarm_string, alarm_t &alm);
SubscribeThread *thread;
public:
void put_signal_property();
bool check_signal_property();
void do_alarm(bei_t& e); //public instead of protected for gcc 4 problem??
bool do_alarm_eval(string alm_name, string ev_name, Tango::TimeVal ts);
void timer_update(); //public instead of protected for gcc 4 problem??
......
<?xml version="1.0" encoding="ASCII"?>
<pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
<classes name="AlarmHandler" pogoRevision="9.4">
<description description="Elettra alarm handler device server" title="Elettra alarm handler device server" sourcePath="/home/graziano/ws/alarmhandler/src" language="Cpp" filestogenerate="XMI file,Code files,Protected Regions" license="GPL" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
<classes name="AlarmHandler" pogoRevision="9.6">
<description description="Elettra alarm handler device server" title="Elettra alarm handler device server" sourcePath="/home/graziano/ws/alarm-handler/src" language="Cpp" filestogenerate="XMI file,Code files,Protected Regions" license="GPL" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
<inheritances classname="Device_4Impl" sourcePath=""/>
<identification contact="at elettra.eu - graziano.scalamera" author="graziano.scalamera" emailDomain="elettra.eu" classFamily="SoftwareSystem" siteSpecific="" platform="Unix Like" bus="Not Applicable" manufacturer="" reference=""/>
</description>
<classProperties name="GroupNames" description="Labels for Group mask, first is for mask 0x00">
<type xsi:type="pogoDsl:StringVectorType"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
</classProperties>
<classProperties name="SubscribeRetryPeriod" description="Retry subscription period in seconds">
<type xsi:type="pogoDsl:IntType"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<DefaultPropValue>30</DefaultPropValue>
</classProperties>
<classProperties name="StatisticsTimeWindow" description="Time window to compute statistics in seconds">
<type xsi:type="pogoDsl:IntVectorType"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<DefaultPropValue>60</DefaultPropValue>
</classProperties>
<classProperties name="ErrorDelay" description="Delay in seconds before changing to ERROR state after an exception is received.">
<type xsi:type="pogoDsl:UIntType"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<DefaultPropValue>30</DefaultPropValue>
</classProperties>
<classProperties name="SetAlarmQuality" description="Set alarm attribute quality as computed using quality of attributes in the formula">
<type xsi:type="pogoDsl:BooleanType"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<DefaultPropValue>false</DefaultPropValue>
</classProperties>
<deviceProperties name="GroupNames" description="Labels for Group mask, first is for mask 0x00">
<type xsi:type="pogoDsl:StringVectorType"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
......@@ -19,6 +43,16 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<DefaultPropValue>60</DefaultPropValue>
</deviceProperties>
<deviceProperties name="ErrorDelay" description="Delay in seconds before changing to ERROR state after an exception is received.">
<type xsi:type="pogoDsl:UIntType"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<DefaultPropValue>30</DefaultPropValue>
</deviceProperties>
<deviceProperties name="SetAlarmQuality" description="Set alarm attribute quality as computed using quality of attributes in the formula">
<type xsi:type="pogoDsl:BooleanType"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<DefaultPropValue>false</DefaultPropValue>
</deviceProperties>
<commands name="State" description="This command gets the device state (stored in its &lt;i>device_state&lt;/i> data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0">
<argin description="none.">
<type xsi:type="pogoDsl:VoidType"/>
......@@ -146,18 +180,27 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
</commands>
<commands name="GetAlarmInfo" description="Returns the complete attribute info as an array of key=value" execMethod="get_alarm_info" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
<argin description="Alarm name">
<type xsi:type="pogoDsl:StringType"/>
<argin description="Alarm name followed optionally by wanted key names">
<type xsi:type="pogoDsl:StringArrayType"/>
</argin>
<argout description="Complete attribute info as an array of key=value">
<type xsi:type="pogoDsl:StringArrayType"/>
</argout>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
</commands>
<attributes name="audibleAlarm" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
<commands name="ReLoadAll" description="Re Load all alarms." execMethod="re_load_all" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
<argin description="">
<type xsi:type="pogoDsl:VoidType"/>
</argin>
<argout description="">
<type xsi:type="pogoDsl:VoidType"/>
</argout>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
</commands>
<attributes name="alarmAudible" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:BooleanType"/>
<changeEvent fire="true" libCheckCriteria="false"/>
<archiveEvent fire="true" libCheckCriteria="false"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
<dataReadyEvent fire="false" libCheckCriteria="true"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="True if there is at least one alarm that needs audible indication on the GUI" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
......@@ -177,7 +220,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="normalAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmNormal" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -185,7 +228,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of alarms in normal state" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="unacknowledgedAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmUnacknowledged" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -193,7 +236,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of alarms in unacknowledged state" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="acknowledgedAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmAcknowledged" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -201,7 +244,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of alarms in acknowledged state" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="unacknowledgedNormalAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmUnacknowledgedNormal" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -209,7 +252,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of alarms in unacknowledged normal state" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="shelvedAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmShelved" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -217,7 +260,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of alarms in shelved state" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="outOfServiceAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmOutOfService" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -225,7 +268,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of alarms in out of service state" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="silencedAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmSilenced" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -233,7 +276,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of alarms in silenced state" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="listAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmList" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -241,7 +284,7 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of all alarms" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="frequencyAlarms" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<attributes name="alarmFrequency" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:DoubleType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
......@@ -249,6 +292,38 @@
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of frequency of evaluation of all alarms" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="alarmSummary" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
<dataReadyEvent fire="false" libCheckCriteria="true"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="eventList" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="false" libCheckCriteria="true"/>
<archiveEvent fire="false" libCheckCriteria="true"/>
<dataReadyEvent fire="false" libCheckCriteria="true"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of all subscribed attributes" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="eventSummary" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="false" libCheckCriteria="true"/>
<archiveEvent fire="false" libCheckCriteria="true"/>
<dataReadyEvent fire="false" libCheckCriteria="true"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<attributes name="alarmDisabled" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="10000" maxY="" allocReadMember="true" isDynamic="false">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
<dataReadyEvent fire="false" libCheckCriteria="true"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="List of alarms in out of service or shelved state" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</attributes>
<dynamicAttributes name="AlarmState" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="true">
<dataType xsi:type="pogoDsl:EnumType"/>
<changeEvent fire="true" libCheckCriteria="true"/>
......@@ -263,15 +338,16 @@
<enumLabels>SHLVD</enumLabels>
<enumLabels>DSUPR</enumLabels>
<enumLabels>OOSRV</enumLabels>
<enumLabels>ERROR</enumLabels>
</dynamicAttributes>
<dynamicAttributes name="AlarmFormula" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="true">
<dataType xsi:type="pogoDsl:StringType"/>
<changeEvent fire="true" libCheckCriteria="false"/>
<archiveEvent fire="true" libCheckCriteria="false"/>
<changeEvent fire="true" libCheckCriteria="true"/>
<archiveEvent fire="true" libCheckCriteria="true"/>
<dataReadyEvent fire="false" libCheckCriteria="true"/>
<status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
<properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
</dynamicAttributes>
<preferences docHome="./doc_html" makefileHome="/usr/local/tango-9.2.5a/share/pogo/preferences"/>
<preferences docHome="./doc_html" makefileHome="/usr/local/tango-9.3.3/share/pogo/preferences"/>
</classes>
</pogoDsl:PogoSystem>
This diff is collapsed.
......@@ -37,7 +37,7 @@
#ifndef AlarmHandlerClass_H
#define AlarmHandlerClass_H
#include <tango.h>
#include <tango/tango.h>
#include <AlarmHandler.h>
......@@ -54,17 +54,17 @@ namespace AlarmHandler_ns
//=========================================
// Define classes for attributes
//=========================================
// Attribute audibleAlarm class definition
class audibleAlarmAttrib: public Tango::Attr
// Attribute alarmAudible class definition
class alarmAudibleAttrib: public Tango::Attr
{
public:
audibleAlarmAttrib():Attr("audibleAlarm",
alarmAudibleAttrib():Attr("alarmAudible",
Tango::DEV_BOOLEAN, Tango::READ) {};
~audibleAlarmAttrib() {};
~alarmAudibleAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_audibleAlarm(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmAudible(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_audibleAlarm_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmAudible_allowed(ty);}
};
// Attribute StatisticsResetTime class definition
......@@ -93,121 +93,173 @@ public:
{return (static_cast<AlarmHandler *>(dev))->is_alarm_allowed(ty);}
};
// Attribute normalAlarms class definition
class normalAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmNormal class definition
class alarmNormalAttrib: public Tango::SpectrumAttr
{
public:
normalAlarmsAttrib():SpectrumAttr("normalAlarms",
alarmNormalAttrib():SpectrumAttr("alarmNormal",
Tango::DEV_STRING, Tango::READ, 10000) {};
~normalAlarmsAttrib() {};
~alarmNormalAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_normalAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmNormal(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_normalAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmNormal_allowed(ty);}
};
// Attribute unacknowledgedAlarms class definition
class unacknowledgedAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmUnacknowledged class definition
class alarmUnacknowledgedAttrib: public Tango::SpectrumAttr
{
public:
unacknowledgedAlarmsAttrib():SpectrumAttr("unacknowledgedAlarms",
alarmUnacknowledgedAttrib():SpectrumAttr("alarmUnacknowledged",
Tango::DEV_STRING, Tango::READ, 10000) {};
~unacknowledgedAlarmsAttrib() {};
~alarmUnacknowledgedAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_unacknowledgedAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmUnacknowledged(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_unacknowledgedAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmUnacknowledged_allowed(ty);}
};
// Attribute acknowledgedAlarms class definition
class acknowledgedAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmAcknowledged class definition
class alarmAcknowledgedAttrib: public Tango::SpectrumAttr
{
public:
acknowledgedAlarmsAttrib():SpectrumAttr("acknowledgedAlarms",
alarmAcknowledgedAttrib():SpectrumAttr("alarmAcknowledged",
Tango::DEV_STRING, Tango::READ, 10000) {};
~acknowledgedAlarmsAttrib() {};
~alarmAcknowledgedAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_acknowledgedAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmAcknowledged(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_acknowledgedAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmAcknowledged_allowed(ty);}
};
// Attribute unacknowledgedNormalAlarms class definition
class unacknowledgedNormalAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmUnacknowledgedNormal class definition
class alarmUnacknowledgedNormalAttrib: public Tango::SpectrumAttr
{
public:
unacknowledgedNormalAlarmsAttrib():SpectrumAttr("unacknowledgedNormalAlarms",
alarmUnacknowledgedNormalAttrib():SpectrumAttr("alarmUnacknowledgedNormal",
Tango::DEV_STRING, Tango::READ, 10000) {};
~unacknowledgedNormalAlarmsAttrib() {};
~alarmUnacknowledgedNormalAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_unacknowledgedNormalAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmUnacknowledgedNormal(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_unacknowledgedNormalAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmUnacknowledgedNormal_allowed(ty);}
};
// Attribute shelvedAlarms class definition
class shelvedAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmShelved class definition
class alarmShelvedAttrib: public Tango::SpectrumAttr
{
public:
shelvedAlarmsAttrib():SpectrumAttr("shelvedAlarms",
alarmShelvedAttrib():SpectrumAttr("alarmShelved",
Tango::DEV_STRING, Tango::READ, 10000) {};
~shelvedAlarmsAttrib() {};
~alarmShelvedAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_shelvedAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmShelved(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_shelvedAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmShelved_allowed(ty);}
};
// Attribute outOfServiceAlarms class definition
class outOfServiceAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmOutOfService class definition
class alarmOutOfServiceAttrib: public Tango::SpectrumAttr
{
public:
outOfServiceAlarmsAttrib():SpectrumAttr("outOfServiceAlarms",
alarmOutOfServiceAttrib():SpectrumAttr("alarmOutOfService",
Tango::DEV_STRING, Tango::READ, 10000) {};
~outOfServiceAlarmsAttrib() {};
~alarmOutOfServiceAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_outOfServiceAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmOutOfService(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_outOfServiceAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmOutOfService_allowed(ty);}
};
// Attribute silencedAlarms class definition
class silencedAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmSilenced class definition
class alarmSilencedAttrib: public Tango::SpectrumAttr
{
public:
silencedAlarmsAttrib():SpectrumAttr("silencedAlarms",
alarmSilencedAttrib():SpectrumAttr("alarmSilenced",
Tango::DEV_STRING, Tango::READ, 10000) {};
~silencedAlarmsAttrib() {};
~alarmSilencedAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_silencedAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmSilenced(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_silencedAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmSilenced_allowed(ty);}
};
// Attribute listAlarms class definition
class listAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmList class definition
class alarmListAttrib: public Tango::SpectrumAttr
{
public:
listAlarmsAttrib():SpectrumAttr("listAlarms",
alarmListAttrib():SpectrumAttr("alarmList",
Tango::DEV_STRING, Tango::READ, 10000) {};
~listAlarmsAttrib() {};
~alarmListAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_listAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmList(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_listAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmList_allowed(ty);}
};
// Attribute frequencyAlarms class definition
class frequencyAlarmsAttrib: public Tango::SpectrumAttr
// Attribute alarmFrequency class definition
class alarmFrequencyAttrib: public Tango::SpectrumAttr
{
public:
frequencyAlarmsAttrib():SpectrumAttr("frequencyAlarms",
alarmFrequencyAttrib():SpectrumAttr("alarmFrequency",
Tango::DEV_DOUBLE, Tango::READ, 10000) {};
~frequencyAlarmsAttrib() {};
~alarmFrequencyAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_frequencyAlarms(att);}
{(static_cast<AlarmHandler *>(dev))->read_alarmFrequency(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_frequencyAlarms_allowed(ty);}
{return (static_cast<AlarmHandler *>(dev))->is_alarmFrequency_allowed(ty);}
};
// Attribute alarmSummary class definition
class alarmSummaryAttrib: public Tango::SpectrumAttr
{
public:
alarmSummaryAttrib():SpectrumAttr("alarmSummary",
Tango::DEV_STRING, Tango::READ, 10000) {};
~alarmSummaryAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_alarmSummary(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_alarmSummary_allowed(ty);}
};
// Attribute eventList class definition
class eventListAttrib: public Tango::SpectrumAttr
{
public:
eventListAttrib():SpectrumAttr("eventList",
Tango::DEV_STRING, Tango::READ, 10000) {};
~eventListAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_eventList(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_eventList_allowed(ty);}
};
// Attribute eventSummary class definition
class eventSummaryAttrib: public Tango::SpectrumAttr
{
public:
eventSummaryAttrib():SpectrumAttr("eventSummary",
Tango::DEV_STRING, Tango::READ, 10000) {};
~eventSummaryAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_eventSummary(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_eventSummary_allowed(ty);}
};
// Attribute alarmDisabled class definition
class alarmDisabledAttrib: public Tango::SpectrumAttr
{
public:
alarmDisabledAttrib():SpectrumAttr("alarmDisabled",
Tango::DEV_STRING, Tango::READ, 10000) {};
~alarmDisabledAttrib() {};
virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
{(static_cast<AlarmHandler *>(dev))->read_alarmDisabled(att);}
virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
{return (static_cast<AlarmHandler *>(dev))->is_alarmDisabled_allowed(ty);}
};
......@@ -545,6 +597,29 @@ public:
{return (static_cast<AlarmHandler *>(dev))->is_GetAlarmInfo_allowed(any);}
};
// Command ReLoadAll class definition
class ReLoadAllClass : public Tango::Command
{
public:
ReLoadAllClass(const char *name,
Tango::CmdArgType in,
Tango::CmdArgType out,
const char *in_desc,
const char *out_desc,
Tango::DispLevel level)
:Command(name,in,out,in_desc,out_desc, level) {};
ReLoadAllClass(const char *name,
Tango::CmdArgType in,
Tango::CmdArgType out)
:Command(name,in,out) {};
~ReLoadAllClass() {};
virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
{return (static_cast<AlarmHandler *>(dev))->is_ReLoadAll_allowed(any);}
};
/**
* The AlarmHandlerClass singleton definition
......@@ -561,6 +636,18 @@ class AlarmHandlerClass : public Tango::DeviceClass
/*----- PROTECTED REGION END -----*/ // AlarmHandlerClass::Additionnal DServer data members
// Class properties data members
public:
// GroupNames: Labels for Group mask, first is for mask 0x00
vector<string> groupNames;
// SubscribeRetryPeriod: Retry subscription period in seconds
Tango::DevLong subscribeRetryPeriod;
// StatisticsTimeWindow: Time window to compute statistics in seconds
vector<Tango::DevLong> statisticsTimeWindow;
// ErrorDelay: Delay in seconds before changing to ERROR state after an exception is received.
Tango::DevULong errorDelay;
// SetAlarmQuality: Set alarm attribute quality as computed using quality of attributes in the formula
Tango::DevBoolean setAlarmQuality;
public:
// write class properties data members
Tango::DbData cl_prop;
......
......@@ -107,6 +107,7 @@ void AlarmHandler::add_AlarmState_dynamic_attribute(string attname)
labels.push_back("SHLVD");
labels.push_back("DSUPR");
labels.push_back("OOSRV");
labels.push_back("ERROR");
alarmstate_prop.set_enum_labels(labels);
}
alarmstate->set_default_properties(alarmstate_prop);
......@@ -127,7 +128,7 @@ void AlarmHandler::add_AlarmState_dynamic_attribute(string attname)
//--------------------------------------------------------
void AlarmHandler::remove_AlarmState_dynamic_attribute(string attname)
{
remove_attribute(attname, true);
remove_attribute(attname, true, Tango::Util::instance()->_UseDb);
map<string,Tango::DevEnum>::iterator ite;
if ((ite=AlarmState_data.find(attname))!=AlarmState_data.end())
{
......@@ -172,8 +173,8 @@ void AlarmHandler::add_AlarmFormula_dynamic_attribute(string attname)
// Not Polled
alarmformula->set_disp_level(Tango::OPERATOR);
// Not Memorized
alarmformula->set_change_event(true, false);
alarmformula->set_archive_event(true, false);
alarmformula->set_change_event(true, true);
alarmformula->set_archive_event(true, true);
char array[1];
array[0] = '\0';
AlarmFormula_data.insert(make_pair(attname, array));
......@@ -188,7 +189,7 @@ void AlarmHandler::add_AlarmFormula_dynamic_attribute(string attname)
//--------------------------------------------------------
void AlarmHandler::remove_AlarmFormula_dynamic_attribute(string attname)
{
remove_attribute(attname, true);
remove_attribute(attname, true, Tango::Util::instance()->_UseDb);
map<string,Tango::DevString>::iterator ite;
if ((ite=AlarmFormula_data.find(attname))!=AlarmFormula_data.end())
{
......
......@@ -46,17 +46,17 @@ namespace AlarmHandler_ns
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_audibleAlarm_allowed()
* Description : Execution allowed for audibleAlarm attribute
* Method : AlarmHandler::is_alarmAudible_allowed()
* Description : Execution allowed for alarmAudible attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_audibleAlarm_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmAudible_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for audibleAlarm attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::audibleAlarmStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmAudible attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmAudibleStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::audibleAlarmStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmAudibleStateAllowed_READ
return true;
}
......@@ -94,145 +94,209 @@ bool AlarmHandler::is_alarm_allowed(TANGO_UNUSED(Tango::AttReqType type))
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_normalAlarms_allowed()
* Description : Execution allowed for normalAlarms attribute
* Method : AlarmHandler::is_alarmNormal_allowed()
* Description : Execution allowed for alarmNormal attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_normalAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmNormal_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for normalAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::normalAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmNormal attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmNormalStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::normalAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmNormalStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_unacknowledgedAlarms_allowed()
* Description : Execution allowed for unacknowledgedAlarms attribute
* Method : AlarmHandler::is_alarmUnacknowledged_allowed()
* Description : Execution allowed for alarmUnacknowledged attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_unacknowledgedAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmUnacknowledged_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for unacknowledgedAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::unacknowledgedAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmUnacknowledged attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmUnacknowledgedStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::unacknowledgedAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmUnacknowledgedStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_acknowledgedAlarms_allowed()
* Description : Execution allowed for acknowledgedAlarms attribute
* Method : AlarmHandler::is_alarmAcknowledged_allowed()
* Description : Execution allowed for alarmAcknowledged attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_acknowledgedAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmAcknowledged_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for acknowledgedAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::acknowledgedAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmAcknowledged attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmAcknowledgedStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::acknowledgedAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmAcknowledgedStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_unacknowledgedNormalAlarms_allowed()
* Description : Execution allowed for unacknowledgedNormalAlarms attribute
* Method : AlarmHandler::is_alarmUnacknowledgedNormal_allowed()
* Description : Execution allowed for alarmUnacknowledgedNormal attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_unacknowledgedNormalAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmUnacknowledgedNormal_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for unacknowledgedNormalAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::unacknowledgedNormalAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmUnacknowledgedNormal attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmUnacknowledgedNormalStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::unacknowledgedNormalAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmUnacknowledgedNormalStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_shelvedAlarms_allowed()
* Description : Execution allowed for shelvedAlarms attribute
* Method : AlarmHandler::is_alarmShelved_allowed()
* Description : Execution allowed for alarmShelved attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_shelvedAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmShelved_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for shelvedAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::shelvedAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmShelved attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmShelvedStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::shelvedAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmShelvedStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_outOfServiceAlarms_allowed()
* Description : Execution allowed for outOfServiceAlarms attribute
* Method : AlarmHandler::is_alarmOutOfService_allowed()
* Description : Execution allowed for alarmOutOfService attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_outOfServiceAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmOutOfService_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for outOfServiceAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::outOfServiceAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmOutOfService attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmOutOfServiceStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::outOfServiceAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmOutOfServiceStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_silencedAlarms_allowed()
* Description : Execution allowed for silencedAlarms attribute
* Method : AlarmHandler::is_alarmSilenced_allowed()
* Description : Execution allowed for alarmSilenced attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_silencedAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmSilenced_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for silencedAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::silencedAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmSilenced attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmSilencedStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::silencedAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmSilencedStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_listAlarms_allowed()
* Description : Execution allowed for listAlarms attribute
* Method : AlarmHandler::is_alarmList_allowed()
* Description : Execution allowed for alarmList attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_listAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmList_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for listAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::listAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmList attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmListStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::listAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmListStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_frequencyAlarms_allowed()
* Description : Execution allowed for frequencyAlarms attribute
* Method : AlarmHandler::is_alarmFrequency_allowed()
* Description : Execution allowed for alarmFrequency attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_frequencyAlarms_allowed(TANGO_UNUSED(Tango::AttReqType type))
bool AlarmHandler::is_alarmFrequency_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for frequencyAlarms attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::frequencyAlarmsStateAllowed_READ) ENABLED START -----*/
// Not any excluded states for alarmFrequency attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmFrequencyStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::frequencyAlarmsStateAllowed_READ
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmFrequencyStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_alarmSummary_allowed()
* Description : Execution allowed for alarmSummary attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_alarmSummary_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for alarmSummary attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmSummaryStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmSummaryStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_eventList_allowed()
* Description : Execution allowed for eventList attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_eventList_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for eventList attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::eventListStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::eventListStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_eventSummary_allowed()
* Description : Execution allowed for eventSummary attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_eventSummary_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for eventSummary attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::eventSummaryStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::eventSummaryStateAllowed_READ
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_alarmDisabled_allowed()
* Description : Execution allowed for alarmDisabled attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_alarmDisabled_allowed(TANGO_UNUSED(Tango::AttReqType type))
{
// Not any excluded states for alarmDisabled attribute in read access.
/*----- PROTECTED REGION ID(AlarmHandler::alarmDisabledStateAllowed_READ) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::alarmDisabledStateAllowed_READ
return true;
}
......@@ -468,6 +532,21 @@ bool AlarmHandler::is_GetAlarmInfo_allowed(TANGO_UNUSED(const CORBA::Any &any))
return true;
}
//--------------------------------------------------------
/**
* Method : AlarmHandler::is_ReLoadAll_allowed()
* Description : Execution allowed for ReLoadAll attribute
*/
//--------------------------------------------------------
bool AlarmHandler::is_ReLoadAll_allowed(TANGO_UNUSED(const CORBA::Any &any))
{
// Not any excluded states for ReLoadAll command.
/*----- PROTECTED REGION ID(AlarmHandler::ReLoadAllStateAllowed) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/ // AlarmHandler::ReLoadAllStateAllowed
return true;
}
/*----- PROTECTED REGION ID(AlarmHandler::AlarmHandlerStateAllowed.AdditionalMethods) ENABLED START -----*/
......
cmake_minimum_required(VERSION 3.2)
# source files
set(SRC_FILES ${SRC_FILES}
${CMAKE_CURRENT_SOURCE_DIR}/AlarmHandler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/AlarmHandlerClass.cpp
${CMAKE_CURRENT_SOURCE_DIR}/AlarmHandlerDynAttrUtils.cpp
${CMAKE_CURRENT_SOURCE_DIR}/AlarmHandlerStateMachine.cpp
${CMAKE_CURRENT_SOURCE_DIR}/alarm_table.cpp
${CMAKE_CURRENT_SOURCE_DIR}/alarm-thread.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ClassFactory.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cmd_thread.cpp
${CMAKE_CURRENT_SOURCE_DIR}/event_table.cpp
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/SubscribeThread.cpp
${CMAKE_CURRENT_SOURCE_DIR}/update-thread.cpp
PARENT_SCOPE)
......@@ -32,7 +32,7 @@
// (Program Obviously used to Generate tango Object)
//=============================================================================
#include <tango.h>
#include <tango/tango.h>
#include <AlarmHandlerClass.h>
// Add class header files if needed
......
static const char *RcsId = "$Header: /home/cvsadm/cvsroot/fermi/servers/hdb++/hdb++es/src/SubscribeThread.cpp,v 1.6 2014-03-06 15:21:43 graziano Exp $";
//+=============================================================================
//
// file : HdbEventHandler.cpp
//
// description : C++ source for thread management
// project : TANGO Device Server
//
// $Author: graziano $
//
// $Revision: 1.6 $
//
// $Log: SubscribeThread.cpp,v $
// Revision 1.6 2014-03-06 15:21:43 graziano
// StartArchivingAtStartup,
// start_all and stop_all,
// archiving of first event received at subscribe
//
// Revision 1.5 2014-02-20 14:59:02 graziano
// name and path fixing
// removed start acquisition from add
//
// Revision 1.4 2013-09-24 08:42:21 graziano
// bug fixing
//
// Revision 1.3 2013-09-02 12:13:22 graziano
// cleaned
//
// Revision 1.2 2013-08-23 10:04:53 graziano
// development
//
// Revision 1.1 2013-07-17 13:37:43 graziano
// *** empty log message ***
//
//
//
// copyleft : European Synchrotron Radiation Facility
// BP 220, Grenoble 38043
// FRANCE
//
//-=============================================================================
#include "AlarmHandler.h"
#include "event_table.h"
......@@ -53,7 +10,7 @@ namespace AlarmHandler_ns
SubscribeThread::SubscribeThread(AlarmHandler *dev):Tango::LogAdapter(dev)
{
alarm_dev = dev;
period = 1;
period = 10; //TODO: configurable
shared = dev->events;
}
//=============================================================================
......@@ -64,22 +21,33 @@ void SubscribeThread::updateProperty()
}
//=============================================================================
//=============================================================================
void SubscribeThread::signal()
{
shared->signal();
}
//=============================================================================
//=============================================================================
void *SubscribeThread::run_undetached(void *ptr)
{
INFO_STREAM << "SubscribeThread id="<<omni_thread::self()->id()<<endl;
while(shared->get_if_stop()==false)
{
// Try to subscribe
usleep(500000); //TODO: try to delay a bit subscribe_events
if(shared->get_if_stop())
break;
DEBUG_STREAM << "SubscribeThread::"<<__func__<<": AWAKE"<<endl;
updateProperty();
alarm_dev->events->subscribe_events();
int nb_to_subscribe = shared->nb_sig_to_subscribe();
shared->check_signal_property(); //check if, while subscribing, new alarms to be saved in properties where added (update action)
// And wait a bit before next time or
// wait a long time if all signals subscribed
{
omni_mutex_lock sync(*shared);
//shared->lock();
if (nb_to_subscribe==0 && shared->action == NOTHING)
int act=shared->action.load();
if (nb_to_subscribe==0 && act == NOTHING)
{
DEBUG_STREAM << "SubscribeThread::"<<__func__<<": going to wait nb_to_subscribe=0"<<endl;
//shared->condition.wait();
......@@ -97,7 +65,7 @@ void *SubscribeThread::run_undetached(void *ptr)
//shared->unlock();
}
}
shared->unsubscribe_events();
//shared->unsubscribe_events();
INFO_STREAM <<"SubscribeThread::"<< __func__<<": exiting..."<<endl;
return NULL;
}
......
//=============================================================================
//
// file : HdbEventHandler.h
//
// description : Include for the HDbDevice class.
//
// project : Tango Device Server
//
// $Author: graziano $
//
// $Revision: 1.5 $
//
// $Log: SubscribeThread.h,v $
// Revision 1.5 2014-03-06 15:21:43 graziano
// StartArchivingAtStartup,
// start_all and stop_all,
// archiving of first event received at subscribe
//
// Revision 1.4 2013-09-24 08:42:21 graziano
// bug fixing
//
// Revision 1.3 2013-09-02 12:11:32 graziano
// cleaned
//
// Revision 1.2 2013-08-23 10:04:53 graziano
// development
//
// Revision 1.1 2013-07-17 13:37:43 graziano
// *** empty log message ***
//
//
//
// copyleft : European Synchrotron Radiation Facility
// BP 220, Grenoble 38043
// FRANCE
//
//=============================================================================
#ifndef _SUBSCRIBE_THREAD_H
#define _SUBSCRIBE_THREAD_H
#include <tango.h>
#include <eventconsumer.h>
#include <tango/tango.h>
#include <stdint.h>
#include "event_table.h"
/**
* @author $Author: graziano $
* @version $Revision: 1.5 $
*/
// constants definitions here.
//-----------------------------------------------
// constants definitions here.
//-----------------------------------------------
namespace AlarmHandler_ns
{
......@@ -82,6 +38,7 @@ public:
int period;
SubscribeThread(AlarmHandler *dev);
void updateProperty();
void signal();
/**
* Execute the thread loop.
* This thread is awaken when a command has been received
......
/*
* alarm-thread.cpp
*
* $Author: claudio $
*
* $Revision: 1.7 $
*
* $Log: alarm-thread.cpp,v $
* Revision 1.7 2015-07-21 13:40:59 claudio
* minor cleanups
*
* Revision 1.6 2013-03-06 10:41:11 claudio
* commented out debug print statements
*
* Revision 1.5 2008-07-08 12:11:39 graziano
* omni_thread_fatal exception handling
*
* Revision 1.4 2008/07/07 09:13:12 graziano
* omni_thread_fatal exception handling
*
* Revision 1.3 2008/04/24 06:51:34 graziano
* small code cleanings
*
*
*
* copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale
* Strada Statale 14 - km 163,5 in AREA Science Park
* 34012 Basovizza, Trieste ITALY
......@@ -36,7 +14,7 @@ static const char __FILE__rev[] = __FILE__ " $Revision: 1.7 $";
*/
alarm_thread::alarm_thread(AlarmHandler_ns::AlarmHandler *p) : p_Alarm(p)
{
//cout << __FILE__rev << endl;
//TANGO_LOG << __FILE__rev << endl;
}
/*
......@@ -56,6 +34,20 @@ void alarm_thread::run(void *)
//int period = 5; //seconds
int awaken = 0;
vector<string> alm_to_be_eval;
bool starting = true;
timespec now;
clock_gettime(CLOCK_MONOTONIC, &now);
double last_eval = (now.tv_sec) + ((double)(now.tv_nsec))/1000000000;
while(starting)
{
starting = Tango::Util::instance()->is_svr_starting();
usleep(200000);
}
alm_to_be_eval = p_Alarm->alarms.to_be_evaluated_list();
to_be_evaluated = alm_to_be_eval.size();
while (true) {
/*
* pop_front() will wait() on condition variable
......@@ -64,39 +56,45 @@ void alarm_thread::run(void *)
{
if(to_be_evaluated > 0)
{
bool changed = true;
int num_changed = 0;
if(alm_to_be_eval.size() > 0)
clock_gettime(CLOCK_MONOTONIC, &now);
double dnow = (now.tv_sec) + ((double)(now.tv_nsec))/1000000000;
if(dnow - last_eval > 10) //TODO: configurable
{
for(vector<string>::iterator i = alm_to_be_eval.begin(); i != alm_to_be_eval.end(); i++)
last_eval = dnow;
bool changed = true;
int num_changed = 0;
if(alm_to_be_eval.size() > 0)
{
changed = p_Alarm->do_alarm_eval(*i, "FORCED_EVAL", gettime());
if(changed)
num_changed++;
}
for(vector<string>::iterator i = alm_to_be_eval.begin(); i != alm_to_be_eval.end(); i++)
{
changed = p_Alarm->do_alarm_eval(*i, "FORCED_EVAL", gettime());
if(changed)
num_changed++;
}
#if 0 //TODO
prepare_alarm_attr();
if(num_changed==0)
return;
if(ds_num == 0)
{
//attr.set_value_date_quality(ds,0/*gettime()*/,Tango::ATTR_WARNING, ds_num, 0, false);
struct timeval now;
gettimeofday(&now,NULL);
push_change_event("alarm",(char**)ds,now,Tango::ATTR_WARNING, ds_num, 0, false);
}
else
//attr.set_value(ds, ds_num, 0, false);
push_change_event("alarm",ds, ds_num, 0, false);
prepare_alarm_attr();
if(num_changed==0)
return;
if(ds_num == 0)
{
//attr.set_value_date_quality(ds,0/*gettime()*/,Tango::ATTR_WARNING, ds_num, 0, false);
struct timeval now;
gettimeofday(&now,NULL);
push_change_event("alarm",(char**)ds,now,Tango::ATTR_WARNING, ds_num, 0, false);
}
else
//attr.set_value(ds, ds_num, 0, false);
push_change_event("alarm",ds, ds_num, 0, false);
#endif
}
#if 0
alm_to_be_eval = p_Alarm->alarms.to_be_evaluated_list();
to_be_evaluated = alm_to_be_eval.size();
}
#if 1
alm_to_be_eval = p_Alarm->alarms.to_be_evaluated_list();
to_be_evaluated = alm_to_be_eval.size();
#else
to_be_evaluated = 0;
to_be_evaluated = 0;
#endif
usleep(200000); //TODO
//usleep(200000); //TODO
}
}
bei_t e;
{
......@@ -122,21 +120,21 @@ void alarm_thread::run(void *)
ostringstream err;
err << "omni_thread_fatal exception running alarm thread, err=" << ex.error << ends;
//WARN_STREAM << "alarm_thread::run(): " << err.str() << endl;
printf("alarm_thread::run(): %s", err.str().c_str());
printf("alarm_thread::run(): %s\n", err.str().c_str());
}
catch(Tango::DevFailed& ex)
{
ostringstream err;
err << "exception running alarm thread: '" << ex.errors[0].desc << "'" << ends;
//WARN_STREAM << "alarm_thread::run(): " << err.str() << endl;
printf("alarm_thread::run(): %s", err.str().c_str());
Tango::Except::print_exception(ex);
printf("alarm_thread::run(): %s\n", err.str().c_str());
//Tango::Except::print_exception(ex);
}
catch(...)
{
//WARN_STREAM << "alarm_thread::run(): catched unknown exception!!" << endl;
printf("alarm_thread::run(): catched unknown exception!!");
printf("alarm_thread::run(): catched unknown exception!!\n");
}
}
//cout << "alarm_thread::run(): returning" << endl;
//TANGO_LOG << "alarm_thread::run(): returning" << endl;
} /* alarm_thread::run() */
/*
* alarm-thread.h
*
* $Author: graziano $
*
* $Revision: 1.3 $
*
* $Log: alarm-thread.h,v $
* Revision 1.3 2008-04-23 15:00:57 graziano
* small code cleanings
*
*
*
* copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale
* Strada Statale 14 - km 163,5 in AREA Science Park
* 34012 Basovizza, Trieste ITALY
......@@ -20,7 +10,7 @@
#define ALARM_THREAD_H
#include <omnithread.h>
#include <tango.h>
#include <tango/tango.h>
#include <AlarmHandler.h>
#define ALARM_THREAD_EXIT "alarm_thread_exit"
......
/*
* alarm_grammar.h
*
* $Author: $
*
* $Revision: $
*
* $Log: alarm_grammar.h,v $
*
*
* copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale
* Strada Statale 14 - km 163,5 in AREA Science Park
* 34012 Basovizza, Trieste ITALY
......@@ -67,29 +60,35 @@
#include "event_table.h"
#include "formula_grammar.h"
#define NAME_KEY "name"
#define NAME_KEY "tag"
#define FORMULA_KEY "formula"
#define ONDELAY_KEY "on_delay"
#define OFFDELAY_KEY "off_delay"
#define LEVEL_KEY "level"
#define SILENT_TIME_KEY "silent_time"
#define LEVEL_KEY "priority"
#define SILENT_TIME_KEY "shlvd_time"
#define GROUP_KEY "group"
#define MESSAGE_KEY "message"
#define URL_KEY "url"
#define ON_COMMAND_KEY "on_command"
#define OFF_COMMAND_KEY "off_command"
#define RECEIVERS_KEY "receivers"
#define ENABLED_KEY "enabled"
#define SILENT_TIME_REMAINING_KEY "silent_time_remaining"
#define SILENT_TIME_REMAINING_KEY "shlvd_end"
#define SHELVED_KEY "shelved"
#define ACKNOWLEDGED_KEY "ack"
#define ATTR_VALUES_KEY "attr_values"
#define VALUE_KEY "value"
#define ATTR_VALUES_KEY "values"
#define VALUE_KEY "state"
#define ON_COUNTER_KEY "on_counter"
#define OFF_COUNTER_KEY "off_counter"
#define COUNTER_KEY "counter"
#define QUALITY_KEY "quality"
#define EXCEPTION_KEY "exception"
#define AUDIBLE_KEY "audible"
#define FREQ_COUNTER_KEY "freq_counter"
#define ALARM_TIME_KEY "time"
#define EVENT_KEY "event"
#define EVENT_TIME_KEY ALARM_TIME_KEY
#define KEY(S_VAL) S_VAL "="
#define SEP ";"
......@@ -220,8 +219,10 @@ struct alarm_parse : public grammar<alarm_parse>
no_node_d[separator] >> no_node_d[silent_time] |
no_node_d[separator] >> no_node_d[group] |
no_node_d[separator] >> no_node_d[msg] |
no_node_d[separator] >> no_node_d[url] |
no_node_d[separator] >> no_node_d[on_command] |
no_node_d[separator] >> no_node_d[off_command] |
no_node_d[separator] >> no_node_d[receivers] |
no_node_d[separator] >> no_node_d[enabled]
;
......@@ -230,7 +231,7 @@ struct alarm_parse : public grammar<alarm_parse>
= alnum_p | '.' | '_' | '-' | '+' //any alpha numeric char plus '.', '_', '-', '+'
;
symbol_attr_name
= alnum_p | '_' //any alpha numeric char plus '_'
= alnum_p | '.' | '_' | '-' //any alpha numeric char plus '_'
;
name
= (+symbol) >> '/' >> (+symbol)
......@@ -244,7 +245,7 @@ struct alarm_parse : public grammar<alarm_parse>
= discard_node_d[str_p(KEY(LEVEL_KEY))] >>
//lexeme_d[(+alnum_p)] //match only possible levels?? (fault, log, ...)
//(+(alnum_p-'\t'))
(str_p("fault") | str_p("warning") | str_p("log"))
(str_p("highest") | str_p("high") | str_p("medium") | str_p("lowest") | str_p("low") | str_p("fault") | str_p("warning") | str_p("log"))//TODO
[
assign_a(self.m_alarm.lev) //save level in alarm_t
]
......@@ -265,15 +266,26 @@ struct alarm_parse : public grammar<alarm_parse>
)
;
//------------------------------MESSAGE--------------------------------------
escChar = (ch_p('\\') | ch_p(';')) >> ch_p(';'); //escaped semicolon: "\;" or ";;"
msg
= discard_node_d[str_p(KEY(MESSAGE_KEY))]
//>> ch_p('"')
>> (+(anychar_p - ';')) //one ore more char except ';'
>> (+(escChar | (anychar_p - ';'))) //one ore more char except ';'
[
assign_a(self.m_alarm.msg)
]
//>> '"'
;
//------------------------------URL--------------------------------------
url
= discard_node_d[str_p(KEY(URL_KEY))]
//>> ch_p('"')
>> (*(escChar | (anychar_p - ';'))) //zero ore more char except ';'
[
assign_a(self.m_alarm.url)
]
//>> '"'
;
//---------------------------ON DELAY----------------------------------------
on_delay
= discard_node_d[str_p(KEY(ONDELAY_KEY))] >>
......@@ -325,6 +337,16 @@ struct alarm_parse : public grammar<alarm_parse>
] //discard_node_d
| epsilon_p)
;
//------------------------------RECEIVERS------------------------------------
receivers
= discard_node_d[str_p(KEY(RECEIVERS_KEY))]
//>> ch_p('"')
>> (*(escChar | (anychar_p - ';'))) //zero ore more char except ';'
[
assign_a(self.m_alarm.receivers)
]
//>> '"'
;
//------------------------------ENABLED----------------------------------------
enabled
= discard_node_d[str_p(KEY(ENABLED_KEY))] >>
......@@ -344,7 +366,7 @@ struct alarm_parse : public grammar<alarm_parse>
rule_t expression, event, option;
rule<typename lexeme_scanner<ScannerT>::type> symbol; //needed to use lexeme_d in rule name
rule<typename lexeme_scanner<ScannerT>::type> symbol_attr_name; //needed to use lexeme_d in rule name
rule_t name, name_alm, val, token, oper, msg, group, level, on_delay, off_delay, silent_time, on_command, off_command, enabled, separator;
rule_t name, name_alm, val, token, oper, msg, url, group, level, on_delay, off_delay, silent_time, on_command, off_command, receivers, enabled, separator,escChar;
formula_grammar formula;
rule_t const&
......
This diff is collapsed.
This diff is collapsed.