Skip to content

Commit ded2f2f

Browse files
committed
DPL: add a string metric for each of the outputs
1 parent ea48996 commit ded2f2f

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

Framework/Core/include/Framework/DataSender.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@
1212
#define O2_FRAMEWORK_DATASENDER_H_
1313

1414
#include "Framework/SendingPolicy.h"
15+
#include "Framework/Tracing.h"
16+
#include "Framework/OutputSpec.h"
1517
#include <fairmq/FairMQParts.h>
1618
#include <string>
1719

20+
#include <cstddef>
21+
#include <mutex>
22+
1823
namespace o2::framework
1924
{
2025

2126
struct ServiceRegistry;
27+
struct DeviceSpec;
2228

2329
/// Allow injecting policies on send
2430
class DataSender
@@ -32,7 +38,16 @@ class DataSender
3238
private:
3339
void* mContext;
3440
ServiceRegistry& mRegistry;
41+
DeviceSpec const& mSpec;
42+
std::vector<OutputSpec> mOutputs;
3543
SendingPolicy mPolicy;
44+
std::vector<size_t> mDistinctRoutesIndex;
45+
46+
std::vector<std::string> mMetricsNames;
47+
std::vector<std::string> mVariablesMetricsNames;
48+
std::vector<std::string> mQueriesMetricsNames;
49+
50+
TracyLockableN(std::recursive_mutex, mMutex, "data relayer mutex");
3651
};
3752

3853
} // namespace o2::framework

Framework/Core/src/DataSender.cxx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,58 @@
1212
#include "Framework/DataSender.h"
1313
#include "Framework/ServiceRegistry.h"
1414
#include "Framework/RawDeviceService.h"
15+
#include "Framework/OutputRoute.h"
16+
#include "Framework/DeviceSpec.h"
17+
#include "Framework/Monitoring.h"
18+
#include "Framework/DataSpecUtils.h"
1519

1620
#include <fairmq/Device.h>
1721

22+
using namespace o2::monitoring;
23+
1824
namespace o2::framework
1925
{
2026

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+
2143
DataSender::DataSender(ServiceRegistry& registry,
2244
SendingPolicy const& policy)
2345
: mContext{registry.get<RawDeviceService>().device()},
2446
mRegistry{registry},
47+
mSpec{registry.get<DeviceSpec const>()},
48+
mDistinctRoutesIndex{createDistinctOutputRouteIndex(mSpec.outputs)},
2549
mPolicy{policy}
2650
{
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+
}
2767
}
2868

2969
std::unique_ptr<FairMQMessage> DataSender::create()

0 commit comments

Comments
 (0)