From 2c32651ebfb987c628ef7fcfc53285a589205907 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Thu, 23 Nov 2017 10:02:50 +0000 Subject: wire in a counter metric --- logd/src/apps/logd/main.cpp | 6 ++++-- logd/src/logd/CMakeLists.txt | 10 ++++++---- logd/src/logd/forward.cpp | 5 ++++- logd/src/logd/forward.h | 4 +++- logd/src/logd/metrics.cpp | 3 +++ logd/src/logd/metrics.h | 36 ++++++++++++++++++++++++++++++++++++ logd/src/logd/state.cpp | 13 ++++--------- logd/src/logd/state.h | 6 +++--- logd/src/tests/forward/forward.cpp | 8 ++++++-- 9 files changed, 69 insertions(+), 22 deletions(-) create mode 100644 logd/src/logd/metrics.cpp create mode 100644 logd/src/logd/metrics.h (limited to 'logd') diff --git a/logd/src/apps/logd/main.cpp b/logd/src/apps/logd/main.cpp index 70df928dfd2..f9d760c4d18 100644 --- a/logd/src/apps/logd/main.cpp +++ b/logd/src/apps/logd/main.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -21,7 +22,9 @@ using config::FileSpec; int main(int, char**) { - Forwarder fwd; + StateReporter stateReporter; + Metrics metrics(stateReporter.metrics()); + Forwarder fwd(metrics); EV_STARTED("logdemon"); @@ -31,7 +34,6 @@ int main(int, char**) try { ConfSub subscriber(fwd, config::ConfigUri(cfid)); - StateReporter stateReporter; int sleepcount = 0; while (true) { diff --git a/logd/src/logd/CMakeLists.txt b/logd/src/logd/CMakeLists.txt index 3ef48f9255a..78892fdeca6 100644 --- a/logd/src/logd/CMakeLists.txt +++ b/logd/src/logd/CMakeLists.txt @@ -1,14 +1,16 @@ # Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. vespa_add_library(logd STATIC SOURCES - watch.cpp - conn.cpp + cmdbuf.cpp conf.cpp + conn.cpp forward.cpp - service.cpp - cmdbuf.cpp + metrics.cpp perform.cpp + service.cpp state.cpp + watch.cpp + DEPENDS ) vespa_generate_config(logd ../main/resources/configdefinitions/logd.def) diff --git a/logd/src/logd/forward.cpp b/logd/src/logd/forward.cpp index 66031ba2539..eba38dbcbd3 100644 --- a/logd/src/logd/forward.cpp +++ b/logd/src/logd/forward.cpp @@ -11,8 +11,9 @@ LOG_SETUP(""); namespace logdemon { -Forwarder::Forwarder() +Forwarder::Forwarder(Metrics &metrics) : _logserverfd(-1), + _metrics(metrics), _forwardMap(), _levelparser(), knownServices(), @@ -172,6 +173,8 @@ Forwarder::parseline(const char *linestart, const char *lineend) return false; } + _metrics.countLine(level, service); + // Check overrides ForwardMap::iterator found = _forwardMap.find(l); if (found != _forwardMap.end()) { diff --git a/logd/src/logd/forward.h b/logd/src/logd/forward.h index 794db3bb45f..e012db205fe 100644 --- a/logd/src/logd/forward.h +++ b/logd/src/logd/forward.h @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include "service.h" +#include "metrics.h" #include #include @@ -23,6 +24,7 @@ class Forwarder { private: int _logserverfd; + Metrics &_metrics; ForwardMap _forwardMap; LevelParser _levelparser; const char *copystr(const char *b, const char *e) { @@ -36,7 +38,7 @@ private: public: Services knownServices; int _badLines; - Forwarder(); + Forwarder(Metrics &metrics); ~Forwarder(); void forwardText(const char *text, int len); void forwardLine(const char *line, const char *eol); diff --git a/logd/src/logd/metrics.cpp b/logd/src/logd/metrics.cpp new file mode 100644 index 00000000000..1a70a2226e2 --- /dev/null +++ b/logd/src/logd/metrics.cpp @@ -0,0 +1,3 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "metrics.h" diff --git a/logd/src/logd/metrics.h b/logd/src/logd/metrics.h new file mode 100644 index 00000000000..860632b3031 --- /dev/null +++ b/logd/src/logd/metrics.h @@ -0,0 +1,36 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include + +namespace logdemon { + +using vespalib::metrics::Dimension; +using vespalib::metrics::Counter; +using vespalib::metrics::MetricsManager; +using vespalib::metrics::Point; + +struct Metrics { + MetricsManager &metrics; + const Dimension loglevel; + const Dimension servicename; + const Counter loglines; + + Metrics(MetricsManager &m) + : metrics(m), + loglevel(m.dimension("loglevel")), + servicename(m.dimension("servicename")), + loglines(m.counter("loglines")) + {} + + void countLine(const vespalib::string &level, + const vespalib::string &service) const + { + Point p = metrics.pointBuilder() + .bind(loglevel, level) + .bind(servicename, service); + loglines.add(1, p); + } +}; + +} // namespace logdemon diff --git a/logd/src/logd/state.cpp b/logd/src/logd/state.cpp index 232c300befa..e1df1412215 100644 --- a/logd/src/logd/state.cpp +++ b/logd/src/logd/state.cpp @@ -4,24 +4,19 @@ LOG_SETUP(""); #include "state.h" -#include +#include namespace logdemon { -vespalib::metrics::CollectorConfig minute() -{ - vespalib::metrics::CollectorConfig conf; - conf.sliding_window_seconds = 60; - return conf; -} - +using vespalib::metrics::SimpleMetricsManager; +using vespalib::metrics::SimpleManagerConfig; StateReporter::StateReporter() : _port(-1), _server(), _health(), _components(), - _metrics(vespalib::metrics::SimpleMetricsCollector::create(minute())), + _metrics(SimpleMetricsManager::create(SimpleManagerConfig())), _producer(_metrics) { } diff --git a/logd/src/logd/state.h b/logd/src/logd/state.h index 845aab502a4..cd295d80bb0 100644 --- a/logd/src/logd/state.h +++ b/logd/src/logd/state.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include namespace logdemon { @@ -15,14 +15,14 @@ class StateReporter { std::unique_ptr _server; vespalib::SimpleHealthProducer _health; vespalib::SimpleComponentConfigProducer _components; - std::shared_ptr _metrics; + std::shared_ptr _metrics; vespalib::metrics::Producer _producer; public: StateReporter(); ~StateReporter() {} void setStatePort(int statePort); void gotConf(size_t generation); - vespalib::metrics::MetricsCollector &metrics(); + vespalib::metrics::MetricsManager &metrics() { return *_metrics; } }; } // namespace diff --git a/logd/src/tests/forward/forward.cpp b/logd/src/tests/forward/forward.cpp index 13e31cea464..59bba2d3830 100644 --- a/logd/src/tests/forward/forward.cpp +++ b/logd/src/tests/forward/forward.cpp @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include #include +#include #include #include #include @@ -49,14 +50,17 @@ struct ForwardFixture { } }; -TEST_FF("require that forwarder forwards if set", Forwarder(), ForwardFixture(f1, "forward.txt")) { +std::shared_ptr dummy = vespalib::metrics::DummyMetricsManager::create(); +Metrics m(*dummy); + +TEST_FF("require that forwarder forwards if set", Forwarder(m), ForwardFixture(f1, "forward.txt")) { ForwardMap forwardMap; forwardMap[Logger::event] = true; f1.setForwardMap(forwardMap); f2.verifyForward(true); } -TEST_FF("require that forwarder does not forward if not set", Forwarder(), ForwardFixture(f1, "forward.txt")) { +TEST_FF("require that forwarder does not forward if not set", Forwarder(m), ForwardFixture(f1, "forward.txt")) { ForwardMap forwardMap; forwardMap[Logger::event] = false; f1.setForwardMap(forwardMap); -- cgit v1.2.3