summaryrefslogtreecommitdiffstats
path: root/metrics
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2018-10-04 11:08:42 +0000
committerArne Juul <arnej@yahoo-inc.com>2018-10-07 17:29:35 +0000
commitf958dcf8bc346e883eaccde054b1d0e84da85688 (patch)
tree654f48c379211899657bcd3d603ed064b0d1c105 /metrics
parenta6b1087226906c77fe992e9ae9d3a4ddad3648eb (diff)
use repo for metric name and mangled name
Diffstat (limited to 'metrics')
-rw-r--r--metrics/src/tests/metrictest.cpp12
-rw-r--r--metrics/src/vespa/metrics/countmetric.hpp2
-rw-r--r--metrics/src/vespa/metrics/metric.cpp33
-rw-r--r--metrics/src/vespa/metrics/metric.h16
-rw-r--r--metrics/src/vespa/metrics/metricset.cpp2
-rw-r--r--metrics/src/vespa/metrics/valuemetric.hpp2
6 files changed, 36 insertions, 31 deletions
diff --git a/metrics/src/tests/metrictest.cpp b/metrics/src/tests/metrictest.cpp
index 04f6b6e85b4..d9c39ef5cd2 100644
--- a/metrics/src/tests/metrictest.cpp
+++ b/metrics/src/tests/metrictest.cpp
@@ -41,7 +41,7 @@ void
MetricTest::testMetricsGetDimensionsAsPartOfMangledNameImpl()
{
MetricImpl m("test", {{"foo", "bar"}}, "description goes here");
- CPPUNIT_ASSERT_EQUAL(std::string("test{foo:bar}"), m.getMangledName());
+ CPPUNIT_ASSERT_EQUAL(vespalib::string("test{foo:bar}"), m.getMangledName());
}
template <typename MetricImpl>
@@ -51,7 +51,7 @@ MetricTest::testMangledNameMayContainMultipleDimensionsImpl()
MetricImpl m("test",
{{"flarn", "yarn"}, {"foo", "bar"}},
"description goes here");
- CPPUNIT_ASSERT_EQUAL(std::string("test{flarn:yarn,foo:bar}"),
+ CPPUNIT_ASSERT_EQUAL(vespalib::string("test{flarn:yarn,foo:bar}"),
m.getMangledName());
}
@@ -88,7 +88,7 @@ MetricTest::mangledNameListsDimensionsInLexicographicOrder()
LongValueMetric m("test",
{{"xyz", "bar"}, {"abc", "foo"}, {"def", "baz"}},
"");
- CPPUNIT_ASSERT_EQUAL(std::string("test{abc:foo,def:baz,xyz:bar}"),
+ CPPUNIT_ASSERT_EQUAL(vespalib::string("test{abc:foo,def:baz,xyz:bar}"),
m.getMangledName());
}
@@ -96,15 +96,15 @@ void
MetricTest::manglingDoesNotChangeOriginalMetricName()
{
LongValueMetric m("test", {{"foo", "bar"}}, "");
- CPPUNIT_ASSERT_EQUAL(std::string("test"), m.getName());
+ CPPUNIT_ASSERT_EQUAL(vespalib::string("test"), m.getName());
}
void
MetricTest::legacyTagsDoNotCreateMangledName()
{
LongValueMetric m("test", "foo bar", "");
- CPPUNIT_ASSERT_EQUAL(std::string("test"), m.getName());
- CPPUNIT_ASSERT_EQUAL(std::string("test"), m.getMangledName());
+ CPPUNIT_ASSERT_EQUAL(vespalib::string("test"), m.getName());
+ CPPUNIT_ASSERT_EQUAL(vespalib::string("test"), m.getMangledName());
}
} // metrics
diff --git a/metrics/src/vespa/metrics/countmetric.hpp b/metrics/src/vespa/metrics/countmetric.hpp
index e150ce0d632..b46d45d690f 100644
--- a/metrics/src/vespa/metrics/countmetric.hpp
+++ b/metrics/src/vespa/metrics/countmetric.hpp
@@ -160,7 +160,7 @@ CountMetric<T, SumOnAdd>::print(std::ostream& out, bool verbose,
(void) indent;
Values values(_values.getValues());
if (values._value == 0 && !verbose) return;
- out << this->_name << (SumOnAdd ? " count=" : " value=") << values._value;
+ out << this->getName() << (SumOnAdd ? " count=" : " value=") << values._value;
if (SumOnAdd) {
if (secondsPassed != 0) {
double avgDiff = values._value / ((double) secondsPassed);
diff --git a/metrics/src/vespa/metrics/metric.cpp b/metrics/src/vespa/metrics/metric.cpp
index e67398e4626..30d063dac1f 100644
--- a/metrics/src/vespa/metrics/metric.cpp
+++ b/metrics/src/vespa/metrics/metric.cpp
@@ -64,7 +64,8 @@ Metric::Metric(const String& name,
const String& tags,
const String& description,
MetricSet* owner)
- : _name(name),
+ : _name(Repo::metricId(name)),
+ _mangledName(_name),
_description(description),
_tags(legacyTagStringToKeyedTags(tags)),
_owner(nullptr) // Set later by registry
@@ -78,7 +79,8 @@ Metric::Metric(const String& name,
Tags dimensions,
const String& description,
MetricSet* owner)
- : _name(name),
+ : _name(Repo::metricId(name)),
+ _mangledName(_name),
_description(description),
_tags(std::move(dimensions)),
_owner(nullptr)
@@ -92,6 +94,7 @@ Metric::Metric(const String& name,
Metric::Metric(const Metric& other, MetricSet* owner)
: Printable(other),
_name(other._name),
+ _mangledName(other._mangledName),
_description(other._description),
_tags(other._tags),
_owner(nullptr)
@@ -120,7 +123,8 @@ Metric::assignMangledNameWithDimensions()
return;
}
sortTagsInDeterministicOrder();
- _mangledName = createMangledNameWithDimensions();
+ vespalib::string mangled = createMangledNameWithDimensions();
+ _mangledName = Repo::metricId(mangled);
}
void
@@ -131,11 +135,11 @@ Metric::sortTagsInDeterministicOrder()
});
}
-std::string
+vespalib::string
Metric::createMangledNameWithDimensions() const
{
vespalib::asciistream s;
- s << _name << '{';
+ s << getName() << '{';
const size_t sz = _tags.size();
for (size_t i = 0; i < sz; ++i) {
const Tag& dimension(_tags[i]);
@@ -154,13 +158,13 @@ Metric::createMangledNameWithDimensions() const
void
Metric::verifyConstructionParameters()
{
- if (_name.size() == 0) {
+ if (getName().size() == 0) {
throw vespalib::IllegalArgumentException(
"Metric cannot have empty name", VESPA_STRLOC);
}
- if (!_namePattern.match(_name)) {
+ if (!_namePattern.match(getName())) {
throw vespalib::IllegalArgumentException(
- "Illegal metric name '" + _name + "'. Names must match pattern "
+ "Illegal metric name '" + getName() + "'. Names must match pattern "
+ namePattern, VESPA_STRLOC);
}
}
@@ -185,9 +189,9 @@ vespalib::string
Metric::getPath() const
{
if (_owner == 0 || _owner->_owner == 0) {
- return _name;
+ return getName();
} else {
- return _owner->getPath() + "." + _name;
+ return _owner->getPath() + "." + getName();
}
}
@@ -195,10 +199,10 @@ std::vector<Metric::String>
Metric::getPathVector() const
{
std::vector<String> result;
- result.push_back(_name);
+ result.push_back(getName());
const MetricSet* owner(_owner);
while (owner != 0) {
- result.push_back(owner->_name);
+ result.push_back(owner->getName());
owner = owner->_owner;
}
std::reverse(result.begin(), result.end());
@@ -217,7 +221,7 @@ void
Metric::addMemoryUsage(MemoryConsumption& mc) const
{
++mc._metricCount;
- mc._metricName += mc.getStringMemoryUsage(_name, mc._metricNameUnique);
+ mc._metricName += mc.getStringMemoryUsage(getName(), mc._metricNameUnique);
mc._metricDescription += mc.getStringMemoryUsage(
_description, mc._metricDescriptionUnique);
mc._metricTagCount += _tags.size();
@@ -231,7 +235,6 @@ void
Metric::updateNames(NameHash& hash) const
{
Metric& m(const_cast<Metric&>(*this));
- hash.updateName(m._name);
hash.updateName(m._description);
// Tags use vespalib::string which isn't refcounted under the hood and
// use small string optimizations, meaning the implicit ref sharing hack
@@ -242,7 +245,7 @@ void
Metric::printDebug(std::ostream& out, const std::string& indent) const
{
(void) indent;
- out << "name=" << _name << ", instance=" << ((const void*) this)
+ out << "name=" << getName() << ", instance=" << ((const void*) this)
<< ", owner=" << ((const void*) _owner);
}
diff --git a/metrics/src/vespa/metrics/metric.h b/metrics/src/vespa/metrics/metric.h
index 91ad88fecf7..a272c54a10f 100644
--- a/metrics/src/vespa/metrics/metric.h
+++ b/metrics/src/vespa/metrics/metric.h
@@ -4,6 +4,7 @@
#include <vespa/vespalib/util/printable.h>
#include <vespa/vespalib/stllike/string.h>
#include <vespa/vespalib/util/regexp.h>
+#include "repo.h"
namespace metrics {
@@ -120,13 +121,13 @@ public:
Metric & operator = (Metric && rhs) = default;
~Metric();
- const String& getName() const { return _name; }
+ const vespalib::string& getName() const { return Repo::metricName(_name); }
/**
* Get mangled name iff the metric contains any dimensions, otherwise
* the original metric name is returned.
*/
- const String& getMangledName() const {
- return (_mangledName.empty() ? _name : _mangledName);
+ const vespalib::string& getMangledName() const {
+ return Repo::metricName(_mangledName);
}
vespalib::string getPath() const;
std::vector<String> getPathVector() const;
@@ -216,7 +217,8 @@ public:
/** Used by sum metric to alter name of cloned metric for sum. */
void setName(const String& name) {
- _name = name;
+ MetricNameId newName = Repo::metricId(name);
+ _name = newName;
assignMangledNameWithDimensions();
}
@@ -282,7 +284,7 @@ private:
*/
void sortTagsInDeterministicOrder();
- std::string createMangledNameWithDimensions() const;
+ vespalib::string createMangledNameWithDimensions() const;
void verifyConstructionParameters();
/**
@@ -292,8 +294,8 @@ private:
void registerWithOwnerIfRequired(MetricSet* owner);
protected:
- String _name;
- String _mangledName;
+ MetricNameId _name;
+ MetricNameId _mangledName;
String _description;
std::vector<Tag> _tags;
MetricSet* _owner;
diff --git a/metrics/src/vespa/metrics/metricset.cpp b/metrics/src/vespa/metrics/metricset.cpp
index cfaeb8b6f02..216073b497d 100644
--- a/metrics/src/vespa/metrics/metricset.cpp
+++ b/metrics/src/vespa/metrics/metricset.cpp
@@ -321,7 +321,7 @@ void
MetricSet::print(std::ostream& out, bool verbose,
const std::string& indent, uint64_t secondsPassed) const
{
- out << _name << ":";
+ out << getName() << ":";
for (const Metric* metric : _metricOrder) {
out << "\n" << indent << " ";
metric->print(out, verbose, indent + " ", secondsPassed);
diff --git a/metrics/src/vespa/metrics/valuemetric.hpp b/metrics/src/vespa/metrics/valuemetric.hpp
index 60ed219edec..8fe8769e9ad 100644
--- a/metrics/src/vespa/metrics/valuemetric.hpp
+++ b/metrics/src/vespa/metrics/valuemetric.hpp
@@ -213,7 +213,7 @@ ValueMetric<AvgVal, TotVal, SumOnAdd>::print(
(void) secondsPassed;
Values values(_values.getValues());
if (!inUse(values) && !verbose) return;
- out << this->_name << " average=" << (values._count == 0
+ out << this->getName() << " average=" << (values._count == 0
? 0 : static_cast<double>(values._total) / values._count)
<< " last=" << values._last;
if (!summedAverage()) {