Skip to content

Commit 548fc14

Browse files
authored
Metric verbositiy policy with regex (#119)
1 parent 1eb5b6c commit 548fc14

File tree

4 files changed

+50
-7
lines changed

4 files changed

+50
-7
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,12 @@ metric = 10;
182182
```
183183
See how it works in the example: [examples/11-AutoUpdate.cxx](examples/11-AutoUpdate.cxx).
184184

185+
### Regex verbosity policy
186+
Overwrite metric verbosities using regex expression:
187+
```
188+
Metric::setVerbosityPolicy(Verbosity verbosity, const std::regex& regex)
189+
```
190+
185191
## System monitoring, server-side backends installation and configuration
186192
This guide explains manual installation. For `ansible` deployment see [AliceO2Group/system-configuration](https://gitlab.cern.ch/AliceO2Group/system-configuration/tree/master/ansible) gitlab repo.
187193

include/Monitoring/Metric.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <string>
1010
#include <chrono>
1111
#include <vector>
12+
#include <regex>
1213
#include <boost/variant.hpp>
1314
#include "Tags.h"
1415

@@ -103,6 +104,9 @@ class Metric
103104

104105
/// Default metric verbosity
105106
static Verbosity DefaultVerbosity;
107+
108+
/// Regex policy setter
109+
static void setVerbosityPolicy(Verbosity verbosity, const std::regex& regex);
106110
protected:
107111
/// Allow DerivedMetrics access to setTags
108112
friend class o2::monitoring::DerivedMetrics;
@@ -124,6 +128,12 @@ class Metric
124128

125129
/// Metric verbosity
126130
Verbosity mVerbosity;
131+
132+
/// Regex policy map
133+
static std::map<std::underlying_type<Verbosity>::type, std::regex> mRegexPolicy;
134+
135+
/// Overwirte verbosity using regex policy
136+
void overwriteVerbosity();
127137
};
128138

129139
} // namespace monitoring

src/Metric.cxx

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,23 @@ const std::string& Metric::getName() const
3232

3333
Metric::Metric(int value, const std::string& name, Verbosity verbosity) :
3434
mValue(value), mName(name), mTimestamp(Metric::getCurrentTimestamp()), mVerbosity(verbosity)
35-
{
36-
}
35+
{ overwriteVerbosity(); }
3736

3837
Metric::Metric(std::string value, const std::string& name, Verbosity verbosity) :
3938
mValue(value), mName(name), mTimestamp(Metric::getCurrentTimestamp()), mVerbosity(verbosity)
40-
{}
39+
{ overwriteVerbosity(); }
4140

4241
Metric::Metric(double value, const std::string& name, Verbosity verbosity) :
4342
mValue(value), mName(name), mTimestamp(Metric::getCurrentTimestamp()), mVerbosity(verbosity)
44-
{}
43+
{ overwriteVerbosity(); }
4544

4645
Metric::Metric(uint64_t value, const std::string& name, Verbosity verbosity) :
4746
mValue(value), mName(name), mTimestamp(Metric::getCurrentTimestamp()), mVerbosity(verbosity)
48-
{}
47+
{ overwriteVerbosity(); }
4948

5049
Metric::Metric(boost::variant< int, std::string, double, uint64_t > value, const std::string& name, Verbosity verbosity) :
5150
mValue(value), mName(name), mTimestamp(Metric::getCurrentTimestamp()), mVerbosity(verbosity)
52-
{}
51+
{ overwriteVerbosity(); }
5352

5453
boost::variant< int, std::string, double, uint64_t > Metric::getValue() const
5554
{
@@ -61,6 +60,20 @@ Verbosity Metric::getVerbosity()
6160
return mVerbosity;
6261
}
6362

63+
void Metric::setVerbosityPolicy(Verbosity verbosity, const std::regex& regex)
64+
{
65+
mRegexPolicy.insert({static_cast<std::underlying_type<tags::Value>::type>(verbosity), regex});
66+
}
67+
68+
void Metric::overwriteVerbosity()
69+
{
70+
for (auto const& [verbosity, regex] : mRegexPolicy) {
71+
if (std::regex_match(mName, regex)) {
72+
mVerbosity = static_cast<Verbosity>(verbosity);
73+
}
74+
}
75+
}
76+
6477
Metric&& Metric::addTag(tags::Key key, tags::Value value)
6578
{
6679
mTags.push_back({static_cast<std::underlying_type<tags::Key>::type>(key), static_cast<std::underlying_type<tags::Value>::type>(value)});
@@ -95,6 +108,7 @@ void Metric::setDefaultVerbosity(Verbosity verbosity)
95108
}
96109

97110
Verbosity Metric::DefaultVerbosity = Verbosity::Info;
111+
std::map<std::underlying_type<Verbosity>::type, std::regex> Metric::mRegexPolicy;
98112

99113
} // namespace monitoring
100114
} // namespace o2

test/testMetric.cxx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,21 @@ BOOST_AUTO_TEST_CASE(customCopyConstructor) {
103103
BOOST_CHECK_EQUAL(sum, -109);
104104
}
105105

106+
BOOST_AUTO_TEST_CASE(regexVerbosityPolicy)
107+
{
108+
Metric::setVerbosityPolicy(Verbosity::Prod, std::regex("myMetric", std::regex::optimize));
109+
Metric metric = Metric{10, "myMetric"};
110+
Metric metric2 = Metric{10, "myValue"};
111+
BOOST_CHECK_EQUAL(static_cast<std::underlying_type<o2::monitoring::tags::Value>::type>(metric.getVerbosity()),
112+
static_cast<std::underlying_type<o2::monitoring::tags::Value>::type>(Verbosity::Prod));
113+
BOOST_CHECK_EQUAL(static_cast<std::underlying_type<o2::monitoring::tags::Value>::type>(metric2.getVerbosity()),
114+
static_cast<std::underlying_type<o2::monitoring::tags::Value>::type>(Verbosity::Info));
115+
}
116+
106117
BOOST_AUTO_TEST_CASE(verbosity) {
107-
Metric{10, "myMetric", Verbosity::Prod};
118+
Metric metric = Metric{10, "myMetric", Verbosity::Prod};
119+
BOOST_CHECK_EQUAL(static_cast<std::underlying_type<o2::monitoring::tags::Value>::type>(metric.getVerbosity()),
120+
static_cast<std::underlying_type<o2::monitoring::tags::Value>::type>(Verbosity::Prod));
108121
}
109122

110123
} // namespace Test

0 commit comments

Comments
 (0)