|
12 | 12 | #include <Common/Configuration.h> |
13 | 13 | #include <InfoLogger/InfoLogger.hxx> |
14 | 14 | #include <InfoLogger/InfoLoggerMacros.hxx> |
| 15 | +#include <map> |
15 | 16 | #include <signal.h> |
16 | 17 | #include <zmq.h> |
17 | 18 | #include "ReadoutStats.h" |
@@ -214,7 +215,9 @@ int main(int argc, const char** argv) |
214 | 215 | sigaction(SIGINT, &signalSettings, NULL); |
215 | 216 |
|
216 | 217 | theLog.log(LogInfoDevel_(3006), "Entering monitoring loop"); |
217 | | - double previousSampleTime = 0; |
| 218 | + |
| 219 | + typedef std::map<std::string, double> MapCountersBySource; |
| 220 | + MapCountersBySource latestUpdate; // keep copy of latest counter for each source |
218 | 221 |
|
219 | 222 | // header |
220 | 223 | if ((!cfgRawBytes)&&(broadcastSocket == nullptr)) { |
@@ -244,6 +247,20 @@ int main(int argc, const char** argv) |
244 | 247 | double t = counters->timestamp.load(); |
245 | 248 | double nRfmq = counters->pagesPendingFairMQreleased.load(); |
246 | 249 | double avgTfmq = 0.0; |
| 250 | + |
| 251 | + std::string k = counters->source; |
| 252 | + MapCountersBySource::iterator lb = latestUpdate.lower_bound(k); |
| 253 | + double previousSampleTime = 0; |
| 254 | + |
| 255 | + if(lb != latestUpdate.end() && !(latestUpdate.key_comp()(k, lb->first))) { |
| 256 | + // source was already sampled |
| 257 | + previousSampleTime = lb->second; |
| 258 | + lb->second = t; |
| 259 | + } else { |
| 260 | + // this is first sample for this source |
| 261 | + latestUpdate.insert(lb, MapCountersBySource::value_type(k, t)); |
| 262 | + } |
| 263 | + |
247 | 264 | if (previousSampleTime > 0) { |
248 | 265 | double deltaT = t - previousSampleTime; |
249 | 266 | nRfmq = nRfmq / deltaT; |
|
0 commit comments