Skip to content

Commit 0ec0739

Browse files
authored
Send both raw and derived metrics (#54)
1 parent ded653c commit 0ec0739

File tree

3 files changed

+26
-13
lines changed

3 files changed

+26
-13
lines changed

README.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ See table below to find out how to create `URI` for each backend:
106106
### Sending metric
107107
108108
```cpp
109-
send(Metric&& metric)
109+
send(Metric&& metric, [DerivedMetricMode mode])
110110
```
111111
Where metric constructor receives following parameters:
112112
- `T value`
@@ -118,6 +118,8 @@ For example:
118118
monitoring->send({10, "myMetricInt"});
119119
```
120120
121+
Regarding `DerivedMetricMode` see [Calculating derived metrics](#calculating-derived-metrics).
122+
121123
### Customized metrics
122124
Two additional methods can be chained the to `send(Metric&& metric)` in order to __insert custom tags__ or __set custom timestamp__:
123125
+ `addTags(std::vector<Tag>&& tags)`
@@ -179,9 +181,10 @@ Metrics consist of 4 parameters: name, value, timestamp and tags.
179181
+ process name
180182

181183
### Calculating derived metrics
182-
The module can calculate derived metrics. To do so, use `addDerivedMetric(std::string name, DerivedMetricMode mode)` with one of two available modes:
183-
+ `DerivedMetricMode::RATE` - rate between two following metrics;
184-
+ `DerivedMetricMode::AVERAGE` - average value of all metrics stored in cache;
184+
The module can calculate derived metrics. To do so, use optional `DerivedMetricMode mode` parameter of `send` method:
185+
+ `DerivedMetricMode::NONE` - no action,
186+
+ `DerivedMetricMode::RATE` - rate between two following metrics,
187+
+ `DerivedMetricMode::AVERAGE` - average value of all metrics stored in cache.
185188

186189
Derived metrics are generated each time as new value is passed to the module. Their names are suffixed with derived mode name.
187190

include/Monitoring/Monitoring.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ class Monitoring
103103
/// List of timers
104104
std::unordered_map <std::string, std::chrono::time_point<std::chrono::steady_clock>> mTimers;
105105

106+
/// Pushes metric to all backends or to the buffer
107+
void pushToBackends(Metric&& metric);
108+
106109
/// States whether Process Monitor thread is running
107110
std::atomic<bool> mMonitorRunning;
108111

src/Monitoring.cxx

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -136,21 +136,15 @@ void Monitoring::sendGrouped(std::string measurement, std::vector<Metric>&& metr
136136
}
137137
}
138138

139-
void Monitoring::send(std::vector<Metric>&& metrics) {
139+
void Monitoring::send(std::vector<Metric>&& metrics)
140+
{
140141
for (auto& b: mBackends) {
141142
b->send(std::move(metrics));
142143
}
143144
}
144145

145-
void Monitoring::send(Metric&& metric, DerivedMetricMode mode)
146+
void Monitoring::pushToBackends(Metric&& metric)
146147
{
147-
if (mode == DerivedMetricMode::RATE) {
148-
metric = mDerivedHandler->rate(metric);
149-
}
150-
151-
if (mode == DerivedMetricMode::INCREMENT) {
152-
metric = mDerivedHandler->increment(metric);
153-
}
154148
if (mBuffering) {
155149
mStorage.push_back(std::move(metric));
156150
if (mStorage.size() >= mBufferSize) {
@@ -163,5 +157,18 @@ void Monitoring::send(Metric&& metric, DerivedMetricMode mode)
163157
}
164158
}
165159

160+
void Monitoring::send(Metric&& metric, DerivedMetricMode mode)
161+
{
162+
if (mode == DerivedMetricMode::RATE) {
163+
pushToBackends(mDerivedHandler->rate(metric));
164+
}
165+
166+
if (mode == DerivedMetricMode::INCREMENT) {
167+
pushToBackends(mDerivedHandler->increment(metric));
168+
}
169+
170+
pushToBackends(std::move(metric));
171+
}
172+
166173
} // namespace monitoring
167174
} // namespace o2

0 commit comments

Comments
 (0)