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 2776 additions and 241 deletions
This diff is collapsed.
/* /*
* event_table.h * event_table.h
* *
* $Author: graziano $
*
* $Revision: 1.2 $
*
* $Log: event_table.h,v $
*
*
* copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale * copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale
* Strada Statale 14 - km 163,5 in AREA Science Park * Strada Statale 14 - km 163,5 in AREA Science Park
* 34012 Basovizza, Trieste ITALY * 34012 Basovizza, Trieste ITALY
...@@ -19,8 +12,8 @@ ...@@ -19,8 +12,8 @@
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <map> #include <map>
#include <atomic>
#include <tango.h> #include <tango/tango.h>
using namespace std; using namespace std;
...@@ -28,10 +21,25 @@ using namespace std; ...@@ -28,10 +21,25 @@ using namespace std;
#define INTERNAL_ERROR "internal_error" #define INTERNAL_ERROR "internal_error"
#define TYPE_TANGO_ERR -2 #define TYPE_TANGO_ERR -2
#define TYPE_GENERIC_ERR -3 #define TYPE_GENERIC_ERR -3
#define SUB_ERR -1 #define SUB_ERR -1
#define NOTHING 0 constexpr int NOTHING = 0;
#define UPDATE_PROP 1 constexpr int UPDATE_PROP = 1;
class alarm_list {
public:
alarm_list(void) {}
alarm_list(const alarm_list& la) {l_alarm = la.l_alarm;}
~alarm_list(void) {}
void push(string& a);
void pop(const string &a);
void clear(void);
list<string> show(void);
bool empty();
alarm_list& operator=(const alarm_list& other) {if (this != &other) {l_alarm = other.l_alarm;} return *this;}
protected:
list<string> l_alarm;
omni_mutex l;
};
class event; class event;
class event_list; class event_list;
...@@ -50,8 +58,7 @@ class event { ...@@ -50,8 +58,7 @@ class event {
string attname; string attname;
value_t value; /* event value */ value_t value; /* event value */
string value_string; //added for DevString attributes string value_string; //added for DevString attributes
int quality; int quality{Tango::ATTR_INVALID};
//Tango::DevErrorList errors;
string ex_reason; string ex_reason;
string ex_desc; string ex_desc;
string ex_origin; string ex_origin;
...@@ -59,13 +66,12 @@ class event { ...@@ -59,13 +66,12 @@ class event {
int type, /* attribute data type */ int type, /* attribute data type */
read_size, /* attribute size of read part */ read_size, /* attribute size of read part */
counter, /* molteplicita' */ counter, /* molteplicita' */
err_counter; /* molteplicita' errore */ err_counter; /* molteplicita' errore */
//map<string, string> m_alarm; long dim_x, dim_y;
vector<string> m_alarm; alarm_list m_alarm;
bool valid; //TODO: old bool valid; //TODO: old
bool first;//TODO: new bool first;//TODO: new
bool first_err;//TODO: new bool first_err;//TODO: new
//Tango::DeviceProxy *dp;
Tango::AttributeProxy *attr; Tango::AttributeProxy *attr;
Tango::DevState evstate; Tango::DevState evstate;
unsigned int event_id; unsigned int event_id;
...@@ -89,8 +95,8 @@ class event { ...@@ -89,8 +95,8 @@ class event {
event(string& s); event(string& s);
event() {} event() {}
~event() {} ~event() {}
void push_alarm(string& n); //void push_alarm(string& n);
void pop_alarm(string& n); //void pop_alarm(string& n);
// bool event::operator==(const event& e); //TODO: gcc 4 problem?? // bool event::operator==(const event& e); //TODO: gcc 4 problem??
bool operator==(const event& e); bool operator==(const event& e);
// bool event::operator==(const string& s); //TODO: gcc 4 problem?? // bool event::operator==(const string& s); //TODO: gcc 4 problem??
...@@ -111,6 +117,8 @@ typedef struct basic_event_info_s { ...@@ -111,6 +117,8 @@ typedef struct basic_event_info_s {
string ex_origin; string ex_origin;
int type; int type;
int read_size; int read_size;
long dim_x;
long dim_y;
Tango::TimeVal ts; Tango::TimeVal ts;
string msg; string msg;
} bei_t; } bei_t;
...@@ -141,15 +149,16 @@ class event_list : public omni_mutex { ...@@ -141,15 +149,16 @@ class event_list : public omni_mutex {
class event_table : public Tango::TangoMonitor, public Tango::LogAdapter { class event_table : public Tango::TangoMonitor, public Tango::LogAdapter {
public: public:
event_table(Tango::DeviceImpl *s);//:Tango::LogAdapter(s) {mydev = s;} event_table(Tango::DeviceImpl *s);//:Tango::LogAdapter(s) {mydev = s;}
~event_table(void) {} ~event_table(void) {stop_thread();}
//void push_back(event e); //void push_back(event e);
void show(void); void show(list<string> &evl);
void summary(list<string> &evs);
unsigned int size(void); unsigned int size(void);
#if 0 #if 0
void init_proxy(void) throw(vector<string> &); void init_proxy(void) throw(vector<string> &);
void free_proxy(void); void free_proxy(void);
void subscribe(EventCallBack& ecb) throw(vector<string> &);//throw(string&); void subscribe(EventCallBack& ecb);
void unsubscribe(void) throw(string&); void unsubscribe(void);
#endif #endif
/** /**
* Add a new signal. * Add a new signal.
...@@ -172,6 +181,7 @@ class event_table : public Tango::TangoMonitor, public Tango::LogAdapter { ...@@ -172,6 +181,7 @@ class event_table : public Tango::TangoMonitor, public Tango::LogAdapter {
* build a list of signal to set HDB device property * build a list of signal to set HDB device property
*/ */
void put_signal_property(); void put_signal_property();
void check_signal_property();
bool is_initialized(); bool is_initialized();
bool get_if_stop(); bool get_if_stop();
void stop_thread(); void stop_thread();
...@@ -179,7 +189,7 @@ class event_table : public Tango::TangoMonitor, public Tango::LogAdapter { ...@@ -179,7 +189,7 @@ class event_table : public Tango::TangoMonitor, public Tango::LogAdapter {
ReadersWritersLock veclock; ReadersWritersLock veclock;
bool stop_it; bool stop_it;
bool initialized; bool initialized;
int action; atomic_int action;
private: private:
Tango::DeviceImpl *mydev; Tango::DeviceImpl *mydev;
}; /* class event_table */ }; /* class event_table */
...@@ -195,7 +205,7 @@ class EventCallBack : public Tango::CallBack, public Tango::LogAdapter ...@@ -195,7 +205,7 @@ class EventCallBack : public Tango::CallBack, public Tango::LogAdapter
~EventCallBack(void); ~EventCallBack(void);
void push_event(Tango::EventData* ev); void push_event(Tango::EventData* ev);
//void init(event_list* e); //void init(event_list* e);
void extract_values(Tango::DeviceAttribute *attr_value, vector<double> &val, string &val_string, int &type, int &read_size); void extract_values(Tango::DeviceAttribute *attr_value, vector<double> &val, string &val_string, int &type, int &read_size, long &dim_x, long &dim_y);
private: private:
//event_list* e_ptr; //event_list* e_ptr;
Tango::DeviceImpl *mydev; Tango::DeviceImpl *mydev;
......
/* /*
* formula_grammar.h * formula_grammar.h
* *
* $Author: graziano $
*
* $Revision: 1.5 $
*
* $Log: formula_grammar.h,v $
*
*
* copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale * copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale
* Strada Statale 14 - km 163,5 in AREA Science Park * Strada Statale 14 - km 163,5 in AREA Science Park
* 34012 Basovizza, Trieste ITALY * 34012 Basovizza, Trieste ITALY
...@@ -92,7 +85,7 @@ enum _AlarmStateEnum { ...@@ -92,7 +85,7 @@ enum _AlarmStateEnum {
_ERROR _ERROR
} ; } ;
static vector<string> quality_labels; static vector<string> quality_labels = {"ATTR_VALID","ATTR_INVALID","ATTR_ALARM","ATTR_CHANGING","ATTR_WARNING"};
struct formula_grammar : public grammar<formula_grammar> struct formula_grammar : public grammar<formula_grammar>
{ {
...@@ -132,6 +125,8 @@ struct formula_grammar : public grammar<formula_grammar> ...@@ -132,6 +125,8 @@ struct formula_grammar : public grammar<formula_grammar>
static const int val_qualityID = 23; static const int val_qualityID = 23;
static const int val_alarm_enum_stID = 24; static const int val_alarm_enum_stID = 24;
static const int propertyID = 25; static const int propertyID = 25;
static const int index_rangeID = 26;
static const int index_listID = 27;
symbols<unsigned int> tango_states; symbols<unsigned int> tango_states;
...@@ -156,16 +151,11 @@ struct formula_grammar : public grammar<formula_grammar> ...@@ -156,16 +151,11 @@ struct formula_grammar : public grammar<formula_grammar>
tango_states.add("DISABLE", (unsigned int)Tango::DISABLE); tango_states.add("DISABLE", (unsigned int)Tango::DISABLE);
tango_states.add("UNKNOWN", (unsigned int)Tango::UNKNOWN); tango_states.add("UNKNOWN", (unsigned int)Tango::UNKNOWN);
quality_labels.push_back("ATTR_VALID"); attr_quality.add("ATTR_VALID", (unsigned int)Tango::ATTR_VALID);
attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_VALID); attr_quality.add("ATTR_INVALID", (unsigned int)Tango::ATTR_INVALID);
quality_labels.push_back("ATTR_INVALID"); attr_quality.add("ATTR_ALARM", (unsigned int)Tango::ATTR_ALARM);
attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_INVALID); attr_quality.add("ATTR_CHANGING", (unsigned int)Tango::ATTR_CHANGING);
quality_labels.push_back("ATTR_ALARM"); attr_quality.add("ATTR_WARNING", (unsigned int)Tango::ATTR_WARNING);
attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_ALARM);
quality_labels.push_back("ATTR_CHANGING");
attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_CHANGING);
quality_labels.push_back("ATTR_WARNING");
attr_quality.add(quality_labels.back().c_str(), (unsigned int)Tango::ATTR_WARNING);
alarm_enum_states.add("NORM", (unsigned int)_NORM); alarm_enum_states.add("NORM", (unsigned int)_NORM);
...@@ -203,7 +193,7 @@ struct formula_grammar : public grammar<formula_grammar> ...@@ -203,7 +193,7 @@ struct formula_grammar : public grammar<formula_grammar>
= (alnum_p | '.' | '_' | '-' | '+') //any alpha numeric char plus '.', '_', '-' = (alnum_p | '.' | '_' | '-' | '+') //any alpha numeric char plus '.', '_', '-'
; ;
symbol_attr symbol_attr
= (alnum_p | '_' ) //any alpha numeric char plus '_' for attribute names = (alnum_p | '_' | '.') - str_p(".normal") - str_p(".alarm") - str_p(".quality") //any alpha numeric char plus '_', '.' for attribute names
; ;
//------------------------------ALARM NAME-------------------------------------- //------------------------------ALARM NAME--------------------------------------
name name
...@@ -219,9 +209,18 @@ struct formula_grammar : public grammar<formula_grammar> ...@@ -219,9 +209,18 @@ struct formula_grammar : public grammar<formula_grammar>
] ]
] ]
// = repeat_p(3)[(+symbol) >> ch_p('/')] >> (+symbol) // = repeat_p(3)[(+symbol) >> ch_p('/')] >> (+symbol)
; ;
index_range
=
( uint_p >> !(discard_node_d[ch_p('-')] >> uint_p)) // n or n-m
;
index_list
= (index_range >> *(discard_node_d[ch_p(',')] >> index_range)) // n-m,k,s-t,..
;
index index
= inner_node_d[ch_p('[') >> uint_p >> ch_p(']')] = discard_node_d[ch_p('[')] >>
(str_p("-1") | index_list) >>
discard_node_d[ch_p(']')]
; ;
property property
= str_p(".quality") = str_p(".quality")
...@@ -275,8 +274,8 @@ struct formula_grammar : public grammar<formula_grammar> ...@@ -275,8 +274,8 @@ struct formula_grammar : public grammar<formula_grammar>
event_ event_
= name = name
>> !( (index) >> ( *(index)//0 or more indexex
| (property) >> !(property) //followed by 0 or 1 property
) )
; ;
...@@ -411,6 +410,8 @@ struct formula_grammar : public grammar<formula_grammar> ...@@ -411,6 +410,8 @@ struct formula_grammar : public grammar<formula_grammar>
rule<ScannerT, parser_context<>, parser_tag<expr_atomID> > expr_atom; rule<ScannerT, parser_context<>, parser_tag<expr_atomID> > expr_atom;
rule<ScannerT, parser_context<>, parser_tag<funcID> > function; rule<ScannerT, parser_context<>, parser_tag<funcID> > function;
rule<ScannerT, parser_context<>, parser_tag<nameID> > name; rule<ScannerT, parser_context<>, parser_tag<nameID> > name;
rule<ScannerT, parser_context<>, parser_tag<index_rangeID> > index_range;
rule<ScannerT, parser_context<>, parser_tag<index_listID> > index_list;
rule<ScannerT, parser_context<>, parser_tag<indexID> > index; rule<ScannerT, parser_context<>, parser_tag<indexID> > index;
rule<ScannerT, parser_context<>, parser_tag<val_stringID> > val_string; rule<ScannerT, parser_context<>, parser_tag<val_stringID> > val_string;
rule<ScannerT, parser_context<>, parser_tag<func_dualID> > function_dual; rule<ScannerT, parser_context<>, parser_tag<func_dualID> > function_dual;
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
// This file is generated by POGO // This file is generated by POGO
// (Program Obviously used to Generate tango Object) // (Program Obviously used to Generate tango Object)
//============================================================================= //=============================================================================
#include <tango.h> #include <tango/tango.h>
// Check if crash reporting is used. // Check if crash reporting is used.
#if defined(ENABLE_CRASH_REPORT) #if defined(ENABLE_CRASH_REPORT)
...@@ -43,8 +43,15 @@ ...@@ -43,8 +43,15 @@
DECLARE_CRASH_HANDLER; DECLARE_CRASH_HANDLER;
#ifndef TANGO_LOG
#define TANGO_LOG cout
#endif
int main(int argc,char *argv[]) int main(int argc,char *argv[])
{ {
using std::endl;
using std::bad_alloc;
INSTALL_CRASH_HANDLER INSTALL_CRASH_HANDLER
try try
{ {
...@@ -59,20 +66,20 @@ int main(int argc,char *argv[]) ...@@ -59,20 +66,20 @@ int main(int argc,char *argv[])
// Run the endless loop // Run the endless loop
//---------------------------------------- //----------------------------------------
cout << "Ready to accept request" << endl; TANGO_LOG << "Ready to accept request" << endl;
tg->server_run(); tg->server_run();
} }
catch (bad_alloc &) catch (bad_alloc &)
{ {
cout << "Can't allocate memory to store device object !!!" << endl; TANGO_LOG << "Can't allocate memory to store device object !!!" << endl;
cout << "Exiting" << endl; TANGO_LOG << "Exiting" << endl;
} }
catch (CORBA::Exception &e) catch (CORBA::Exception &e)
{ {
Tango::Except::print_exception(e); Tango::Except::print_exception(e);
cout << "Received a CORBA_Exception" << endl; TANGO_LOG << "Received a CORBA_Exception" << endl;
cout << "Exiting" << endl; TANGO_LOG << "Exiting" << endl;
} }
Tango::Util::instance()->server_cleanup(); Tango::Util::instance()->server_cleanup();
return(0); return(0);
......
/* /*
* update-thread.cpp * update-thread.cpp
*
* $Author: claudio $
*
* $Revision: 1.2 $
*
* $Log: update-thread.cpp,v $
* Revision 1.2 2013-03-06 10:38:43 claudio
* commented out debug print statements
*
* Revision 1.1 2008-11-10 10:54:09 graziano
* thread for update of alarms with time threshold > 0
*
*
*
*
* copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale
* Strada Statale 14 - km 163,5 in AREA Science Park
* 34012 Basovizza, Trieste ITALY
*/ */
#include "update-thread.h" #include "update-thread.h"
...@@ -26,9 +8,9 @@ static const char __FILE__rev[] = __FILE__ " $Revision: 1.2 $"; ...@@ -26,9 +8,9 @@ static const char __FILE__rev[] = __FILE__ " $Revision: 1.2 $";
/* /*
* alarm_thread::alarm_thread() * alarm_thread::alarm_thread()
*/ */
update_thread::update_thread(AlarmHandler_ns::AlarmHandler *p) : p_Alarm(p) update_thread::update_thread(AlarmHandler_ns::AlarmHandler *p) : p_Alarm(p),Tango::LogAdapter(p)
{ {
//cout << __FILE__rev << endl; //TANGO_LOG << __FILE__rev << endl;
} }
/* /*
...@@ -36,6 +18,7 @@ update_thread::update_thread(AlarmHandler_ns::AlarmHandler *p) : p_Alarm(p) ...@@ -36,6 +18,7 @@ update_thread::update_thread(AlarmHandler_ns::AlarmHandler *p) : p_Alarm(p)
*/ */
update_thread::~update_thread() update_thread::~update_thread()
{ {
DEBUG_STREAM << __func__ << "update_thread::~update_thread(): entering!" << endl;
p_Alarm = NULL; p_Alarm = NULL;
} }
...@@ -44,6 +27,7 @@ update_thread::~update_thread() ...@@ -44,6 +27,7 @@ update_thread::~update_thread()
*/ */
void update_thread::run(void *) void update_thread::run(void *)
{ {
DEBUG_STREAM << __func__ << "update_thread::run(): entering!" << endl;
//printf("update_thread::run(): running...\n"); //printf("update_thread::run(): running...\n");
unsigned int pausasec, pausanano; unsigned int pausasec, pausanano;
pausasec=1; pausasec=1;
...@@ -52,14 +36,23 @@ void update_thread::run(void *) ...@@ -52,14 +36,23 @@ void update_thread::run(void *)
while (!p_Alarm->abortflag) { while (!p_Alarm->abortflag) {
try try
{ {
omni_thread::sleep(pausasec,pausanano); //omni_thread::sleep(pausasec,pausanano);
p_Alarm->timer_update(); abort_sleep(pausasec+(double)pausanano/1000000000);
if(!p_Alarm->abortflag)
p_Alarm->timer_update();
//printf("update_thread::run(): TIMER!!\n"); //printf("update_thread::run(): TIMER!!\n");
} }
catch(...) catch(...)
{ {
printf("update_thread::run(): catched unknown exception!!\n"); INFO_STREAM << "update_thread::run(): catched unknown exception!!";
} }
} }
//cout << "update_thread::run(): exiting!" << endl; DEBUG_STREAM << "update_thread::run(): exiting!" << endl;
} /* update_thread::run() */ } /* update_thread::run() */
void update_thread::abort_sleep(double time)
{
omni_mutex_lock sync(*this);
long time_millis = (long)(time*1000);
int res = wait(time_millis);
}
/* /*
* alarm-thread.h * update-thread.h
*
* $Author: graziano $
*
* $Revision: 1.1 $
*
* $Log: update-thread.h,v $
* Revision 1.1 2008-11-10 10:54:09 graziano
* thread for update of alarms with time threshold > 0
*
*
*
*
* copyleft: Sincrotrone Trieste S.C.p.A. di interesse nazionale
* Strada Statale 14 - km 163,5 in AREA Science Park
* 34012 Basovizza, Trieste ITALY
*/ */
#ifndef UPDATE_THREAD_H #ifndef UPDATE_THREAD_H
#define UPDATE_THREAD_H #define UPDATE_THREAD_H
#include <omnithread.h> #include <omnithread.h>
#include <tango.h> #include <tango/tango.h>
#include <AlarmHandler.h> #include <AlarmHandler.h>
class update_thread : public omni_thread { class update_thread : public omni_thread, public Tango::TangoMonitor, public Tango::LogAdapter {
public: public:
update_thread(AlarmHandler_ns::AlarmHandler *p); update_thread(AlarmHandler_ns::AlarmHandler *p);
~update_thread(); ~update_thread();
protected: protected:
void run(void *); void run(void *);
private: private:
void abort_sleep(double time);
AlarmHandler_ns::AlarmHandler *p_Alarm; AlarmHandler_ns::AlarmHandler *p_Alarm;
}; };
......
cmake_minimum_required(VERSION 3.2)
project(test NONE)
include(ExternalProject)
ExternalProject_Add(testdevice
SOURCE_DIR ${CMAKE_SOURCE_DIR}/test/testdevice
# PREFIX ${CMAKE_BINARY_DIR}
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}"
# INSTALL_DIR ${CMAKE_BINARY_DIR}
# BINARY_DIR ${CMAKE_BINARY_DIR}
# STEP_TARGETS build
# EXCLUDE_FROM_ALL TRUE
)
ExternalProject_Get_property(testdevice SOURCE_DIR)
message("Source dir of testdevice = ${SOURCE_DIR}")
ExternalProject_Get_property(testdevice INSTALL_DIR)
message("Install dir of testdevice = ${INSTALL_DIR}")
ExternalProject_Get_property(testdevice BINARY_DIR)
message("Binary dir of testdevice = ${BINARY_DIR}")
ExternalProject_Get_property(testdevice CMAKE_ARGS)
message("CMqke args for testdevice = ${CMAKE_ARGS}")
#ExternalProject_Get_property(testdevice PREFIX)
#message("Prefix dir of testdevice = ${PREFIX}")
{
"_version": 1,
"_source": "ConfigInjectorDiag.xls",
"_title": "hdbpp mysql innodb test",
"_date": "2020-07-07 14:45:04",
"servers": {
"alarm-handler-srv/01": {
"AlarmHandler": {
"alarm/handler/01": {
"properties": {
},
"attribute_properties": {
}
}
}
},
"testdevice-srv/01": {
"TestDevice": {
"alarm/test/01": {
"properties": {
"Attr_config": [
"condition:bool:0:0.0"
]
},
"attribute_properties": {
}
}
}
}
},
"classes": {
"AlarmHandler": {
"properties": {
"GroupNames": ["gr_none","gr_test"],
"StatisticsTimeWindow": ["60"],
"SubscribeRetryPeriod": ["30"]
}
},
"TestDevice": {
"properties": {
}
}
}
}
#!/usr/bin/python
#
import sys,re
#import PyTango
from PyTango import *
import time
import string
if __name__ == "__main__":
Device = False
Conf = False
File = False
conflist = []
#PrepareState = False
for arg in sys.argv:
word = '([a-z0-9._\-\*]*)'
wordpath = '([a-z0-9._\-\*/]*)'
m = re.compile("--device=" + word + "/{0,1}" + word + "/{0,1}" + word).match(arg.lower())
if m is not None:
#print m.groups()
domain = m.groups()[0]
family = m.groups()[1]
member = m.groups()[2]
if domain == '':
domain = '*'
if family == '':
family = '*'
if member == '':
member = '*'
Device = True
#formula = '([a-z0-9._,\*,\-,\|,\/,\",\s,\t]*)'
formula = '(.*)'
m = re.compile("--conf=" + formula).match(arg)
if m is not None:
#print m.groups()
alarm_rule = m.groups()[0]
Conf = True
#m = re.compile("--prepare_state").match(arg.lower())
#if m is not None:
# PrepareState = True
m = re.compile("--file=" + wordpath).match(arg)
if m is not None:
#print m.groups()
file_name = m.groups()[0]
File = True
tagchars = '([a-zA-Z0-9._-]*)'
tag=''
if Device:
if Conf or File:
dev_name = domain + '/' + family + '/' + member
try:
dev = DeviceProxy(dev_name)
except (DevFailed,ConnectionFailed,EventSystemFailed) as e:
print ('ERROR connecting proxy(',dev_name,'): ',e[0].desc)
sys.exit(-1)
if Conf:
m = re.compile("tag=" + tagchars + ";(.*)").match(alarm_rule)
if m is not None:
try:
tag = m.groups()[0]
conflist = dev.command_inout('SearchAlarm',tag)
except (DevFailed,ConnectionFailed,EventSystemFailed) as e:
print (' ---> ERROR: ', e[0].desc)
sys.exit(1)
for co in conflist:
if co == alarm_rule:
print ('Found matching alarm: ', co)
sys.exit(0)
print ('Not found conf for alarm ', tag)
sys.exit(1)
elif File:
for line in open(file_name):
line = line[0:-1]
m = re.compile("tag=" + tagchars + ";(.*)").match(line)
conf_found = False
if m is not None:
try:
tag = m.groups()[0]
conflist = dev.command_inout('SearchAlarm',tag)
except (DevFailed,ConnectionFailed,EventSystemFailed) as e:
print (' ---> ERROR: ', e[0].desc)
sys.exit(1)
for co in conflist:
if co == alarm_rule:
conf_found = True
if not conf_found:
print ('Not found conf for alarm ', tag)
sys.exit(1)
sys.exit(0)
if len(sys.argv) < 3:
print ('Usage:', sys.argv[0], ' --device=alarm_device --conf=alarm_rule | --file=filename')
print ()
print ('Examples:')
print ('\tcheck one alarm_rule in alarm/handler/01:', sys.argv[0], '--device=alarm/handler/01 --conf=\"tag=test0;formula=(alarm/test/01/condition == 1);on_delay=0;off_delay=0;priority=high;shlvd_time=0;group=gr_test;message=Test alarm;url=;on_command=;off_command=;enabled=1\"')
print ('\tcheck alarm rules from filename in alarm/handler/01:', sys.argv[0], '--device=alarm/handler/01 --file=alarms.txt')
sys.exit(-1)
# EOF
#!/usr/bin/python
#
import sys,re
#import PyTango
from PyTango import *
import time
import string
if __name__ == "__main__":
Device = False
Conf = False
File = False
#PrepareState = False
for arg in sys.argv:
word = '([a-z0-9._\-\*]*)'
wordpath = '([a-z0-9._\-\*/]*)'
m = re.compile("--device=" + word + "/{0,1}" + word + "/{0,1}" + word).match(arg.lower())
if m is not None:
domain = m.groups()[0]
family = m.groups()[1]
member = m.groups()[2]
if domain == '':
domain = '*'
if family == '':
family = '*'
if member == '':
member = '*'
Device = True
#formula = '([a-z0-9._,\*,\-,\|,\/,\",\s,\t]*)'
formula = '(.*)'
m = re.compile("--conf=" + formula).match(arg)
if m is not None:
alarm_rule = m.groups()[0]
Conf = True
#m = re.compile("--prepare_state").match(arg.lower())
#if m is not None:
# PrepareState = True
m = re.compile("--file=" + wordpath).match(arg)
if m is not None:
file_name = m.groups()[0]
File = True
if Device:
if Conf or File:
dev_name = domain + '/' + family + '/' + member
try:
dev = DeviceProxy(dev_name)
except (DevFailed,ConnectionFailed,EventSystemFailed) as e:
print ('ERROR connecting proxy(',dev_name,'): ',e[0].desc)
sys.exit(-1)
if Conf:
print ('Loading: ', alarm_rule)
try:
dev.command_inout('Load',alarm_rule)
print ('.............OK!')
except (DevFailed,ConnectionFailed,EventSystemFailed) as e:
print ('...........ERROR!')
print (' ---> ERROR: ', e[0].desc)
continue
sys.exit(0)
elif File:
for line in open(file_name):
line = line[0:-1]
try:
dev.command_inout('Load',line)
time.sleep(0.1)
except (DevFailed,ConnectionFailed,EventSystemFailed) as e:
print (' ---> ERROR: ', e[0].desc)
time.sleep(2)
sys.exit(1)
sys.exit(0)
#dev = DeviceProxy("alarm/alarm/1")
#dev.command_inout('Load', sys.argv[1])
if len(sys.argv) < 3:
print ('Usage:', sys.argv[0], ' --device=alarm_device --conf=alarm_rule | --file=filename')
print ()
print ('Examples:')
print ('\tload one alarm_rule in alarm/handler/01:', sys.argv[0], '--device=alarm/handler/01 --conf=\"tag=test0;formula=(alarm/test/01/condition == 1);on_delay=0;off_delay=0;priority=high;shlvd_time=0;group=gr_test;message=Test alarm;url=;on_command=;off_command=;enabled=1\"')
print ('\tload alarm rules from filename in alarm/handler/01:', sys.argv[0], '--device=alarm/handler/01 --file=alarms.txt')
sys.exit(-1)
# EOF
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
NAME_SRV = testdevice-srv
CXXFLAGS =
LDFLAGS =
include ./Make-9.3.4.in
# Project Name
testdevice
## Description
Tango device server for storing and distributing a number of variables as device attributes.
## Installation
See your institue guidelines for deploying and configuring a Tango device server.
## Usage
The server is dynamically configured by means of dedicated Methods. The configuration and values are stored in the Tango Database and restored at server restart.
A typical usage is to store and distribute the results of measurments or simulations to a number of differet clients.
## History
## Credits
Elettra-Sincrotrone Trieste S.C.p.A. di interesse nazionale
Strada Statale 14 - km 163,5 in AREA Science Park
34149 Basovizza, Trieste ITALY
## License
GPL 3
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.