From 1ebe812b587246af7c825b055be055d56e6b5d77 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Thu, 4 Oct 2018 13:17:58 +0000 Subject: use repo for tags also --- metrics/src/tests/metricmanagertest.cpp | 4 ++-- metrics/src/vespa/metrics/jsonwriter.cpp | 4 ++-- metrics/src/vespa/metrics/metric.cpp | 14 +++++++------- metrics/src/vespa/metrics/metric.h | 8 ++++++-- metrics/src/vespa/metrics/repo.cpp | 4 ++-- metrics/src/vespa/metrics/repo.h | 4 ++-- metrics/src/vespa/metrics/xmlwriter.cpp | 4 ++-- 7 files changed, 23 insertions(+), 19 deletions(-) diff --git a/metrics/src/tests/metricmanagertest.cpp b/metrics/src/tests/metricmanagertest.cpp index f5d3a77d671..8424d3be3fe 100644 --- a/metrics/src/tests/metricmanagertest.cpp +++ b/metrics/src/tests/metricmanagertest.cpp @@ -943,8 +943,8 @@ public: CPPUNIT_ASSERT_EQUAL_MSG(_jsonText, dimensions.size(), nthMetricDimensionCount(metricIndex)); for (auto& dim : dimensions) { - CPPUNIT_ASSERT_EQUAL_MSG(_jsonText, std::string(dim.value), - nthMetricDimension(metricIndex, dim.key)); + CPPUNIT_ASSERT_EQUAL_MSG(_jsonText, std::string(dim.value()), + nthMetricDimension(metricIndex, dim.key())); } } }; diff --git a/metrics/src/vespa/metrics/jsonwriter.cpp b/metrics/src/vespa/metrics/jsonwriter.cpp index 6ea585f0635..d890d725c8a 100644 --- a/metrics/src/vespa/metrics/jsonwriter.cpp +++ b/metrics/src/vespa/metrics/jsonwriter.cpp @@ -70,8 +70,8 @@ void JsonWriter::writeDimensions(const DimensionSet& dimensions) { for (const auto& dimension : dimensions) { - if (!dimension.key.empty() && !dimension.value.empty()) { - _stream << dimension.key << dimension.value; + if (!dimension.key().empty() && !dimension.value().empty()) { + _stream << dimension.key() << dimension.value(); } } } diff --git a/metrics/src/vespa/metrics/metric.cpp b/metrics/src/vespa/metrics/metric.cpp index 355957d11da..784492de7d2 100644 --- a/metrics/src/vespa/metrics/metric.cpp +++ b/metrics/src/vespa/metrics/metric.cpp @@ -52,8 +52,8 @@ namespace { vespalib::Regexp Metric::_namePattern(namePattern); Tag::Tag(vespalib::stringref k, vespalib::stringref v) - : key(k), - value(v) + : _key(Repo::tagKeyId(k)), + _value(Repo::tagValueId(v)) { } Tag::Tag(const Tag &) = default; @@ -111,7 +111,7 @@ Metric::~Metric() { } bool Metric::tagsSpecifyAtLeastOneDimension(const Tags& tags) const { - auto hasNonEmptyTagValue = [](const Tag& t) { return !t.value.empty(); }; + auto hasNonEmptyTagValue = [](const Tag& t) { return !t.value().empty(); }; return std::any_of(tags.begin(), tags.end(), hasNonEmptyTagValue); } @@ -131,7 +131,7 @@ void Metric::sortTagsInDeterministicOrder() { std::sort(_tags.begin(), _tags.end(), [](const Tag& a, const Tag& b) { - return a.key < b.key; + return a.key() < b.key(); }); } @@ -143,13 +143,13 @@ Metric::createMangledNameWithDimensions() const const size_t sz = _tags.size(); for (size_t i = 0; i < sz; ++i) { const Tag& dimension(_tags[i]); - if (dimension.value.empty()) { + if (dimension.value().empty()) { continue; } if (i != 0) { s << ','; } - s << dimension.key << ':' << dimension.value; + s << dimension.key() << ':' << dimension.value(); } s << '}'; return s.str(); @@ -213,7 +213,7 @@ bool Metric::hasTag(const String& tag) const { return std::find_if(_tags.begin(), _tags.end(), [&](const Tag& t) { - return t.key == tag; + return t.key() == tag; }) != _tags.end(); } diff --git a/metrics/src/vespa/metrics/metric.h b/metrics/src/vespa/metrics/metric.h index c1adc15c28d..3ea6e7a4854 100644 --- a/metrics/src/vespa/metrics/metric.h +++ b/metrics/src/vespa/metrics/metric.h @@ -84,8 +84,8 @@ struct MetricVisitor { */ struct Tag { - vespalib::string key; - vespalib::string value; + const vespalib::string& key() const { return Repo::tagKey(_key); } + const vespalib::string& value() const { return Repo::tagValue(_value); } Tag(vespalib::stringref k, vespalib::stringref v); Tag(const Tag &); @@ -93,6 +93,10 @@ struct Tag Tag(Tag &&) = default; Tag & operator = (Tag &&) = default; ~Tag(); + +private: + TagKeyId _key; + TagValueId _value; }; class Metric : public vespalib::Printable diff --git a/metrics/src/vespa/metrics/repo.cpp b/metrics/src/vespa/metrics/repo.cpp index 0ea964b19b7..a43eec8babe 100644 --- a/metrics/src/vespa/metrics/repo.cpp +++ b/metrics/src/vespa/metrics/repo.cpp @@ -29,14 +29,14 @@ Repo::descriptionId(const vespalib::string &name) } TagKeyId -Repo::tagKey(const vespalib::string &name) +Repo::tagKeyId(const vespalib::string &name) { size_t id = tagKeys.resolve(name); return TagKeyId(id); } TagValueId -Repo::tagValue(const vespalib::string &value) +Repo::tagValueId(const vespalib::string &value) { size_t id = tagValues.resolve(value); return TagValueId(id); diff --git a/metrics/src/vespa/metrics/repo.h b/metrics/src/vespa/metrics/repo.h index ddfeaf3f1b6..3e59b4550d9 100644 --- a/metrics/src/vespa/metrics/repo.h +++ b/metrics/src/vespa/metrics/repo.h @@ -19,8 +19,8 @@ using TagValueId = vespalib::metrics::Handle; struct Repo { static MetricNameId metricId(const vespalib::string &name); static DescriptionId descriptionId(const vespalib::string &name); - static TagKeyId tagKey(const vespalib::string &name); - static TagValueId tagValue(const vespalib::string &value); + static TagKeyId tagKeyId(const vespalib::string &name); + static TagValueId tagValueId(const vespalib::string &value); static const vespalib::string& metricName(MetricNameId id); static const vespalib::string& description(DescriptionId id); diff --git a/metrics/src/vespa/metrics/xmlwriter.cpp b/metrics/src/vespa/metrics/xmlwriter.cpp index 197ffdd1e3d..90b25621cf8 100644 --- a/metrics/src/vespa/metrics/xmlwriter.cpp +++ b/metrics/src/vespa/metrics/xmlwriter.cpp @@ -98,9 +98,9 @@ XmlWriter::printCommonXmlParts(const Metric& metric) const if (_verbosity >= 3 && tags.size() > 0) { std::ostringstream ost; // XXX print tag values as well - ost << tags[0].key; + ost << tags[0].key(); for (uint32_t i=1; i