summaryrefslogtreecommitdiffstats
path: root/staging_vespalib
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahoo-inc.com>2016-10-13 13:59:25 +0200
committerTor Brede Vekterli <vekterli@yahoo-inc.com>2016-10-13 13:59:25 +0200
commitc75bcde8223db4b34a59a0c966de8083810c8901 (patch)
treed0219a54815e29c2ac487e1897743174582efe1d /staging_vespalib
parente637f8d93c12b5f5efd58e16cb5e59aea6a6d423 (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.cpp11
-rw-r--r--staging_vespalib/src/vespa/vespalib/net/state_api.cpp14
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> &params) {
+vespalib::string get_consumer(const std::map<vespalib::string,vespalib::string> &params,
+ 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);
}