From 686936d12ded663c40fb4b0cb6ac28d48e11813e Mon Sep 17 00:00:00 2001 From: Geir Storli Date: Thu, 28 Mar 2019 10:07:15 +0000 Subject: Count bad log lines. --- logd/src/logd/rpc_forwarder.cpp | 7 +++++-- logd/src/logd/rpc_forwarder.h | 1 + logd/src/tests/rpc_forwarder/rpc_forwarder_test.cpp | 20 ++++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) (limited to 'logd') diff --git a/logd/src/logd/rpc_forwarder.cpp b/logd/src/logd/rpc_forwarder.cpp index 37436c713bd..4f637a34836 100644 --- a/logd/src/logd/rpc_forwarder.cpp +++ b/logd/src/logd/rpc_forwarder.cpp @@ -23,7 +23,8 @@ RpcForwarder::RpcForwarder(const vespalib::string &hostname, int rpc_port, _max_messages_per_request(max_messages_per_request), _supervisor(), _target(), - _messages() + _messages(), + _bad_lines(0) { _supervisor.Start(); _target = _supervisor.GetTarget(_connection_spec.c_str()); @@ -69,6 +70,7 @@ RpcForwarder::forwardLine(std::string_view line) message.parse_log_line(line); } catch (BadLogLineException &e) { LOG(spam, "Skipping bad logline: %s", e.what()); + ++_bad_lines; return; } _messages.push_back(std::move(message)); @@ -107,12 +109,13 @@ RpcForwarder::flush() int RpcForwarder::badLines() const { - return 0; + return _bad_lines; } void RpcForwarder::resetBadLines() { + _bad_lines = 0; } } diff --git a/logd/src/logd/rpc_forwarder.h b/logd/src/logd/rpc_forwarder.h index 65ac0b0af44..64ea0ebea64 100644 --- a/logd/src/logd/rpc_forwarder.h +++ b/logd/src/logd/rpc_forwarder.h @@ -21,6 +21,7 @@ private: FRT_Supervisor _supervisor; FRT_Target* _target; std::vector _messages; + int _bad_lines; public: RpcForwarder(const vespalib::string& logserver_host, int logserver_rpc_port, diff --git a/logd/src/tests/rpc_forwarder/rpc_forwarder_test.cpp b/logd/src/tests/rpc_forwarder/rpc_forwarder_test.cpp index 183132bb39d..be20d715c81 100644 --- a/logd/src/tests/rpc_forwarder/rpc_forwarder_test.cpp +++ b/logd/src/tests/rpc_forwarder/rpc_forwarder_test.cpp @@ -93,6 +93,9 @@ struct RpcForwarderTest : public ::testing::Test { void forward_line(const std::string& payload) { forwarder.forwardLine(make_log_line(payload)); } + void forward_bad_line() { + forwarder.forwardLine("badline"); + } void flush() { forwarder.flush(); } @@ -144,6 +147,23 @@ TEST_F(RpcForwarderTest, automatically_sends_rpc_when_max_messages_limit_is_reac expect_messages(2, {"a", "b", "c", "d", "e", "f"}); } +TEST_F(RpcForwarderTest, bad_log_lines_are_counted_but_not_sent) +{ + forward_line("a"); + forward_bad_line(); + EXPECT_EQ(1, forwarder.badLines()); + flush(); + expect_messages(1, {"a"}); +} + +TEST_F(RpcForwarderTest, bad_log_lines_count_can_be_reset) +{ + forward_bad_line(); + EXPECT_EQ(1, forwarder.badLines()); + forwarder.resetBadLines(); + EXPECT_EQ(0, forwarder.badLines()); +} + TEST_F(RpcForwarderTest, throws_when_rpc_reply_contains_errors) { server.reply_with_error = true; -- cgit v1.2.3