Livestatus: Add sanity checks for empty values

This commit is contained in:
Michael Friedrich 2015-02-15 16:48:09 +01:00 committed by Michael Friedrich
parent f201886865
commit c3b365dc62
2 changed files with 257 additions and 43 deletions

View File

@ -80,34 +80,64 @@ void HostGroupsTable::FetchRows(const AddRowFunction& addRowFn)
Value HostGroupsTable::NameAccessor(const Value& row) Value HostGroupsTable::NameAccessor(const Value& row)
{ {
return static_cast<HostGroup::Ptr>(row)->GetName(); HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
return hg->GetName();
} }
Value HostGroupsTable::AliasAccessor(const Value& row) Value HostGroupsTable::AliasAccessor(const Value& row)
{ {
return static_cast<HostGroup::Ptr>(row)->GetDisplayName(); HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
return hg->GetDisplayName();
} }
Value HostGroupsTable::NotesAccessor(const Value& row) Value HostGroupsTable::NotesAccessor(const Value& row)
{ {
return static_cast<HostGroup::Ptr>(row)->GetNotes(); HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
return hg->GetNotes();
} }
Value HostGroupsTable::NotesUrlAccessor(const Value& row) Value HostGroupsTable::NotesUrlAccessor(const Value& row)
{ {
return static_cast<HostGroup::Ptr>(row)->GetNotesUrl(); HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
return hg->GetNotesUrl();
} }
Value HostGroupsTable::ActionUrlAccessor(const Value& row) Value HostGroupsTable::ActionUrlAccessor(const Value& row)
{ {
return static_cast<HostGroup::Ptr>(row)->GetActionUrl(); HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
return hg->GetActionUrl();
} }
Value HostGroupsTable::MembersAccessor(const Value& row) Value HostGroupsTable::MembersAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
Array::Ptr members = new Array(); Array::Ptr members = new Array();
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
members->Add(host->GetName()); members->Add(host->GetName());
} }
@ -116,9 +146,14 @@ Value HostGroupsTable::MembersAccessor(const Value& row)
Value HostGroupsTable::MembersWithStateAccessor(const Value& row) Value HostGroupsTable::MembersWithStateAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
Array::Ptr members = new Array(); Array::Ptr members = new Array();
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
Array::Ptr member_state = new Array(); Array::Ptr member_state = new Array();
member_state->Add(host->GetName()); member_state->Add(host->GetName());
member_state->Add(host->GetState()); member_state->Add(host->GetState());
@ -130,9 +165,14 @@ Value HostGroupsTable::MembersWithStateAccessor(const Value& row)
Value HostGroupsTable::WorstHostStateAccessor(const Value& row) Value HostGroupsTable::WorstHostStateAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int worst_host = HostUp; int worst_host = HostUp;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
if (host->GetState() > worst_host) if (host->GetState() > worst_host)
worst_host = host->GetState(); worst_host = host->GetState();
} }
@ -142,14 +182,24 @@ Value HostGroupsTable::WorstHostStateAccessor(const Value& row)
Value HostGroupsTable::NumHostsAccessor(const Value& row) Value HostGroupsTable::NumHostsAccessor(const Value& row)
{ {
return static_cast<long>(static_cast<HostGroup::Ptr>(row)->GetMembers().size()); HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
return hg->GetMembers().size();
} }
Value HostGroupsTable::NumHostsPendingAccessor(const Value& row) Value HostGroupsTable::NumHostsPendingAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_hosts = 0; int num_hosts = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
/* no checkresult */ /* no checkresult */
if (!host->GetLastCheckResult()) if (!host->GetLastCheckResult())
num_hosts++; num_hosts++;
@ -160,9 +210,14 @@ Value HostGroupsTable::NumHostsPendingAccessor(const Value& row)
Value HostGroupsTable::NumHostsUpAccessor(const Value& row) Value HostGroupsTable::NumHostsUpAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_hosts = 0; int num_hosts = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
if (host->GetState() == HostUp) if (host->GetState() == HostUp)
num_hosts++; num_hosts++;
} }
@ -172,9 +227,14 @@ Value HostGroupsTable::NumHostsUpAccessor(const Value& row)
Value HostGroupsTable::NumHostsDownAccessor(const Value& row) Value HostGroupsTable::NumHostsDownAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_hosts = 0; int num_hosts = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
if (host->GetState() == HostDown) if (host->GetState() == HostDown)
num_hosts++; num_hosts++;
} }
@ -184,9 +244,14 @@ Value HostGroupsTable::NumHostsDownAccessor(const Value& row)
Value HostGroupsTable::NumHostsUnreachAccessor(const Value& row) Value HostGroupsTable::NumHostsUnreachAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_hosts = 0; int num_hosts = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
if (!host->IsReachable()) if (!host->IsReachable())
num_hosts++; num_hosts++;
} }
@ -196,9 +261,13 @@ Value HostGroupsTable::NumHostsUnreachAccessor(const Value& row)
Value HostGroupsTable::NumServicesAccessor(const Value& row) Value HostGroupsTable::NumServicesAccessor(const Value& row)
{ {
int num_services = 0;
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row); HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0;
if (hg->GetMembers().size() == 0) if (hg->GetMembers().size() == 0)
return 0; return 0;
@ -211,9 +280,14 @@ Value HostGroupsTable::NumServicesAccessor(const Value& row)
Value HostGroupsTable::WorstServicesStateAccessor(const Value& row) Value HostGroupsTable::WorstServicesStateAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
Value worst_service = ServiceOK; Value worst_service = ServiceOK;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetState() > worst_service) if (service->GetState() > worst_service)
worst_service = service->GetState(); worst_service = service->GetState();
@ -225,9 +299,14 @@ Value HostGroupsTable::WorstServicesStateAccessor(const Value& row)
Value HostGroupsTable::NumServicesPendingAccessor(const Value& row) Value HostGroupsTable::NumServicesPendingAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (!service->GetLastCheckResult()) if (!service->GetLastCheckResult())
num_services++; num_services++;
@ -239,9 +318,14 @@ Value HostGroupsTable::NumServicesPendingAccessor(const Value& row)
Value HostGroupsTable::NumServicesOkAccessor(const Value& row) Value HostGroupsTable::NumServicesOkAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetState() == ServiceOK) if (service->GetState() == ServiceOK)
num_services++; num_services++;
@ -253,9 +337,14 @@ Value HostGroupsTable::NumServicesOkAccessor(const Value& row)
Value HostGroupsTable::NumServicesWarnAccessor(const Value& row) Value HostGroupsTable::NumServicesWarnAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetState() == ServiceWarning) if (service->GetState() == ServiceWarning)
num_services++; num_services++;
@ -267,9 +356,14 @@ Value HostGroupsTable::NumServicesWarnAccessor(const Value& row)
Value HostGroupsTable::NumServicesCritAccessor(const Value& row) Value HostGroupsTable::NumServicesCritAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetState() == ServiceCritical) if (service->GetState() == ServiceCritical)
num_services++; num_services++;
@ -281,9 +375,14 @@ Value HostGroupsTable::NumServicesCritAccessor(const Value& row)
Value HostGroupsTable::NumServicesUnknownAccessor(const Value& row) Value HostGroupsTable::NumServicesUnknownAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetState() == ServiceUnknown) if (service->GetState() == ServiceUnknown)
num_services++; num_services++;
@ -295,9 +394,14 @@ Value HostGroupsTable::NumServicesUnknownAccessor(const Value& row)
Value HostGroupsTable::WorstServiceHardStateAccessor(const Value& row) Value HostGroupsTable::WorstServiceHardStateAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
Value worst_service = ServiceOK; Value worst_service = ServiceOK;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetStateType() == StateTypeHard) { if (service->GetStateType() == StateTypeHard) {
if (service->GetState() > worst_service) if (service->GetState() > worst_service)
@ -311,9 +415,14 @@ Value HostGroupsTable::WorstServiceHardStateAccessor(const Value& row)
Value HostGroupsTable::NumServicesHardOkAccessor(const Value& row) Value HostGroupsTable::NumServicesHardOkAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceOK) if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceOK)
num_services++; num_services++;
@ -325,9 +434,14 @@ Value HostGroupsTable::NumServicesHardOkAccessor(const Value& row)
Value HostGroupsTable::NumServicesHardWarnAccessor(const Value& row) Value HostGroupsTable::NumServicesHardWarnAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceWarning) if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceWarning)
num_services++; num_services++;
@ -339,9 +453,14 @@ Value HostGroupsTable::NumServicesHardWarnAccessor(const Value& row)
Value HostGroupsTable::NumServicesHardCritAccessor(const Value& row) Value HostGroupsTable::NumServicesHardCritAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceCritical) if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceCritical)
num_services++; num_services++;
@ -353,9 +472,14 @@ Value HostGroupsTable::NumServicesHardCritAccessor(const Value& row)
Value HostGroupsTable::NumServicesHardUnknownAccessor(const Value& row) Value HostGroupsTable::NumServicesHardUnknownAccessor(const Value& row)
{ {
HostGroup::Ptr hg = static_cast<HostGroup::Ptr>(row);
if (!hg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, hg->GetMembers()) {
BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) { BOOST_FOREACH(const Service::Ptr& service, host->GetServices()) {
if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceUnknown) if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceUnknown)
num_services++; num_services++;

View File

@ -71,34 +71,64 @@ void ServiceGroupsTable::FetchRows(const AddRowFunction& addRowFn)
Value ServiceGroupsTable::NameAccessor(const Value& row) Value ServiceGroupsTable::NameAccessor(const Value& row)
{ {
return static_cast<ServiceGroup::Ptr>(row)->GetName(); ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
return sg->GetName();
} }
Value ServiceGroupsTable::AliasAccessor(const Value& row) Value ServiceGroupsTable::AliasAccessor(const Value& row)
{ {
return static_cast<ServiceGroup::Ptr>(row)->GetDisplayName(); ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
return sg->GetDisplayName();
} }
Value ServiceGroupsTable::NotesAccessor(const Value& row) Value ServiceGroupsTable::NotesAccessor(const Value& row)
{ {
return static_cast<ServiceGroup::Ptr>(row)->GetNotes(); ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
return sg->GetNotes();
} }
Value ServiceGroupsTable::NotesUrlAccessor(const Value& row) Value ServiceGroupsTable::NotesUrlAccessor(const Value& row)
{ {
return static_cast<ServiceGroup::Ptr>(row)->GetNotesUrl(); ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
return sg->GetNotesUrl();
} }
Value ServiceGroupsTable::ActionUrlAccessor(const Value& row) Value ServiceGroupsTable::ActionUrlAccessor(const Value& row)
{ {
return static_cast<ServiceGroup::Ptr>(row)->GetActionUrl(); ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
return sg->GetActionUrl();
} }
Value ServiceGroupsTable::MembersAccessor(const Value& row) Value ServiceGroupsTable::MembersAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
Array::Ptr members = new Array(); Array::Ptr members = new Array();
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
Array::Ptr host_svc = new Array(); Array::Ptr host_svc = new Array();
host_svc->Add(service->GetHost()->GetName()); host_svc->Add(service->GetHost()->GetName());
host_svc->Add(service->GetShortName()); host_svc->Add(service->GetShortName());
@ -110,9 +140,14 @@ Value ServiceGroupsTable::MembersAccessor(const Value& row)
Value ServiceGroupsTable::MembersWithStateAccessor(const Value& row) Value ServiceGroupsTable::MembersWithStateAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
Array::Ptr members = new Array(); Array::Ptr members = new Array();
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
Array::Ptr host_svc = new Array(); Array::Ptr host_svc = new Array();
host_svc->Add(service->GetHost()->GetName()); host_svc->Add(service->GetHost()->GetName());
host_svc->Add(service->GetShortName()); host_svc->Add(service->GetShortName());
@ -126,9 +161,14 @@ Value ServiceGroupsTable::MembersWithStateAccessor(const Value& row)
Value ServiceGroupsTable::WorstServiceStateAccessor(const Value& row) Value ServiceGroupsTable::WorstServiceStateAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
Value worst_service = ServiceOK; Value worst_service = ServiceOK;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetState() > worst_service) if (service->GetState() > worst_service)
worst_service = service->GetState(); worst_service = service->GetState();
} }
@ -138,14 +178,24 @@ Value ServiceGroupsTable::WorstServiceStateAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesAccessor(const Value& row) Value ServiceGroupsTable::NumServicesAccessor(const Value& row)
{ {
return static_cast<long>(static_cast<ServiceGroup::Ptr>(row)->GetMembers().size()); ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
return sg->GetMembers().size();
} }
Value ServiceGroupsTable::NumServicesOkAccessor(const Value& row) Value ServiceGroupsTable::NumServicesOkAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetState() == ServiceOK) if (service->GetState() == ServiceOK)
num_services++; num_services++;
} }
@ -155,9 +205,14 @@ Value ServiceGroupsTable::NumServicesOkAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesWarnAccessor(const Value& row) Value ServiceGroupsTable::NumServicesWarnAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetState() == ServiceWarning) if (service->GetState() == ServiceWarning)
num_services++; num_services++;
} }
@ -167,9 +222,14 @@ Value ServiceGroupsTable::NumServicesWarnAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesCritAccessor(const Value& row) Value ServiceGroupsTable::NumServicesCritAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetState() == ServiceCritical) if (service->GetState() == ServiceCritical)
num_services++; num_services++;
} }
@ -179,9 +239,14 @@ Value ServiceGroupsTable::NumServicesCritAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesUnknownAccessor(const Value& row) Value ServiceGroupsTable::NumServicesUnknownAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetState() == ServiceUnknown) if (service->GetState() == ServiceUnknown)
num_services++; num_services++;
} }
@ -191,9 +256,14 @@ Value ServiceGroupsTable::NumServicesUnknownAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesPendingAccessor(const Value& row) Value ServiceGroupsTable::NumServicesPendingAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (!service->GetLastCheckResult()) if (!service->GetLastCheckResult())
num_services++; num_services++;
} }
@ -203,9 +273,14 @@ Value ServiceGroupsTable::NumServicesPendingAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesHardOkAccessor(const Value& row) Value ServiceGroupsTable::NumServicesHardOkAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceOK) if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceOK)
num_services++; num_services++;
} }
@ -215,9 +290,14 @@ Value ServiceGroupsTable::NumServicesHardOkAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesHardWarnAccessor(const Value& row) Value ServiceGroupsTable::NumServicesHardWarnAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceWarning) if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceWarning)
num_services++; num_services++;
} }
@ -227,9 +307,14 @@ Value ServiceGroupsTable::NumServicesHardWarnAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesHardCritAccessor(const Value& row) Value ServiceGroupsTable::NumServicesHardCritAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceCritical) if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceCritical)
num_services++; num_services++;
} }
@ -239,9 +324,14 @@ Value ServiceGroupsTable::NumServicesHardCritAccessor(const Value& row)
Value ServiceGroupsTable::NumServicesHardUnknownAccessor(const Value& row) Value ServiceGroupsTable::NumServicesHardUnknownAccessor(const Value& row)
{ {
ServiceGroup::Ptr sg = static_cast<ServiceGroup::Ptr>(row);
if (!sg)
return Empty;
int num_services = 0; int num_services = 0;
BOOST_FOREACH(const Service::Ptr& service, static_cast<ServiceGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Service::Ptr& service, sg->GetMembers()) {
if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceUnknown) if (service->GetStateType() == StateTypeHard && service->GetState() == ServiceUnknown)
num_services++; num_services++;
} }