|
12 | 12 | #include "Framework/DataSender.h" |
13 | 13 | #include "Framework/ServiceRegistry.h" |
14 | 14 | #include "Framework/RawDeviceService.h" |
| 15 | +#include "Framework/OutputRoute.h" |
| 16 | +#include "Framework/DeviceSpec.h" |
| 17 | +#include "Framework/Monitoring.h" |
| 18 | +#include "Framework/DataSpecUtils.h" |
15 | 19 |
|
16 | 20 | #include <fairmq/Device.h> |
17 | 21 |
|
| 22 | +using namespace o2::monitoring; |
| 23 | + |
18 | 24 | namespace o2::framework |
19 | 25 | { |
20 | 26 |
|
| 27 | +namespace |
| 28 | +{ |
| 29 | +std::vector<size_t> |
| 30 | + createDistinctOutputRouteIndex(std::vector<OutputRoute> const& routes) |
| 31 | +{ |
| 32 | + std::vector<size_t> result; |
| 33 | + for (size_t ri = 0; ri < routes.size(); ++ri) { |
| 34 | + auto& route = routes[ri]; |
| 35 | + if (route.timeslice == 0) { |
| 36 | + result.push_back(ri); |
| 37 | + } |
| 38 | + } |
| 39 | + return result; |
| 40 | +} |
| 41 | +} // namespace |
| 42 | + |
21 | 43 | DataSender::DataSender(ServiceRegistry& registry, |
22 | 44 | SendingPolicy const& policy) |
23 | 45 | : mContext{registry.get<RawDeviceService>().device()}, |
24 | 46 | mRegistry{registry}, |
| 47 | + mSpec{registry.get<DeviceSpec const>()}, |
| 48 | + mDistinctRoutesIndex{createDistinctOutputRouteIndex(mSpec.outputs)}, |
25 | 49 | mPolicy{policy} |
26 | 50 | { |
| 51 | + std::scoped_lock<LockableBase(std::recursive_mutex)> lock(mMutex); |
| 52 | + |
| 53 | + auto numInputTypes = mDistinctRoutesIndex.size(); |
| 54 | + mQueriesMetricsNames.resize(numInputTypes * 1); |
| 55 | + auto& monitoring = mRegistry.get<Monitoring>(); |
| 56 | + monitoring.send({(int)numInputTypes, "output_matchers/h", Verbosity::Debug}); |
| 57 | + monitoring.send({(int)1, "output_matchers/w", Verbosity::Debug}); |
| 58 | + auto& routes = mSpec.outputs; |
| 59 | + for (size_t i = 0; i < numInputTypes; ++i) { |
| 60 | + mQueriesMetricsNames[i] = fmt::format("output_matchers/{}", i); |
| 61 | + char buffer[128]; |
| 62 | + assert(mDistinctRoutesIndex[i] < routes.size()); |
| 63 | + mOutputs.push_back(routes[mDistinctRoutesIndex[i]].matcher); |
| 64 | + DataSpecUtils::describe(buffer, 127, mOutputs.back()); |
| 65 | + monitoring.send({std::string{buffer}, mQueriesMetricsNames[i], Verbosity::Debug}); |
| 66 | + } |
27 | 67 | } |
28 | 68 |
|
29 | 69 | std::unique_ptr<FairMQMessage> DataSender::create() |
|
0 commit comments