summaryrefslogtreecommitdiffstats
path: root/logd
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2017-11-23 10:02:50 +0000
committerArne Juul <arnej@yahoo-inc.com>2017-12-04 13:26:58 +0000
commit2c32651ebfb987c628ef7fcfc53285a589205907 (patch)
tree0d31351e6c2aa1ff4f295889a724515fc6490b16 /logd
parent214d88c8db868077a318f49d51b0529c911cf6f9 (diff)
wire in a counter metric
Diffstat (limited to 'logd')
-rw-r--r--logd/src/apps/logd/main.cpp6
-rw-r--r--logd/src/logd/CMakeLists.txt10
-rw-r--r--logd/src/logd/forward.cpp5
-rw-r--r--logd/src/logd/forward.h4
-rw-r--r--logd/src/logd/metrics.cpp3
-rw-r--r--logd/src/logd/metrics.h36
-rw-r--r--logd/src/logd/state.cpp13
-rw-r--r--logd/src/logd/state.h6
-rw-r--r--logd/src/tests/forward/forward.cpp8
9 files changed, 69 insertions, 22 deletions
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 <logd/conf.h>
#include <logd/watch.h>
#include <logd/state.h>
+#include <logd/metrics.h>
#include <vespa/config/common/exceptions.h>
#include <csignal>
#include <unistd.h>
@@ -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 <vespa/vespalib/util/hashmap.h>
#include <map>
@@ -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 <vespa/vespalib/metrics/metrics_manager.h>
+
+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 <vespa/vespalib/metrics/simple_metrics_collector.h>
+#include <vespa/vespalib/metrics/simple_metrics_manager.h>
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 <vespa/vespalib/net/simple_health_producer.h>
#include <vespa/vespalib/net/simple_component_config_producer.h>
#include <vespa/vespalib/net/generic_state_handler.h>
-#include <vespa/vespalib/metrics/metrics_collector.h>
+#include <vespa/vespalib/metrics/metrics_manager.h>
#include <vespa/vespalib/metrics/producer.h>
namespace logdemon {
@@ -15,14 +15,14 @@ class StateReporter {
std::unique_ptr<vespalib::StateServer> _server;
vespalib::SimpleHealthProducer _health;
vespalib::SimpleComponentConfigProducer _components;
- std::shared_ptr<vespalib::metrics::MetricsCollector> _metrics;
+ std::shared_ptr<vespalib::metrics::MetricsManager> _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 <vespa/log/log.h>
#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/metrics/dummy_metrics_manager.h>
#include <logd/forward.h>
#include <sstream>
#include <fcntl.h>
@@ -49,14 +50,17 @@ struct ForwardFixture {
}
};
-TEST_FF("require that forwarder forwards if set", Forwarder(), ForwardFixture(f1, "forward.txt")) {
+std::shared_ptr<vespalib::metrics::MetricsManager> 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);