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)
--- /dev/null
+/******************************************************************************
+ * 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" {}
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.
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;
if (!result->Contains("active"))
result->Set("active", 1);
+ if (!result->Contains("checker"))
+ result->Set("checker", EndpointManager::GetInstance()->GetIdentity());
+
ProcessCheckResult(result);
}
{
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();
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);
+}
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);
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;