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)
19 SupervisorInfo::emplaceAvailableSpace(availableLogSpaceKB, availableLogSpaceKB_);
20 SupervisorInfo::emplaceAvailableSpace(availableDataSpaceKB, availableDataSpaceKB_);
24 lastStatusTime_ = time(0);
28 void SupervisorInfo::setSubappStatus(
const std::string& name,
29 const std::string& status,
30 const unsigned int progress,
31 const std::string& detail,
32 const int64_t availableLogSpaceKB,
33 const int64_t availableDataSpaceKB)
35 subapps_[name].name = name;
36 subapps_.at(name).status = status;
37 subapps_.at(name).progress = progress;
38 subapps_.at(name).detail = detail;
39 SupervisorInfo::emplaceAvailableSpace(availableLogSpaceKB,
40 subapps_.at(name).availableLogSpaceKB_);
41 SupervisorInfo::emplaceAvailableSpace(availableDataSpaceKB,
42 subapps_.at(name).availableDataSpaceKB_);
46 subapps_.at(name).lastStatusTime = time(0);
50 void SupervisorInfo::copySubappStatus(
const SubappInfo& info)
52 subapps_[info.name] = info;
56 std::string SupervisorInfo::extractHostname(
const std::string& URL)
59 size_t i = URL.find(
"://");
60 if(i == std::string::npos)
65 size_t j = URL.find(
":", i);
66 if(j != std::string::npos)
70 return URL.substr(i, j);
74 std::string SupervisorInfo::serializeSubappInfos(std::vector<SubappInfo> infos)
76 std::ostringstream ostr;
77 for(
auto& info : infos)
79 ostr << info.name <<
"\n";
80 ostr << info.detail <<
"\n";
81 ostr << info.progress <<
"\n";
82 ostr << info.status <<
"\n";
83 ostr << info.lastStatusTime <<
"\n";
84 ostr << info.url <<
"\n";
85 ostr << info.class_name <<
"\n";
91 std::vector<SupervisorInfo::SubappInfo> SupervisorInfo::deserializeSubappInfos(
92 std::string info_string)
94 std::vector<SubappInfo> infos;
95 std::istringstream istr(info_string);
97 while(std::getline(istr, line))
100 thisInfo.name = line;
101 std::getline(istr, line);
102 thisInfo.detail = line;
103 std::getline(istr, line);
104 std::istringstream converter(line);
105 converter >> thisInfo.progress;
106 std::getline(istr, line);
107 thisInfo.status = line;
108 std::getline(istr, line);
109 converter = std::istringstream(line);
110 converter >> thisInfo.lastStatusTime;
111 std::getline(istr, line);
113 std::getline(istr, line);
114 thisInfo.class_name = line;
115 infos.push_back(thisInfo);
124 void SupervisorInfo::emplaceAvailableSpace(
125 const int64_t availableSpaceKB,
126 std::deque<std::pair<time_t, int64_t>>& availableSpaceDeque)
128 if(availableSpaceKB > 0)
130 __GEN_COUTTV__(availableSpaceKB);
131 time_t now = time(0);
133 availableSpaceDeque.emplace_front(now, availableSpaceKB);
136 if(availableSpaceDeque.size() > 2)
138 if(now - availableSpaceDeque.at(2).first > 225)
139 availableSpaceDeque.erase(availableSpaceDeque.begin() + 2);
141 availableSpaceDeque.erase(availableSpaceDeque.begin() + 1);
144 while(availableSpaceDeque.size() < 10)
145 availableSpaceDeque.emplace_back(availableSpaceDeque.at(1));
151 for(
size_t i = 8; i > 0 && i + 1 < availableSpaceDeque.size(); i -= 2)
153 if(now - availableSpaceDeque.at(i + 1).first >
154 (1 << (i / 2)) * 225 + (1 << (i / 2)) * 225 / 2)
157 availableSpaceDeque[i + 1] = availableSpaceDeque[i];
158 availableSpaceDeque[i] = availableSpaceDeque[i - 1];
160 if(availableSpaceDeque[i + 1].first == availableSpaceDeque[i].first &&
161 availableSpaceDeque[i].first != availableSpaceDeque[i - 1].first)
164 availableSpaceDeque[i] = availableSpaceDeque[i - 1];
170 __SS__ <<
"Available space deque: ";
172 for(
auto& val : availableSpaceDeque)
174 ss << i <<
":(t=" << val.first <<
", KBs=" << val.second
175 <<
", dt=" << now - val.first <<
" < "
176 << ((1 << (i / 2)) * 225 + (1 << (i / 2)) * 225 / 2) <<
", KBps="
177 << (val.second - availableSpaceKB) * 1.0f / (1 + now - val.first)
181 __COUTT__ << mfSubject_ <<
" " << &availableSpaceDeque <<
" " << ss.str()
182 << __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