mirror of https://github.com/Icinga/icinga2.git
Don't load the replication component on standalone instances.
Fixes #3687
This commit is contained in:
parent
a8e584811f
commit
c878065a1f
|
@ -63,26 +63,14 @@ void ReplicationComponent::CheckResultRequestHandler(const RequestMessage& reque
|
||||||
String svcname = params.GetService();
|
String svcname = params.GetService();
|
||||||
Service::Ptr service = Service::GetByName(svcname);
|
Service::Ptr service = Service::GetByName(svcname);
|
||||||
|
|
||||||
Service::OnCheckResultReceived(service, params);
|
|
||||||
|
|
||||||
Dictionary::Ptr cr = params.GetCheckResult();
|
Dictionary::Ptr cr = params.GetCheckResult();
|
||||||
if (!cr)
|
if (!cr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Value active = cr->Get("active");
|
if (cr->Contains("checker") && cr->Get("checker") == EndpointManager::GetInstance()->GetIdentity())
|
||||||
|
return;
|
||||||
|
|
||||||
time_t ts;
|
Service::UpdateStatistics(cr);
|
||||||
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 (active.IsEmpty() || static_cast<long>(active))
|
|
||||||
CIB::UpdateActiveChecksStatistics(ts, 1);
|
|
||||||
else
|
|
||||||
CIB::UpdatePassiveChecksStatistics(ts, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReplicationComponent::EndpointConnectedHandler(const Endpoint::Ptr& endpoint)
|
void ReplicationComponent::EndpointConnectedHandler(const Endpoint::Ptr& endpoint)
|
||||||
|
|
|
@ -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" {}
|
|
@ -32,15 +32,7 @@ REGISTER_TYPE(IcingaApplication, NULL);
|
||||||
|
|
||||||
IcingaApplication::IcingaApplication(const Dictionary::Ptr& serializedUpdate)
|
IcingaApplication::IcingaApplication(const Dictionary::Ptr& serializedUpdate)
|
||||||
: Application(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.
|
* The entry point for the Icinga application.
|
||||||
|
|
|
@ -25,7 +25,6 @@ const int Service::DefaultMaxCheckAttempts = 3;
|
||||||
const int Service::DefaultCheckInterval = 5 * 60;
|
const int Service::DefaultCheckInterval = 5 * 60;
|
||||||
const int Service::CheckIntervalDivisor = 5;
|
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 String&)> Service::OnCheckerChanged;
|
||||||
boost::signal<void (const Service::Ptr&, const Value&)> Service::OnNextCheckChanged;
|
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"))
|
if (!result->Contains("active"))
|
||||||
result->Set("active", 1);
|
result->Set("active", 1);
|
||||||
|
|
||||||
|
if (!result->Contains("checker"))
|
||||||
|
result->Set("checker", EndpointManager::GetInstance()->GetIdentity());
|
||||||
|
|
||||||
ProcessCheckResult(result);
|
ProcessCheckResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -515,6 +517,8 @@ void Service::ProcessCheckResult(const Dictionary::Ptr& cr)
|
||||||
{
|
{
|
||||||
ApplyCheckResult(cr);
|
ApplyCheckResult(cr);
|
||||||
|
|
||||||
|
Service::UpdateStatistics(cr);
|
||||||
|
|
||||||
/* flush the current transaction so other instances see the service's
|
/* flush the current transaction so other instances see the service's
|
||||||
* new state when they receive the CheckResult message */
|
* new state when they receive the CheckResult message */
|
||||||
DynamicObject::FlushTx();
|
DynamicObject::FlushTx();
|
||||||
|
@ -531,3 +535,19 @@ void Service::ProcessCheckResult(const Dictionary::Ptr& cr)
|
||||||
|
|
||||||
EndpointManager::GetInstance()->SendMulticastMessage(rm);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -169,6 +169,7 @@ public:
|
||||||
void SetAcknowledgementExpiry(double timestamp);
|
void SetAcknowledgementExpiry(double timestamp);
|
||||||
|
|
||||||
void ApplyCheckResult(const Dictionary::Ptr& cr);
|
void ApplyCheckResult(const Dictionary::Ptr& cr);
|
||||||
|
static void UpdateStatistics(const Dictionary::Ptr& cr);
|
||||||
|
|
||||||
void BeginExecuteCheck(const function<void (void)>& callback);
|
void BeginExecuteCheck(const function<void (void)>& callback);
|
||||||
void ProcessCheckResult(const Dictionary::Ptr& cr);
|
void ProcessCheckResult(const Dictionary::Ptr& cr);
|
||||||
|
@ -179,7 +180,6 @@ public:
|
||||||
static ServiceStateType StateTypeFromString(const String& state);
|
static ServiceStateType StateTypeFromString(const String& state);
|
||||||
static String StateTypeToString(ServiceStateType 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 String&)> OnCheckerChanged;
|
||||||
static boost::signal<void (const Service::Ptr&, const Value&)> OnNextCheckChanged;
|
static boost::signal<void (const Service::Ptr&, const Value&)> OnNextCheckChanged;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue