From f42b820007854c7ac5a8679c1a417f1ad3be1b93 Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Tue, 6 Jun 2017 19:50:37 +0200 Subject: [PATCH] GraphiteWriter: Add 'connected' to stats; fix reconnect exceptions --- lib/perfdata/graphitewriter.cpp | 12 +++++++----- lib/perfdata/graphitewriter.hpp | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/perfdata/graphitewriter.cpp b/lib/perfdata/graphitewriter.cpp index febc8dfbb..aaca7d8de 100644 --- a/lib/perfdata/graphitewriter.cpp +++ b/lib/perfdata/graphitewriter.cpp @@ -67,6 +67,7 @@ void GraphiteWriter::StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& Dictionary::Ptr stats = new Dictionary(); stats->Set("work_queue_items", workQueueItems); stats->Set("work_queue_item_rate", workQueueItemRate); + stats->Set("connected", graphitewriter->GetConnected()); nodes->Set(graphitewriter->GetName(), stats); @@ -94,7 +95,8 @@ void GraphiteWriter::Start(bool runtimeCreated) m_ReconnectTimer->Start(); m_ReconnectTimer->Reschedule(0); - Service::OnNewCheckResult.connect(boost::bind(&GraphiteWriter::CheckResultHandler, this, _1, _2)); + /* Register event handlers. */ + Checkable::OnNewCheckResult.connect(boost::bind(&GraphiteWriter::CheckResultHandler, this, _1, _2)); } void GraphiteWriter::Stop(bool runtimeRemoved) @@ -179,10 +181,10 @@ void GraphiteWriter::Disconnect(void) void GraphiteWriter::CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr) { - m_WorkQueue.Enqueue(boost::bind(&GraphiteWriter::InternalCheckResultHandler, this, checkable, cr)); + m_WorkQueue.Enqueue(boost::bind(&GraphiteWriter::CheckResultHandlerInternal, this, checkable, cr)); } -void GraphiteWriter::InternalCheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr) +void GraphiteWriter::CheckResultHandlerInternal(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr) { AssertOnWorkQueue(); @@ -330,7 +332,7 @@ void GraphiteWriter::SendMetric(const String& prefix, const String& name, double ObjectLock olock(this); - if (!m_Stream) + if (!GetConnected()) return; try { @@ -339,7 +341,7 @@ void GraphiteWriter::SendMetric(const String& prefix, const String& name, double Log(LogCritical, "GraphiteWriter") << "Cannot write to TCP socket on host '" << GetHost() << "' port '" << GetPort() << "'."; - m_Stream.reset(); + throw ex; } } diff --git a/lib/perfdata/graphitewriter.hpp b/lib/perfdata/graphitewriter.hpp index 1cd3f090c..02eb849bd 100644 --- a/lib/perfdata/graphitewriter.hpp +++ b/lib/perfdata/graphitewriter.hpp @@ -61,7 +61,7 @@ private: Timer::Ptr m_ReconnectTimer; void CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr); - void InternalCheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr); + void CheckResultHandlerInternal(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr); void SendMetric(const String& prefix, const String& name, double value, double ts); void SendPerfdata(const String& prefix, const CheckResult::Ptr& cr, double ts); static String EscapeMetric(const String& str, bool legacyMode = false);