Skip to content

Commit 2f72cc3

Browse files
committed
monitoring: improve reporting of instant. bursts
1 parent 4093d9d commit 2f72cc3

1 file changed

Lines changed: 22 additions & 11 deletions

File tree

src/common/monitoring/DataDistMonitoring.cxx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -121,30 +121,41 @@ void DataDistMonitoring::MonitorThread()
121121
continue;
122122
}
123123

124-
for (const auto &lMetricIter : mMetricMap) {
125-
const DataDistMetric &lMetricObj = lMetricIter.second;
124+
for (auto &lMetricIter : mMetricMap) {
125+
DataDistMetric &lMetricObj = lMetricIter.second;
126126

127127
const std::string &lMetricName = lMetricObj.mMetricName;
128-
const auto &lKeyValMaps = lMetricObj.mKeyValueVectors;
128+
auto &lKeyValMaps = lMetricObj.mKeyValueVectors;
129129
const auto &lTimeStamp = lMetricObj.mTimestamp;
130130

131131
o2::monitoring::Metric lMetric(lMetricName, Metric::DefaultVerbosity, lTimeStamp);
132132

133-
for (const auto &lKeyValsIter : lKeyValMaps) {
133+
for (auto &lKeyValsIter : lKeyValMaps) {
134134

135135
const auto &lKey = lKeyValsIter.first;
136-
const auto &lValues = lKeyValsIter.second;
136+
auto &lValues = lKeyValsIter.second;
137137

138138
if (lValues.empty()) {
139139
continue;
140140
}
141141

142-
// create mean, min, max
143-
const auto lMean = std::accumulate( begin(lValues), end(lValues), 0.0) / lValues.size();
144-
lMetric.addValue(lMean, lKey);
145-
const auto lMinMax = std::minmax_element(begin(lValues), end(lValues));
146-
lMetric.addValue(*lMinMax.first, lKey + "_min");
147-
lMetric.addValue(*lMinMax.second, lKey + "_max");
142+
// create mean, median, min, max
143+
std::sort(lValues.begin(), lValues.end());
144+
145+
// report average of middle 80% samples
146+
auto lMid80 = 0.0;
147+
if (lValues.size() >= 3) {
148+
const auto lMedBegin = std::max(std::size_t(1), (lValues.size() + 9) / 10);
149+
const auto lMedEnd = std::min(lValues.size() - 1, (lValues.size() * 9) / 10);
150+
151+
lMid80 = std::accumulate(lValues.begin() + lMedBegin, lValues.begin() + lMedEnd, 0.0) / (lMedEnd - lMedBegin);
152+
} else {
153+
lMid80 = std::accumulate( begin(lValues), end(lValues), 0.0) / lValues.size();
154+
}
155+
156+
lMetric.addValue(lMid80, lKey);
157+
lMetric.addValue(*lValues.begin(), lKey + "_min");
158+
lMetric.addValue(*lValues.rbegin(), lKey + "_max");
148159
}
149160

150161
// log

0 commit comments

Comments
 (0)