]> granicus.if.org Git - icinga2/commitdiff
Implement HA functionality for OpenTsdb feature
authorMichael Friedrich <michael.friedrich@icinga.com>
Wed, 24 Oct 2018 11:55:19 +0000 (13:55 +0200)
committerMichael Friedrich <michael.friedrich@icinga.com>
Wed, 24 Oct 2018 12:42:46 +0000 (14:42 +0200)
lib/perfdata/opentsdbwriter.cpp
lib/perfdata/opentsdbwriter.hpp
lib/perfdata/opentsdbwriter.ti

index 1099f4449037a8f4eb48f311ba53c2438ccfb472..78feea8f26f591155e16a55bf3d2e482b826805c 100644 (file)
@@ -44,6 +44,20 @@ REGISTER_TYPE(OpenTsdbWriter);
 
 REGISTER_STATSFUNCTION(OpenTsdbWriter, &OpenTsdbWriter::StatsFunc);
 
+void OpenTsdbWriter::OnConfigLoaded()
+{
+       ObjectImpl<OpenTsdbWriter>::OnConfigLoaded();
+
+       if (!GetEnableHa()) {
+               Log(LogDebug, "OpenTsdbWriter")
+                       << "HA functionality disabled. Won't pause connection: " << GetName();
+
+               SetHAMode(HARunEverywhere);
+       } else {
+               SetHAMode(HARunOnce);
+       }
+}
+
 void OpenTsdbWriter::StatsFunc(const Dictionary::Ptr& status, const Array::Ptr&)
 {
        DictionaryData nodes;
@@ -55,12 +69,12 @@ void OpenTsdbWriter::StatsFunc(const Dictionary::Ptr& status, const Array::Ptr&)
        status->Set("opentsdbwriter", new Dictionary(std::move(nodes)));
 }
 
-void OpenTsdbWriter::Start(bool runtimeCreated)
+void OpenTsdbWriter::Resume()
 {
-       ObjectImpl<OpenTsdbWriter>::Start(runtimeCreated);
+       ObjectImpl<OpenTsdbWriter>::Resume();
 
        Log(LogInformation, "OpentsdbWriter")
-               << "'" << GetName() << "' started.";
+               << "'" << GetName() << "' resumed.";
 
        m_ReconnectTimer = new Timer();
        m_ReconnectTimer->SetInterval(10);
@@ -71,16 +85,19 @@ void OpenTsdbWriter::Start(bool runtimeCreated)
        Service::OnNewCheckResult.connect(std::bind(&OpenTsdbWriter::CheckResultHandler, this, _1, _2));
 }
 
-void OpenTsdbWriter::Stop(bool runtimeRemoved)
+void OpenTsdbWriter::Pause()
 {
        Log(LogInformation, "OpentsdbWriter")
-               << "'" << GetName() << "' stopped.";
+               << "'" << GetName() << "' paused.";
 
-       ObjectImpl<OpenTsdbWriter>::Stop(runtimeRemoved);
+       ObjectImpl<OpenTsdbWriter>::Pause();
 }
 
 void OpenTsdbWriter::ReconnectTimerHandler()
 {
+       if (IsPaused())
+               return;
+
        if (m_Stream)
                return;
 
@@ -102,6 +119,9 @@ void OpenTsdbWriter::ReconnectTimerHandler()
 
 void OpenTsdbWriter::CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr)
 {
+       if (IsPaused())
+               return;
+
        CONTEXT("Processing check result for '" + checkable->GetName() + "'");
 
        if (!IcingaApplication::GetInstance()->GetEnablePerfdata() || !checkable->GetEnablePerfdata())
index 4d40387dd9eaf36020a2ca5d5d552a3dcab0a296..193d6b31a66f5fa6c29123cd7878c881e0c2988b 100644 (file)
@@ -44,8 +44,9 @@ public:
        static void StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& perfdata);
 
 protected:
-       void Start(bool runtimeCreated) override;
-       void Stop(bool runtimeRemoved) override;
+       void OnConfigLoaded() override;
+       void Resume() override;
+       void Pause() override;
 
 private:
        Stream::Ptr m_Stream;
index fbec3a4914e6964014cc23e55201dcf5393d7dcb..3418e1606cc0cec6740394ac179e3cdd546ab3ab 100644 (file)
@@ -34,6 +34,9 @@ class OpenTsdbWriter : ConfigObject
        [config] String port {
                default {{{ return "4242"; }}}
        };
+       [config] bool enable_ha {
+               default {{{ return true; }}}
+       };
 };
 
 }