Merge pull request #10399 from Icinga/severity-reachability

`Checkable::GetSeverity()`: consider reachability
This commit is contained in:
Julian Brost 2025-04-02 09:39:40 +02:00 committed by GitHub
commit 27e1850381
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 40 additions and 53 deletions

View File

@ -170,33 +170,29 @@ HostState Host::GetLastHardState() const
* sort by severity. It is therefore easier to keep them seperated here. */ * sort by severity. It is therefore easier to keep them seperated here. */
int Host::GetSeverity() const int Host::GetSeverity() const
{ {
int severity = 0;
ObjectLock olock(this); ObjectLock olock(this);
HostState state = GetState(); HostState state = GetState();
if (!HasBeenChecked()) { if (!HasBeenChecked()) {
severity = 16; return 16;
} else if (state == HostUp) { }
severity = 0; if (state == HostUp) {
} else { return 0;
if (IsReachable()) }
severity = 64;
else
severity = 32;
if (IsAcknowledged()) int severity = 32; // DOWN
if (IsAcknowledged()) {
severity += 512; severity += 512;
else if (IsInDowntime()) } else if (IsInDowntime()) {
severity += 256; severity += 256;
else } else if (!IsReachable()) {
severity += 1024;
} else {
severity += 2048; severity += 2048;
} }
olock.Unlock();
return severity; return severity;
} }
bool Host::IsStateOK(ServiceState state) const bool Host::IsStateOK(ServiceState state) const

View File

@ -111,46 +111,37 @@ Host::Ptr Service::GetHost() const
* sort by severity. It is therefore easier to keep them seperated here. */ * sort by severity. It is therefore easier to keep them seperated here. */
int Service::GetSeverity() const int Service::GetSeverity() const
{ {
int severity;
ObjectLock olock(this); ObjectLock olock(this);
ServiceState state = GetStateRaw(); ServiceState state = GetStateRaw();
if (!HasBeenChecked()) { if (!HasBeenChecked()) {
severity = 16; return 16;
} else if (state == ServiceOK) { }
severity = 0; if (state == ServiceOK) {
} else { return 0;
switch (state) { }
case ServiceWarning:
int severity = 0;
if (state == ServiceWarning) {
severity = 32; severity = 32;
break; } else if (state == ServiceUnknown) {
case ServiceUnknown:
severity = 64; severity = 64;
break; } else if (state == ServiceCritical) {
case ServiceCritical:
severity = 128; severity = 128;
break; } else {
default:
severity = 256; severity = 256;
} }
Host::Ptr host = GetHost(); if (IsAcknowledged()) {
ObjectLock hlock (host); severity += 512;
if (host->GetState() != HostUp) { } else if (IsInDowntime()) {
severity += 256;
} else if (!IsReachable()) {
severity += 1024; severity += 1024;
} else { } else {
if (IsAcknowledged())
severity += 512;
else if (IsInDowntime())
severity += 256;
else
severity += 2048; severity += 2048;
} }
hlock.Unlock();
}
olock.Unlock();
return severity; return severity;
} }