@@ -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