1 #include "otsdaq/SupervisorInfo/SupervisorInfo.h"
5 const std::string SupervisorInfo::APP_STATUS_UNKNOWN =
"UNKNOWN";
6 const std::string SupervisorInfo::APP_STATUS_NOT_MONITORED =
"Not Monitored";
10 const unsigned int progress,
11 const std::string& detail,
12 const int64_t availableLogSpaceKB,
13 const int64_t availableDataSpaceKB)
16 if(status != SupervisorInfo::APP_STATUS_UNKNOWN)
18 lastStatusTime_ = time(0);
20 lastStatusChangeTime_ = time(0);
25 SupervisorInfo::emplaceAvailableSpace(availableLogSpaceKB, availableLogSpaceKB_);
26 SupervisorInfo::emplaceAvailableSpace(availableDataSpaceKB, availableDataSpaceKB_);
30 void SupervisorInfo::setSubappStatus(
const std::string& name,
31 const std::string& status,
32 const unsigned int progress,
33 const std::string& detail,
34 const int64_t availableLogSpaceKB,
35 const int64_t availableDataSpaceKB)
37 subapps_[name].name = name;
42 subapps_.at(name).lastStatusTime = time(0);
43 if(subapps_.at(name).status != status)
44 subapps_.at(name).lastStatusChangeTime = time(0);
46 subapps_.at(name).status = status;
47 subapps_.at(name).progress = progress;
48 subapps_.at(name).detail = detail;
49 SupervisorInfo::emplaceAvailableSpace(availableLogSpaceKB,
50 subapps_.at(name).availableLogSpaceKB_);
51 SupervisorInfo::emplaceAvailableSpace(availableDataSpaceKB,
52 subapps_.at(name).availableDataSpaceKB_);
56 void SupervisorInfo::copySubappStatus(
const SubappInfo& info)
58 subapps_[info.name] = info;
62 std::string SupervisorInfo::extractHostname(
const std::string& URL)
65 size_t i = URL.find(
"://");
66 if(i == std::string::npos)
71 size_t j = URL.find(
":", i);
72 if(j != std::string::npos)
76 return URL.substr(i, j);
80 std::string SupervisorInfo::serializeSubappInfos(std::vector<SubappInfo> infos)
82 std::ostringstream ostr;
83 for(
auto& info : infos)
85 ostr << info.name <<
"\n";
86 ostr << info.detail <<
"\n";
87 ostr << info.progress <<
"\n";
88 ostr << info.status <<
"\n";
89 ostr << info.lastStatusTime <<
"\n";
90 ostr << info.lastStatusChangeTime <<
"\n";
91 ostr << info.url <<
"\n";
92 ostr << info.class_name <<
"\n";
98 std::vector<SupervisorInfo::SubappInfo> SupervisorInfo::deserializeSubappInfos(
99 std::string info_string)
101 std::vector<SubappInfo> infos;
102 std::istringstream istr(info_string);
104 while(std::getline(istr, line))
107 thisInfo.name = line;
108 std::getline(istr, line);
109 thisInfo.detail = line;
110 std::getline(istr, line);
111 std::istringstream converter(line);
112 converter >> thisInfo.progress;
113 std::getline(istr, line);
114 thisInfo.status = line;
115 std::getline(istr, line);
116 converter = std::istringstream(line);
117 converter >> thisInfo.lastStatusTime;
118 std::getline(istr, line);
119 converter = std::istringstream(line);
120 converter >> thisInfo.lastStatusChangeTime;
121 std::getline(istr, line);
123 std::getline(istr, line);
124 thisInfo.class_name = line;
125 infos.push_back(thisInfo);
134 void SupervisorInfo::emplaceAvailableSpace(
135 const int64_t availableSpaceKB,
136 std::deque<std::pair<time_t, int64_t>>& availableSpaceDeque)
138 if(availableSpaceKB > 0)
140 __GEN_COUTVS__(40, availableSpaceKB);
141 time_t now = time(0);
143 availableSpaceDeque.emplace_front(now, availableSpaceKB);
146 if(availableSpaceDeque.size() > 2)
148 if(now - availableSpaceDeque.at(2).first > 225)
149 availableSpaceDeque.erase(availableSpaceDeque.begin() + 2);
151 availableSpaceDeque.erase(availableSpaceDeque.begin() + 1);
154 while(availableSpaceDeque.size() < 10)
155 availableSpaceDeque.emplace_back(availableSpaceDeque.at(1));
161 for(
size_t i = 8; i > 0 && i + 1 < availableSpaceDeque.size(); i -= 2)
163 if(now - availableSpaceDeque.at(i + 1).first >
164 (1 << (i / 2)) * 225 + (1 << (i / 2)) * 225 / 2)
167 availableSpaceDeque[i + 1] = availableSpaceDeque[i];
168 availableSpaceDeque[i] = availableSpaceDeque[i - 1];
170 if(availableSpaceDeque[i + 1].first == availableSpaceDeque[i].first &&
171 availableSpaceDeque[i].first != availableSpaceDeque[i - 1].first)
174 availableSpaceDeque[i] = availableSpaceDeque[i - 1];
180 __SS__ <<
"Available space deque: ";
182 for(
auto& val : availableSpaceDeque)
184 ss << i <<
":(t=" << val.first <<
", KBs=" << val.second
185 <<
", dt=" << now - val.first <<
" < "
186 << ((1 << (i / 2)) * 225 + (1 << (i / 2)) * 225 / 2) <<
", KBps="
187 << (val.second - availableSpaceKB) * 1.0f / (1 + now - val.first)
191 __COUTS__(40) << mfSubject_ <<
" " << &availableSpaceDeque <<
" " << ss.str()
192 << __E__ << getLogUsageRateLastHourKBps() <<
" KB/s";
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