diff options
Diffstat (limited to 'metrics')
-rw-r--r-- | metrics/src/vespa/metrics/CMakeLists.txt | 4 | ||||
-rw-r--r-- | metrics/src/vespa/metrics/repo.cpp | 71 | ||||
-rw-r--r-- | metrics/src/vespa/metrics/repo.h | 32 |
3 files changed, 106 insertions, 1 deletions
diff --git a/metrics/src/vespa/metrics/CMakeLists.txt b/metrics/src/vespa/metrics/CMakeLists.txt index 6eae8cd75e4..69088528a61 100644 --- a/metrics/src/vespa/metrics/CMakeLists.txt +++ b/metrics/src/vespa/metrics/CMakeLists.txt @@ -5,8 +5,8 @@ vespa_add_library(metrics countmetricvalues.cpp jsonwriter.cpp loadmetric.cpp - metric.cpp memoryconsumption.cpp + metric.cpp metricmanager.cpp metricset.cpp metricsnapshot.cpp @@ -14,12 +14,14 @@ vespa_add_library(metrics metricvalueset.cpp namehash.cpp printutils.cpp + repo.cpp state_api_adapter.cpp summetric.cpp textwriter.cpp valuemetric.cpp valuemetricvalues.cpp xmlwriter.cpp + INSTALL lib64 DEPENDS ) diff --git a/metrics/src/vespa/metrics/repo.cpp b/metrics/src/vespa/metrics/repo.cpp new file mode 100644 index 00000000000..0ea964b19b7 --- /dev/null +++ b/metrics/src/vespa/metrics/repo.cpp @@ -0,0 +1,71 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "repo.h" +#include <vespa/vespalib/metrics/name_collection.h> + +using vespalib::metrics::NameCollection; + +namespace metrics { + +namespace { +NameCollection metricNames; +NameCollection descriptions; +NameCollection tagKeys; +NameCollection tagValues; +} + +MetricNameId +Repo::metricId(const vespalib::string &name) +{ + size_t id = metricNames.resolve(name); + return MetricNameId(id); +} + +DescriptionId +Repo::descriptionId(const vespalib::string &name) +{ + size_t id = descriptions.resolve(name); + return DescriptionId(id); +} + +TagKeyId +Repo::tagKey(const vespalib::string &name) +{ + size_t id = tagKeys.resolve(name); + return TagKeyId(id); +} + +TagValueId +Repo::tagValue(const vespalib::string &value) +{ + size_t id = tagValues.resolve(value); + return TagValueId(id); +} + +const vespalib::string& +Repo::metricName(MetricNameId id) +{ + return metricNames.lookup(id.id()); +} + +const vespalib::string& +Repo::description(DescriptionId id) +{ + return descriptions.lookup(id.id()); +} + +const vespalib::string& +Repo::tagKey(TagKeyId id) +{ + return tagKeys.lookup(id.id()); +} + +const vespalib::string& +Repo::tagValue(TagValueId id) +{ + return tagValues.lookup(id.id()); +} + + +} // namespace metrics + diff --git a/metrics/src/vespa/metrics/repo.h b/metrics/src/vespa/metrics/repo.h new file mode 100644 index 00000000000..ddfeaf3f1b6 --- /dev/null +++ b/metrics/src/vespa/metrics/repo.h @@ -0,0 +1,32 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include <vespa/vespalib/stllike/string.h> +#include <vespa/vespalib/metrics/handle.h> + +namespace metrics { + +struct MetricNameIdTag {}; +struct DescriptionIdTag {}; +struct TagKeyIdTag {}; +struct TagValueIdTag {}; + +using MetricNameId = vespalib::metrics::Handle<MetricNameIdTag>; +using DescriptionId = vespalib::metrics::Handle<DescriptionIdTag>; +using TagKeyId = vespalib::metrics::Handle<TagKeyIdTag>; +using TagValueId = vespalib::metrics::Handle<TagValueIdTag>; + +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 const vespalib::string& metricName(MetricNameId id); + static const vespalib::string& description(DescriptionId id); + static const vespalib::string& tagKey(TagKeyId id); + static const vespalib::string& tagValue(TagValueId id); +}; + +} // metrics + |