1 #ifndef _ots_SupervisorInfo_h_
2 #define _ots_SupervisorInfo_h_
6 #include "otsdaq/Macros/CoutMacros.h"
7 #include "otsdaq/TablePlugins/XDAQContextTable/XDAQContextTable.h"
9 #pragma GCC diagnostic push
10 #pragma GCC diagnostic ignored "-Wunused-parameter"
11 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
13 #pragma GCC diagnostic ignored "-Wcatch-value"
16 #pragma GCC diagnostic ignored "-Wdeprecated-copy"
18 #include <xdaq/Application.h>
19 #pragma GCC diagnostic pop
20 #include "otsdaq/Macros/XDAQApplicationMacros.h"
30 SupervisorInfo(XDAQ_CONST_CALL xdaq::ApplicationDescriptor* descriptor,
const std::string& name,
const std::string& contextName)
31 : descriptor_(descriptor)
32 , contextDescriptor_(descriptor ? descriptor->getContextDescriptor() : 0)
35 , contextName_(contextName)
36 , id_(descriptor ? descriptor->getLocalId() : 0)
37 , class_(descriptor ? descriptor->getClassName() :
"")
38 , contextURL_(contextDescriptor_ ? contextDescriptor_->getURL() :
"")
40 , URN_(descriptor ? descriptor->getURN() :
"")
41 , URL_(contextURL_ +
"/" + URN_)
48 name_ =
"LID-" + std::to_string(id_);
49 if(contextName_ ==
"")
50 contextName_ = class_;
59 unsigned int progress, id;
61 int64_t availableLogSpaceKB = 0, availableDataSpaceKB = 0;
62 float logUsageRateKBps = 0, dataUsageRateKBps = 0;
63 time_t lastStatusTime;
64 std::string url, parent_url;
65 std::string class_name;
66 std::deque<std::pair<time_t, int64_t>> availableLogSpaceKB_, availableDataSpaceKB_;
69 static const std::string APP_STATUS_UNKNOWN;
70 static const std::string APP_STATUS_NOT_MONITORED;
73 bool isGatewaySupervisor (
void)
const {
return class_ == XDAQContextTable::GATEWAY_SUPERVISOR_CLASS; }
74 bool isWizardSupervisor (
void)
const {
return class_ == XDAQContextTable::WIZARD_SUPERVISOR_CLASS; }
75 bool isTypeFESupervisor (
void)
const {
return XDAQContextTable::FETypeClassNames_.find(class_) != XDAQContextTable::FETypeClassNames_.end(); }
76 bool isTypeDMSupervisor (
void)
const {
return XDAQContextTable::DMTypeClassNames_.find(class_) != XDAQContextTable::DMTypeClassNames_.end(); }
77 bool isTypeLogbookSupervisor (
void)
const {
return XDAQContextTable::LogbookTypeClassNames_.find(class_) != XDAQContextTable::LogbookTypeClassNames_.end(); }
78 bool isTypeMacroMakerSupervisor (
void)
const {
return XDAQContextTable::MacroMakerTypeClassNames_.find(class_) != XDAQContextTable::MacroMakerTypeClassNames_.end(); }
79 bool isTypeConfigurationGUISupervisor (
void)
const {
return XDAQContextTable::ConfigurationGUITypeClassNames_.find(class_) != XDAQContextTable::ConfigurationGUITypeClassNames_.end(); }
80 bool isTypeChatSupervisor (
void)
const {
return XDAQContextTable::ChatTypeClassNames_.find(class_) != XDAQContextTable::ChatTypeClassNames_.end(); }
81 bool isTypeConsoleSupervisor (
void)
const {
return XDAQContextTable::ConsoleTypeClassNames_.find(class_) != XDAQContextTable::ConsoleTypeClassNames_.end(); }
82 bool isTypeCodeEditorSupervisor (
void)
const {
return XDAQContextTable::CodeEditorTypeClassNames_.find(class_) != XDAQContextTable::CodeEditorTypeClassNames_.end(); }
83 bool isTypeARTDAQSupervisor (
void)
const {
return class_ == XDAQContextTable::ARTDAQ_SUPERVISOR_CLASS; }
86 XDAQ_CONST_CALL xdaq::ApplicationDescriptor*
getDescriptor (
void)
const {
return descriptor_; }
87 const xdaq::ContextDescriptor* getContextDescriptor (
void)
const {
return contextDescriptor_; }
88 const std::string& getName (
void)
const {
return name_; }
89 const std::string& getHostname (
void)
const {
return hostname_; }
90 const std::string& getContextName (
void)
const {
return contextName_; }
91 const unsigned int& getId (
void)
const {
return id_; }
92 const std::string& getClass (
void)
const {
return class_; }
95 const std::string&
getStatus (
void)
const {
return status_; }
96 time_t getLastStatusTime (
void)
const {
return lastStatusTime_; }
97 const unsigned int& getProgress (
void)
const {
return progress_; }
98 const std::string& getDetail (
void)
const {
return detail_; }
100 const std::string& getURL (
void)
const {
return contextURL_; }
101 const std::string& getURN (
void)
const {
return URN_; }
102 const std::string& getFullURL (
void)
const {
return URL_; }
103 const uint16_t& getPort (
void)
const {
return port_; }
104 const std::map<std::string, SubappInfo>& getSubappInfo (
void)
const {
return subapps_; }
107 int64_t getAvailableLogSpaceKB (
void)
const {
return availableLogSpaceKB_.size() > 0 ? availableLogSpaceKB_.front().second : 0; }
108 int64_t getAvailableDataSpaceKB (
void)
const {
return availableDataSpaceKB_.size() > 0 ? availableDataSpaceKB_.front().second : 0; }
110 float getLogUsageRateLastHourKBps (
void)
const {
return availableLogSpaceKB_.size() > 9 ? (availableLogSpaceKB_[9].second - availableLogSpaceKB_.front().second)*1.0f/
111 std::max(
static_cast<time_t
>(1), availableLogSpaceKB_.front().first - availableLogSpaceKB_[9].first) : 0; }
112 float getLogUsageRateLastHalfHourKBps (
void)
const {
return availableLogSpaceKB_.size() > 7 ? (availableLogSpaceKB_[7].second - availableLogSpaceKB_.front().second)*1.0f/
113 std::max(
static_cast<time_t
>(1), availableLogSpaceKB_.front().first - availableLogSpaceKB_[7].first): 0; }
114 float getLogUsageRateLastQuarterHourKBps (
void)
const {
return availableLogSpaceKB_.size() > 5 ? (availableLogSpaceKB_[5].second - availableLogSpaceKB_.front().second)*1.0f/
115 std::max(
static_cast<time_t
>(1), availableLogSpaceKB_.front().first - availableLogSpaceKB_[5].first): 0; }
116 float getLogUsageRateNowKBps (
void)
const {
return availableLogSpaceKB_.size() > 1 ? (availableLogSpaceKB_[1].second - availableLogSpaceKB_.front().second)*1.0f/
117 std::max(
static_cast<time_t
>(1), availableLogSpaceKB_.front().first - availableLogSpaceKB_[1].first) : 0; }
118 float getDataUsageRateLastHourKBps (
void)
const {
return availableDataSpaceKB_.size() > 9 ? (availableDataSpaceKB_[9].second - availableDataSpaceKB_.front().second)*1.0f/
119 std::max(
static_cast<time_t
>(1), availableDataSpaceKB_.front().first - availableDataSpaceKB_[9].first) : 0; }
120 float getDataUsageRateLastHalfHourKBps (
void)
const {
return availableDataSpaceKB_.size() > 7 ? (availableDataSpaceKB_[7].second - availableDataSpaceKB_.front().second)*1.0f/
121 std::max(
static_cast<time_t
>(1), availableDataSpaceKB_.front().first - availableDataSpaceKB_[7].first): 0; }
122 float getDataUsageRateLastQuarterHourKBps(
void)
const {
return availableDataSpaceKB_.size() > 5 ? (availableDataSpaceKB_[5].second - availableDataSpaceKB_.front().second)*1.0f/
123 std::max(
static_cast<time_t
>(1), availableDataSpaceKB_.front().first - availableDataSpaceKB_[5].first): 0; }
124 float getDataUsageRateNowKBps (
void)
const {
return availableDataSpaceKB_.size() > 1 ? (availableDataSpaceKB_[1].second - availableDataSpaceKB_.front().second)*1.0f/
125 std::max(
static_cast<time_t
>(1), availableDataSpaceKB_.front().first - availableDataSpaceKB_[1].first) : 0; }
127 void setStatus(
const std::string& status,
const unsigned int progress,
const std::string& detail =
"",
const int64_t availableLogSpaceKB = 0,
const int64_t availableDataSpaceKB = 0);
128 void setSubappStatus(
const std::string& name,
const std::string& status,
const unsigned int progress,
const std::string& detail =
"",
const int64_t availableLogSpaceKB = 0,
const int64_t availableDataSpaceKB = 0);
129 void copySubappStatus(
const SubappInfo& info);
130 void clearSubapps() { subapps_.clear(); };
132 static std::string serializeSubappInfos(std::vector<SubappInfo> infos);
133 static std::vector<SubappInfo> deserializeSubappInfos(std::string info_string);
137 static std::string extractHostname (
const std::string& URL);
138 void emplaceAvailableSpace (
const int64_t availableSpaceKB, std::deque<std::pair<time_t, int64_t>>& availableSpaceDeque);
141 XDAQ_CONST_CALL xdaq::ApplicationDescriptor* descriptor_;
142 XDAQ_CONST_CALL xdaq::ContextDescriptor* contextDescriptor_;
143 std::string name_, mfSubject_;
144 std::string contextName_;
147 std::string contextURL_;
148 std::string hostname_;
153 unsigned int progress_;
155 time_t lastStatusTime_;
156 std::map<std::string, SubappInfo> subapps_;
157 std::deque<std::pair<time_t, int64_t>> availableLogSpaceKB_, availableDataSpaceKB_;
bool isGatewaySupervisor(void) const
BOOLs ----------------—.
XDAQ_CONST_CALL xdaq::ApplicationDescriptor * getDescriptor(void) const
Getters ----------------—.
const std::string & getStatus(void) const
Note: be careful accessing status_ in multithreaded code (need higher level lock, a la getSupervisorI...
SupervisorInfo(XDAQ_CONST_CALL xdaq::ApplicationDescriptor *descriptor, const std::string &name, const std::string &contextName)
void setStatus(const std::string &status, const unsigned int progress, const std::string &detail="", const int64_t availableLogSpaceKB=0, const int64_t availableDataSpaceKB=0)
Setters ----------------—.
defines used also by OtsConfigurationWizardSupervisor
std::string name
Also key in map.