]> granicus.if.org Git - icinga2/commitdiff
Don't load the replication component on standalone instances.
authorGunnar Beutner <gunnar.beutner@netways.de>
Mon, 11 Feb 2013 22:37:39 +0000 (23:37 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Mon, 11 Feb 2013 22:37:39 +0000 (23:37 +0100)
Fixes #3687

components/replication/replicationcomponent.cpp
itl/cluster.conf [new file with mode: 0644]
lib/icinga/icingaapplication.cpp
lib/icinga/service-check.cpp
lib/icinga/service.h

index 3d97e035fcd468a9a497197b48c4b0e489a124e7..e35a6e3e58f3513db07f6284c0a2a76ed3771219 100644 (file)
@@ -63,26 +63,14 @@ void ReplicationComponent::CheckResultRequestHandler(const RequestMessage& reque
        String svcname = params.GetService();
        Service::Ptr service = Service::GetByName(svcname);
 
-       Service::OnCheckResultReceived(service, params);
-
        Dictionary::Ptr cr = params.GetCheckResult();
        if (!cr)
                return;
 
-       Value active = cr->Get("active");
-
-       time_t ts;
-       Value schedule_end = cr->Get("schedule_end");
-
-       if (!schedule_end.IsEmpty())
-               ts = static_cast<time_t>(schedule_end);
-       else
-               ts = static_cast<time_t>(Utility::GetTime());
+       if (cr->Contains("checker") && cr->Get("checker") == EndpointManager::GetInstance()->GetIdentity())
+               return;
 
-       if (active.IsEmpty() || static_cast<long>(active))
-               CIB::UpdateActiveChecksStatistics(ts, 1);
-       else
-               CIB::UpdatePassiveChecksStatistics(ts, 1);
+       Service::UpdateStatistics(cr);
 }
 
 void ReplicationComponent::EndpointConnectedHandler(const Endpoint::Ptr& endpoint)
diff --git a/itl/cluster.conf b/itl/cluster.conf
new file mode 100644 (file)
index 0000000..a469457
--- /dev/null
@@ -0,0 +1,20 @@
+/******************************************************************************
+ * Icinga 2                                                                   *
+ * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/)        *
+ *                                                                            *
+ * This program is free software; you can redistribute it and/or              *
+ * modify it under the terms of the GNU General Public License                *
+ * as published by the Free Software Foundation; either version 2             *
+ * of the License, or (at your option) any later version.                     *
+ *                                                                            *
+ * This program is distributed in the hope that it will be useful,            *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
+ * GNU General Public License for more details.                               *
+ *                                                                            *
+ * You should have received a copy of the GNU General Public License          *
+ * along with this program; if not, write to the Free Software Foundation     *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *
+ ******************************************************************************/
+
+local object Component "replication" {}
index b3614ddde14f7bc928482feb4728c3d535a426a7..a961d9be1f29a339aa2de85cecda0e0cfd07a2ea 100644 (file)
@@ -32,15 +32,7 @@ REGISTER_TYPE(IcingaApplication, NULL);
 
 IcingaApplication::IcingaApplication(const Dictionary::Ptr& serializedUpdate)
        : Application(serializedUpdate)
-{
-       /* load replication config component */
-       ConfigItemBuilder::Ptr replicationComponentConfig = boost::make_shared<ConfigItemBuilder>();
-       replicationComponentConfig->SetType("Component");
-       replicationComponentConfig->SetName("replication");
-       replicationComponentConfig->SetLocal(true);
-       replicationComponentConfig->Compile()->Commit();
-       replicationComponentConfig.reset();
-}
+{ }
 
 /**
  * The entry point for the Icinga application.
index a27d567b97545ca3b3a6909489a298e460ee24cd..b702040fee7ccf06c41b668569a13a0485c73259 100644 (file)
@@ -25,7 +25,6 @@ const int Service::DefaultMaxCheckAttempts = 3;
 const int Service::DefaultCheckInterval = 5 * 60;
 const int Service::CheckIntervalDivisor = 5;
 
-boost::signal<void (const Service::Ptr&, const CheckResultMessage&)> Service::OnCheckResultReceived;
 boost::signal<void (const Service::Ptr&, const String&)> Service::OnCheckerChanged;
 boost::signal<void (const Service::Ptr&, const Value&)> Service::OnNextCheckChanged;
 
@@ -500,6 +499,9 @@ void Service::CheckCompletedHandler(const Dictionary::Ptr& scheduleInfo,
                if (!result->Contains("active"))
                        result->Set("active", 1);
 
+               if (!result->Contains("checker"))
+                       result->Set("checker", EndpointManager::GetInstance()->GetIdentity());
+
                ProcessCheckResult(result);
        }
 
@@ -515,6 +517,8 @@ void Service::ProcessCheckResult(const Dictionary::Ptr& cr)
 {
        ApplyCheckResult(cr);
 
+       Service::UpdateStatistics(cr);
+
        /* flush the current transaction so other instances see the service's
         * new state when they receive the CheckResult message */
        DynamicObject::FlushTx();
@@ -531,3 +535,19 @@ void Service::ProcessCheckResult(const Dictionary::Ptr& cr)
 
        EndpointManager::GetInstance()->SendMulticastMessage(rm);
 }
+
+void Service::UpdateStatistics(const Dictionary::Ptr& cr)
+{
+       time_t ts;
+       Value schedule_end = cr->Get("schedule_end");
+       if (!schedule_end.IsEmpty())
+               ts = static_cast<time_t>(schedule_end);
+       else
+               ts = static_cast<time_t>(Utility::GetTime());
+
+       Value active = cr->Get("active");
+       if (active.IsEmpty() || static_cast<long>(active))
+               CIB::UpdateActiveChecksStatistics(ts, 1);
+       else
+               CIB::UpdatePassiveChecksStatistics(ts, 1);
+}
index 18826477e162ae7869c353ff6982f319986f043c..88796d3cedbc148e9bcc5567d26efd4fbe076bbc 100644 (file)
@@ -169,6 +169,7 @@ public:
        void SetAcknowledgementExpiry(double timestamp);
 
        void ApplyCheckResult(const Dictionary::Ptr& cr);
+       static void UpdateStatistics(const Dictionary::Ptr& cr);
 
        void BeginExecuteCheck(const function<void (void)>& callback);
        void ProcessCheckResult(const Dictionary::Ptr& cr);
@@ -179,7 +180,6 @@ public:
        static ServiceStateType StateTypeFromString(const String& state);
        static String StateTypeToString(ServiceStateType state);
 
-       static boost::signal<void (const Service::Ptr& service, const CheckResultMessage&)> OnCheckResultReceived;
        static boost::signal<void (const Service::Ptr&, const String&)> OnCheckerChanged;
        static boost::signal<void (const Service::Ptr&, const Value&)> OnNextCheckChanged;