diff options
author | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2016-10-13 13:59:25 +0200 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2016-10-13 13:59:25 +0200 |
commit | c75bcde8223db4b34a59a0c966de8083810c8901 (patch) | |
tree | d0219a54815e29c2ac487e1897743174582efe1d /staging_vespalib | |
parent | e637f8d93c12b5f5efd58e16cb5e59aea6a6d423 (diff) |
Use empty metric consumer by default for total metrics
Attempting to use a different default here caused a regression during
node startup where metrics were unavailable.
Diffstat (limited to 'staging_vespalib')
-rw-r--r-- | staging_vespalib/src/tests/state_server/state_server_test.cpp | 11 | ||||
-rw-r--r-- | staging_vespalib/src/vespa/vespalib/net/state_api.cpp | 14 |
2 files changed, 17 insertions, 8 deletions
diff --git a/staging_vespalib/src/tests/state_server/state_server_test.cpp b/staging_vespalib/src/tests/state_server/state_server_test.cpp index b1593d2c70e..a5df5778368 100644 --- a/staging_vespalib/src/tests/state_server/state_server_test.cpp +++ b/staging_vespalib/src/tests/state_server/state_server_test.cpp @@ -322,13 +322,20 @@ struct EchoConsumer : MetricsProducer { } }; -TEST_FFFF("require that empty metrics consumer defaults to 'statereporter'", +TEST_FFFF("require that empty v1 metrics consumer defaults to 'statereporter'", SimpleHealthProducer(), EchoConsumer(), SimpleComponentConfigProducer(), StateApi(f1, f2, f3)) { std::map<vespalib::string,vespalib::string> my_params; EXPECT_EQUAL("{\"status\":{\"code\":\"up\"},\"metrics\":[\"statereporter\"]}", f4.get(host_tag, metrics_path, empty_params)); - EXPECT_EQUAL("[\"statereporter\"]", f4.get(host_tag, total_metrics_path, empty_params)); +} + +TEST_FFFF("require that empty total metrics consumer defaults to the empty string", + SimpleHealthProducer(), EchoConsumer(), SimpleComponentConfigProducer(), + StateApi(f1, f2, f3)) +{ + std::map<vespalib::string,vespalib::string> my_params; + EXPECT_EQUAL("[\"\"]", f4.get(host_tag, total_metrics_path, empty_params)); } TEST_FFFF("require that metrics consumer is passed correctly", diff --git a/staging_vespalib/src/vespa/vespalib/net/state_api.cpp b/staging_vespalib/src/vespa/vespalib/net/state_api.cpp index 1885de0f99b..924aec54cf2 100644 --- a/staging_vespalib/src/vespa/vespalib/net/state_api.cpp +++ b/staging_vespalib/src/vespa/vespalib/net/state_api.cpp @@ -53,12 +53,12 @@ void build_health_status(JSONStringer &json, const HealthProducer &healthProduce json.endObject(); } -vespalib::string get_consumer(const std::map<vespalib::string,vespalib::string> ¶ms) { +vespalib::string get_consumer(const std::map<vespalib::string,vespalib::string> ¶ms, + vespalib::stringref default_consumer) +{ auto consumer_lookup = params.find("consumer"); if (consumer_lookup == params.end()) { - // Using a 'statereporter' consumer removes many uninteresting per-thread - // metrics but retains their aggregates. - return "statereporter"; + return default_consumer; } return consumer_lookup->second; } @@ -144,11 +144,13 @@ StateApi::get(const vespalib::string &host, } else if (path == "/state/v1/health") { return respond_health(_healthProducer); } else if (path == "/state/v1/metrics") { - return respond_metrics(get_consumer(params), _healthProducer, _metricsProducer); + // Using a 'statereporter' consumer by default removes many uninteresting per-thread + // metrics but retains their aggregates. + return respond_metrics(get_consumer(params, "statereporter"), _healthProducer, _metricsProducer); } else if (path == "/state/v1/config") { return respond_config(_componentConfigProducer); } else if (path == "/metrics/total") { - return _metricsProducer.getTotalMetrics(get_consumer(params)); + return _metricsProducer.getTotalMetrics(get_consumer(params, "")); } else { return _handler_repo.get(host, path, params); } |