tdaq-develop-2025-02-12
SupervisorInfo.h
1 #ifndef _ots_SupervisorInfo_h_
2 #define _ots_SupervisorInfo_h_
3 
4 #include <string>
5 #include "otsdaq/Macros/CoutMacros.h" /* also for XDAQ_CONST_CALL */
6 #include "otsdaq/TablePlugins/XDAQContextTable/XDAQContextTable.h"
7 
8 #pragma GCC diagnostic push
9 #pragma GCC diagnostic ignored "-Wunused-parameter"
10 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
11 #if __GNUC__ >= 8
12 #pragma GCC diagnostic ignored "-Wcatch-value"
13 #endif
14 #if __GNUC__ >= 9
15 #pragma GCC diagnostic ignored "-Wdeprecated-copy"
16 #endif
17 #include <xdaq/Application.h>
18 #pragma GCC diagnostic pop
19 #include "otsdaq/Macros/XDAQApplicationMacros.h"
20 
21 // clang-format off
22 namespace ots
23 {
25 {
26  public:
29  SupervisorInfo(XDAQ_CONST_CALL xdaq::ApplicationDescriptor* descriptor, const std::string& name, const std::string& contextName)
30  : descriptor_(descriptor)
31  , contextDescriptor_(descriptor ? descriptor->getContextDescriptor() : 0)
32  , name_(name)
33  , contextName_(contextName)
34  , id_(descriptor ? descriptor->getLocalId() : 0)
35  , class_(descriptor ? descriptor->getClassName() : "")
36  , contextURL_(contextDescriptor_ ? contextDescriptor_->getURL() : "")
37  , hostname_(SupervisorInfo::extractHostname(contextURL_))
38  , URN_(descriptor ? descriptor->getURN() : "")
39  , URL_(contextURL_ + "/" + URN_)
40  , port_(0)
41  , status_(SupervisorInfo::APP_STATUS_UNKNOWN)
42  {
43  // when no configuration, e.g. Wizard Mode, then
44  // name and contextName are derived from the class name and LID
45  if(name_ == "")
46  name_ = "LID-" + std::to_string(id_);
47  if(contextName_ == "")
48  contextName_ = class_;
49 
50  // __COUTV__(name_);
51  // __COUTV__(contextName_);
52  // __COUTV__(id_);
53  // __COUTV__(contextURL_);
54  // __COUTV__(URN_);
55  // __COUTV__(URL_);
56  // __COUTV__(port_);
57  // __COUTV__(class_);
58  }
59 
60  ~SupervisorInfo(void) { ; }
61 
62 
63  struct SubappInfo {
64  std::string name;
65  std::string status;
66  unsigned int progress, id;
67  std::string detail;
68  time_t lastStatusTime;
69  std::string url, parent_url;
70  std::string class_name;
71  }; // end SubappInfo struct
72 
73  static const std::string APP_STATUS_UNKNOWN;
74  static const std::string APP_STATUS_NOT_MONITORED;
75 
77  bool isGatewaySupervisor (void) const { return class_ == XDAQContextTable::GATEWAY_SUPERVISOR_CLASS; }
78  bool isWizardSupervisor (void) const { return class_ == XDAQContextTable::WIZARD_SUPERVISOR_CLASS; }
79  bool isTypeFESupervisor (void) const { return XDAQContextTable::FETypeClassNames_.find(class_) != XDAQContextTable::FETypeClassNames_.end(); }
80  bool isTypeDMSupervisor (void) const { return XDAQContextTable::DMTypeClassNames_.find(class_) != XDAQContextTable::DMTypeClassNames_.end(); }
81  bool isTypeLogbookSupervisor (void) const { return XDAQContextTable::LogbookTypeClassNames_.find(class_) != XDAQContextTable::LogbookTypeClassNames_.end(); }
82  bool isTypeMacroMakerSupervisor (void) const { return XDAQContextTable::MacroMakerTypeClassNames_.find(class_) != XDAQContextTable::MacroMakerTypeClassNames_.end(); }
83  bool isTypeConfigurationGUISupervisor (void) const { return XDAQContextTable::ConfigurationGUITypeClassNames_.find(class_) != XDAQContextTable::ConfigurationGUITypeClassNames_.end(); }
84  bool isTypeChatSupervisor (void) const { return XDAQContextTable::ChatTypeClassNames_.find(class_) != XDAQContextTable::ChatTypeClassNames_.end(); }
85  bool isTypeConsoleSupervisor (void) const { return XDAQContextTable::ConsoleTypeClassNames_.find(class_) != XDAQContextTable::ConsoleTypeClassNames_.end(); }
86  bool isTypeCodeEditorSupervisor (void) const { return XDAQContextTable::CodeEditorTypeClassNames_.find(class_) != XDAQContextTable::CodeEditorTypeClassNames_.end(); }
87  bool isTypeARTDAQSupervisor (void) const { return class_ == XDAQContextTable::ARTDAQ_SUPERVISOR_CLASS; }
88 
90  XDAQ_CONST_CALL xdaq::ApplicationDescriptor* getDescriptor (void) const { return descriptor_; }
91  const xdaq::ContextDescriptor* getContextDescriptor (void) const { return contextDescriptor_; }
92  const std::string& getName (void) const { return name_; }
93  const std::string& getHostname (void) const { return hostname_; }
94  const std::string& getContextName (void) const { return contextName_; }
95  const unsigned int& getId (void) const { return id_; }
96  const std::string& getClass (void) const { return class_; }
97  const std::string& getStatus (void) const { return status_; }
98  time_t getLastStatusTime (void) const { return lastStatusTime_; }
99  const unsigned int& getProgress (void) const { return progress_; }
100  const std::string& getDetail (void) const { return detail_; }
101  const std::string& getURL (void) const { return contextURL_; }
102  const std::string& getURN (void) const { return URN_; }
103  const std::string& getFullURL (void) const { return URL_; }
104  const uint16_t& getPort (void) const { return port_; }
105  const std::map<std::string, SubappInfo>& getSubappInfo (void) const { return subapps_; }
106 
108  void setStatus(const std::string& status, const unsigned int progress, const std::string& detail = "");
109  void setSubappStatus(const std::string& name, const std::string& status, const unsigned int progress, const std::string& detail = "" );
110  void copySubappStatus(const SubappInfo& info);
111  void clearSubapps() { subapps_.clear(); };
112  void clear(void);
113 
114  static std::string serializeSubappInfos(std::vector<SubappInfo> infos);
115  static std::vector<SubappInfo> deserializeSubappInfos(std::string info_string);
116 
117  private:
119  static std::string extractHostname (const std::string& URL);
120 
121  XDAQ_CONST_CALL xdaq::ApplicationDescriptor* descriptor_;
122  XDAQ_CONST_CALL xdaq::ContextDescriptor* contextDescriptor_;
123  std::string name_;
124  std::string contextName_;
125  unsigned int id_;
126  std::string class_;
127  std::string contextURL_;
128  std::string hostname_;
129  std::string URN_;
130  std::string URL_;
131  uint16_t port_;
132  std::string status_;
133  unsigned int progress_;
134  std::string detail_;
135  time_t lastStatusTime_;
136  std::map<std::string, SubappInfo> subapps_;
137 };
138 // clang-format on
139 } // namespace ots
140 
141 #endif
void setStatus(const std::string &status, const unsigned int progress, const std::string &detail="")
Setters ----------------—.
bool isGatewaySupervisor(void) const
BOOLs ----------------—.
XDAQ_CONST_CALL xdaq::ApplicationDescriptor * getDescriptor(void) const
Getters ----------------—.
SupervisorInfo(XDAQ_CONST_CALL xdaq::ApplicationDescriptor *descriptor, const std::string &name, const std::string &contextName)
std::string name
Also key in map.