CARMA C++
DagManager.h
1 /*
2  * Manage an entire DAG
3  *
4  * This is basically the meat of the fault system. It handles watching an
5  * entire DAG, and turning on/off the alarm and blank/flag as necessary.
6  *
7  * Copyright (c) 2010 Ira W. Snyder <iws@ovro.caltech.edu>
8  */
9 
10 #ifndef DAG_MANAGER_H
11 #define DAG_MANAGER_H
12 
13 #include <map>
14 #include <string>
15 
16 #include <boost/shared_ptr.hpp>
17 
19 
20 #include <carma/util/AutoPthreadQuitAndJoinGroup.h>
21 
22 #include <carma/fault/AlarmControlROH.h>
23 #include <carma/fault/FaultSystemParser.h>
24 #include <carma/fault/FaultSystemMonitorInfo.h>
25 #include <carma/fault/FaultTransport.h>
26 #include <carma/fault/AlarmManager.h>
27 #include <carma/fault/EmailManager.h>
28 #include <carma/fault/BFManager.h>
29 
30 typedef boost::shared_ptr<carma::monitor::CarmaMonitorSystem> CmsPtr;
31 typedef boost::shared_ptr<BFManager> BFManagerPtr;
32 typedef boost::shared_ptr<AlarmManager> AlarmManagerPtr;
33 typedef boost::shared_ptr<EmailManager> EmailManagerPtr;
34 
35 class DagManager
36 {
37  public:
38  DagManager();
39  ~DagManager();
40 
41  /* load an XML dag file */
42  void load_alarm_xml_file(const std::string &name);
43  void load_bf_xml_file(const std::string &name);
44 
45  void setInputCms(const std::string &name);
46  void setOutputCms(const std::string &name);
47 
48  CmsPtr getInputCms() const;
49  CmsPtr getOutputCms() const;
50 
51  /* attach to the alarm output */
52  void attach_to_alarm(CmsPtr inputCms, CmsPtr outputCms);
53 
54  /* attach to the blankflag outputs */
55  void attach_to_blankflag(CmsPtr inputCms, CmsPtr outputCms);
56 
57  /* run the email thread */
58  void start_email_thread(const std::string &emailTab, const int emailHoldoffSecs);
59 
60  /* run the update thread */
61  void start_update_thread();
62 
63  /* external CORBA calls */
64  void CORBA_setNoiseState(int num, bool on);
65  void CORBA_setDriveErrorPreference(int num, enum carma::fault::EffectPreference pref);
66  void CORBA_setMonitorErrorPreference(int num, enum carma::fault::EffectPreference pref);
67  void CORBA_setOfflineErrorPreference(int num, enum carma::fault::EffectPreference pref);
68  void CORBA_setPhaselockErrorPreference(int num, enum carma::fault::EffectPreference pref);
69  void CORBA_disableAlarms(const StringList &names);
70  void CORBA_restoreAlarms(const StringList &names);
71  void CORBA_setAlarmEnable(int num, bool on);
72  void CORBA_setAlarmDeadmanSecs(int seconds);
73 
74  protected:
75 
76  /* run a single cycle of the update thread */
77  void run_update_mainloop();
78  void checkMonitorFrameNumber(int inputCmsFrame);
79  bool writeFaultSystemErrorState();
80  void writeFaultSystemMonitorPoints();
81  void updateAlarmInfo(const int frame);
82 
83  /* update thread */
84  AutoPthreadQuitAndJoinGroup threadGroup_;
85  carma::fault::AlarmControlROH alarmROH_;
86  struct timespec lastAlarmCall_;
87  bool lastAlarmState_;
88  int alarmDeadmanSeconds_;
89  int prevInputCmsFrame_;
90  static void updateThreadEP(DagManager &fs);
91 
92  CmsPtr inputCms_;
93  CmsPtr outputCms_;
94 
95  FaultSystemParser bfParser_;
96  FaultSystemParser alarmParser_;
97 
98  BFManagerPtr bf_manager_;
99  AlarmManagerPtr alarm_manager_;
100  EmailManagerPtr email_manager_;
101 
102  FaultSystemMonitorInfo monitor_;
103  FaultTransportWriter transport_;
104 };
105 
106 #endif /* DAG_MANAGER_H */
107 
108 /* vim: set ts=4 sts=4 sw=4 noet: */
The monitor system base class.