mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-23 13:45:04 +02:00
parent
4cf33b74f2
commit
f386920e60
@ -95,16 +95,6 @@ double Checkable::GetLastCheck(void) const
|
|||||||
return schedule_end;
|
return schedule_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Checkable::StateIsOK(CheckableType type, ServiceState state)
|
|
||||||
{
|
|
||||||
if (type == CheckableHost && Host::CalculateState(state) == HostUp)
|
|
||||||
return true;
|
|
||||||
else if (type == CheckableService && state == ServiceOK)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrigin::Ptr& origin)
|
void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrigin::Ptr& origin)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@ -184,13 +174,13 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
|
|||||||
|
|
||||||
if (!old_cr) {
|
if (!old_cr) {
|
||||||
SetStateType(StateTypeHard);
|
SetStateType(StateTypeHard);
|
||||||
} else if (StateIsOK(checkableType, cr->GetState())) {
|
} else if (IsStateOK(cr->GetState())) {
|
||||||
if (StateIsOK(checkableType, old_state) && old_stateType == StateTypeSoft) {
|
if (IsStateOK(old_state) && old_stateType == StateTypeSoft) {
|
||||||
SetStateType(StateTypeHard); // SOFT OK -> HARD OK
|
SetStateType(StateTypeHard); // SOFT OK -> HARD OK
|
||||||
recovery = true;
|
recovery = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StateIsOK(checkableType, old_state))
|
if (!IsStateOK(old_state))
|
||||||
recovery = true; // NOT OK -> SOFT/HARD OK
|
recovery = true; // NOT OK -> SOFT/HARD OK
|
||||||
|
|
||||||
ResetNotificationNumbers();
|
ResetNotificationNumbers();
|
||||||
@ -202,17 +192,17 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
|
|||||||
} else {
|
} else {
|
||||||
if (old_attempt >= GetMaxCheckAttempts()) {
|
if (old_attempt >= GetMaxCheckAttempts()) {
|
||||||
SetStateType(StateTypeHard);
|
SetStateType(StateTypeHard);
|
||||||
} else if (old_stateType == StateTypeSoft && !StateIsOK(checkableType, old_state)) {
|
} else if (old_stateType == StateTypeSoft && !IsStateOK(old_state)) {
|
||||||
SetStateType(StateTypeSoft);
|
SetStateType(StateTypeSoft);
|
||||||
attempt = old_attempt + 1; //NOT-OK -> NOT-OK counter
|
attempt = old_attempt + 1; // NOT-OK -> NOT-OK counter
|
||||||
} else if (StateIsOK(checkableType, old_state)) {
|
} else if (IsStateOK(old_state)) {
|
||||||
SetStateType(StateTypeSoft);
|
SetStateType(StateTypeSoft);
|
||||||
attempt = 1; //OK -> NOT-OK transition, reset the counter
|
attempt = 1; //OK -> NOT-OK transition, reset the counter
|
||||||
} else {
|
} else {
|
||||||
attempt = old_attempt;
|
attempt = old_attempt;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StateIsOK(checkableType, cr->GetState())) {
|
if (!IsStateOK(cr->GetState())) {
|
||||||
SaveLastState(cr->GetState(), Utility::GetTime());
|
SaveLastState(cr->GetState(), Utility::GetTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,7 +232,7 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
|
|||||||
|
|
||||||
/* remove acknowledgements */
|
/* remove acknowledgements */
|
||||||
if (GetAcknowledgement() == AcknowledgementNormal ||
|
if (GetAcknowledgement() == AcknowledgementNormal ||
|
||||||
(GetAcknowledgement() == AcknowledgementSticky && StateIsOK(checkableType, new_state))) {
|
(GetAcknowledgement() == AcknowledgementSticky && IsStateOK(new_state))) {
|
||||||
ClearAcknowledgement();
|
ClearAcknowledgement();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,7 +263,7 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
|
|||||||
SetLastHardStateChange(now);
|
SetLastHardStateChange(now);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StateIsOK(checkableType, new_state))
|
if (!IsStateOK(new_state))
|
||||||
TriggerDowntimes();
|
TriggerDowntimes();
|
||||||
|
|
||||||
/* statistics for external tools */
|
/* statistics for external tools */
|
||||||
@ -295,10 +285,10 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
|
|||||||
if (!old_cr)
|
if (!old_cr)
|
||||||
send_notification = false; /* Don't send notifications for the initial state change */
|
send_notification = false; /* Don't send notifications for the initial state change */
|
||||||
|
|
||||||
if (StateIsOK(checkableType, old_state) && old_stateType == StateTypeSoft)
|
if (IsStateOK(old_state) && old_stateType == StateTypeSoft)
|
||||||
send_notification = false; /* Don't send notifications for SOFT-OK -> HARD-OK. */
|
send_notification = false; /* Don't send notifications for SOFT-OK -> HARD-OK. */
|
||||||
|
|
||||||
if (is_volatile && StateIsOK(checkableType, old_state) && StateIsOK(checkableType, new_state))
|
if (is_volatile && IsStateOK(old_state) && IsStateOK(new_state))
|
||||||
send_notification = false; /* Don't send notifications for volatile OK -> OK changes. */
|
send_notification = false; /* Don't send notifications for volatile OK -> OK changes. */
|
||||||
|
|
||||||
bool send_downtime_notification = (GetLastInDowntime() != in_downtime);
|
bool send_downtime_notification = (GetLastInDowntime() != in_downtime);
|
||||||
|
@ -92,7 +92,7 @@ public:
|
|||||||
void UpdateNextCheck(void);
|
void UpdateNextCheck(void);
|
||||||
|
|
||||||
bool HasBeenChecked(void) const;
|
bool HasBeenChecked(void) const;
|
||||||
bool StateIsOK(CheckableType type, ServiceState state);
|
virtual bool IsStateOK(ServiceState state) = 0;
|
||||||
|
|
||||||
virtual double GetLastCheck(void) const override;
|
virtual double GetLastCheck(void) const override;
|
||||||
|
|
||||||
|
@ -182,6 +182,11 @@ HostState Host::GetLastHardState(void) const
|
|||||||
return CalculateState(GetLastHardStateRaw());
|
return CalculateState(GetLastHardStateRaw());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Host::IsStateOK(ServiceState state)
|
||||||
|
{
|
||||||
|
return Host::CalculateState(state) == HostUp;
|
||||||
|
}
|
||||||
|
|
||||||
void Host::SaveLastState(ServiceState state, double timestamp)
|
void Host::SaveLastState(ServiceState state, double timestamp)
|
||||||
{
|
{
|
||||||
if (state == ServiceOK || state == ServiceWarning)
|
if (state == ServiceOK || state == ServiceWarning)
|
||||||
|
@ -55,6 +55,7 @@ public:
|
|||||||
virtual HostState GetLastState(void) const override;
|
virtual HostState GetLastState(void) const override;
|
||||||
virtual HostState GetLastHardState(void) const override;
|
virtual HostState GetLastHardState(void) const override;
|
||||||
|
|
||||||
|
virtual bool IsStateOK(ServiceState state) override;
|
||||||
virtual void SaveLastState(ServiceState state, double timestamp) override;
|
virtual void SaveLastState(ServiceState state, double timestamp) override;
|
||||||
|
|
||||||
static HostState StateFromString(const String& state);
|
static HostState StateFromString(const String& state);
|
||||||
|
@ -126,6 +126,11 @@ Host::Ptr Service::GetHost(void) const
|
|||||||
return m_Host;
|
return m_Host;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Service::IsStateOK(ServiceState state)
|
||||||
|
{
|
||||||
|
return state == ServiceOK;
|
||||||
|
}
|
||||||
|
|
||||||
void Service::SaveLastState(ServiceState state, double timestamp)
|
void Service::SaveLastState(ServiceState state, double timestamp)
|
||||||
{
|
{
|
||||||
if (state == ServiceOK)
|
if (state == ServiceOK)
|
||||||
|
@ -45,6 +45,7 @@ public:
|
|||||||
|
|
||||||
virtual bool ResolveMacro(const String& macro, const CheckResult::Ptr& cr, Value *result) const override;
|
virtual bool ResolveMacro(const String& macro, const CheckResult::Ptr& cr, Value *result) const override;
|
||||||
|
|
||||||
|
virtual bool IsStateOK(ServiceState state) override;
|
||||||
virtual void SaveLastState(ServiceState state, double timestamp) override;
|
virtual void SaveLastState(ServiceState state, double timestamp) override;
|
||||||
|
|
||||||
static ServiceState StateFromString(const String& state);
|
static ServiceState StateFromString(const String& state);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user