00001 // $Id: AlarmHandler.h,v 1.9 2011/04/18 15:18:57 mommsen Exp $ 00003 00004 #ifndef EventFilter_StorageManager_AlarmHandler_h 00005 #define EventFilter_StorageManager_AlarmHandler_h 00006 00007 #include <string> 00008 00009 #include "boost/shared_ptr.hpp" 00010 #include "boost/thread/mutex.hpp" 00011 00012 #include "xcept/Exception.h" 00013 #include "xdaq/Application.h" 00014 #include "xdata/InfoSpace.h" 00015 00016 00017 namespace stor { 00018 00027 class AlarmHandler 00028 { 00029 00030 public: 00031 00032 enum ALARM_LEVEL { OKAY, WARNING, ERROR, FATAL }; 00033 00034 AlarmHandler() {}; 00035 explicit AlarmHandler(xdaq::Application*); 00036 00037 virtual ~AlarmHandler() {}; 00038 00042 virtual void notifySentinel 00043 ( 00044 const ALARM_LEVEL, 00045 xcept::Exception& 00046 ); 00047 00051 virtual void raiseAlarm 00052 ( 00053 const std::string name, 00054 const ALARM_LEVEL, 00055 xcept::Exception& 00056 ); 00057 00061 virtual void revokeAlarm(const std::string name); 00062 00066 void clearAllAlarms(); 00067 00071 Logger& getLogger() const 00072 { return app_->getApplicationLogger(); } 00073 00074 00075 private: 00076 00077 bool raiseAlarm 00078 ( 00079 const std::string name, 00080 const std::string level, 00081 xcept::Exception& 00082 ); 00083 00084 xdaq::Application* app_; 00085 xdata::InfoSpace* alarmInfoSpace_; 00086 00087 mutable boost::mutex mutex_; 00088 00089 }; 00090 00091 typedef boost::shared_ptr<AlarmHandler> AlarmHandlerPtr; 00092 00093 } // namespace stor 00094 00095 #endif // EventFilter_StorageManager_AlarmHandler_h 00096 00097