]> granicus.if.org Git - icinga2/blobdiff - lib/livestatus/servicestable.cpp
Move CompatUtility::GetCheckableInCheckPeriod() into Livestatus feature
[icinga2] / lib / livestatus / servicestable.cpp
index b58d4c6cef05e648698956ba40b47b584084b7d1..00b11616ca5abb4e3d628b7214e24df482d8d8f5 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
  * Icinga 2                                                                   *
- * Copyright (C) 2012-2017 Icinga Development Team (https://www.icinga.com/)  *
+ * Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/)  *
  *                                                                            *
  * This program is free software; you can redistribute it and/or              *
  * modify it under the terms of the GNU General Public License                *
@@ -31,6 +31,7 @@
 #include "icinga/macroprocessor.hpp"
 #include "icinga/icingaapplication.hpp"
 #include "icinga/compatutility.hpp"
+#include "icinga/pluginutility.hpp"
 #include "base/configtype.hpp"
 #include "base/objectlock.hpp"
 #include "base/json.hpp"
 using namespace icinga;
 
 ServicesTable::ServicesTable(LivestatusGroupByType type)
-    : Table(type)
+       : Table(type)
 {
        AddColumns(this);
 }
 
 
 void ServicesTable::AddColumns(Table *table, const String& prefix,
-    const Column::ObjectAccessor& objectAccessor)
+       const Column::ObjectAccessor& objectAccessor)
 {
        table->AddColumn(prefix + "description", Column(&ServicesTable::ShortNameAccessor, objectAccessor));
        table->AddColumn(prefix + "service_description", Column(&ServicesTable::ShortNameAccessor, objectAccessor)); //ugly compatibility hack
@@ -103,9 +104,9 @@ void ServicesTable::AddColumns(Table *table, const String& prefix,
        table->AddColumn(prefix + "process_performance_data", Column(&ServicesTable::ProcessPerformanceDataAccessor, objectAccessor));
        table->AddColumn(prefix + "is_executing", Column(&Table::ZeroAccessor, objectAccessor));
        table->AddColumn(prefix + "active_checks_enabled", Column(&ServicesTable::ActiveChecksEnabledAccessor, objectAccessor));
-       table->AddColumn(prefix + "check_options", Column(&ServicesTable::CheckOptionsAccessor, objectAccessor));
+       table->AddColumn(prefix + "check_options", Column(&Table::EmptyStringAccessor, objectAccessor));
        table->AddColumn(prefix + "flap_detection_enabled", Column(&ServicesTable::FlapDetectionEnabledAccessor, objectAccessor));
-       table->AddColumn(prefix + "check_freshness", Column(&ServicesTable::CheckFreshnessAccessor, objectAccessor));
+       table->AddColumn(prefix + "check_freshness", Column(&Table::OneAccessor, objectAccessor));
        table->AddColumn(prefix + "obsess_over_service", Column(&Table::ZeroAccessor, objectAccessor));
        table->AddColumn(prefix + "modified_attributes", Column(&Table::ZeroAccessor, objectAccessor));
        table->AddColumn(prefix + "modified_attributes_list", Column(&Table::ZeroAccessor, objectAccessor));
@@ -144,22 +145,22 @@ void ServicesTable::AddColumns(Table *table, const String& prefix,
        if (table->GetGroupByType() == LivestatusGroupByServiceGroup) {
                /* _1 = row, _2 = groupByType, _3 = groupByObject */
                Log(LogDebug, "Livestatus")
-                   << "Processing services group by servicegroup table.";
+                       << "Processing services group by servicegroup table.";
                ServiceGroupsTable::AddColumns(table, "servicegroup_", std::bind(&ServicesTable::ServiceGroupAccessor, _1, _2, _3));
        } else if (table->GetGroupByType() == LivestatusGroupByHostGroup) {
                /* _1 = row, _2 = groupByType, _3 = groupByObject */
                Log(LogDebug, "Livestatus")
-                   << "Processing services group by hostgroup table.";
+                       << "Processing services group by hostgroup table.";
                HostGroupsTable::AddColumns(table, "hostgroup_", std::bind(&ServicesTable::HostGroupAccessor, _1, _2, _3));
        }
 }
 
-String ServicesTable::GetName(void) const
+String ServicesTable::GetName() const
 {
        return "services";
 }
 
-String ServicesTable::GetPrefix(void) const
+String ServicesTable::GetPrefix() const
 {
        return "service";
 }
@@ -342,10 +343,10 @@ Value ServicesTable::PerfDataAccessor(const Value& row)
        String perfdata;
        CheckResult::Ptr cr = service->GetLastCheckResult();
 
-       if (cr)
-               perfdata = CompatUtility::GetCheckResultPerfdata(cr);
+       if (!cr)
+               return Empty;
 
-       return perfdata;
+       return PluginUtility::FormatPerfdata(cr->GetPerformanceData());
 }
 
 Value ServicesTable::CheckPeriodAccessor(const Value& row)
@@ -376,9 +377,9 @@ Value ServicesTable::NotesExpandedAccessor(const Value& row)
                return Empty;
 
        MacroProcessor::ResolverList resolvers {
-           { "service", service },
-           { "host", service->GetHost() },
-           { "icinga", IcingaApplication::GetInstance() }
+               { "service", service },
+               { "host", service->GetHost() },
+               { "icinga", IcingaApplication::GetInstance() }
        };
 
        return MacroProcessor::ResolveMacros(service->GetNotes(), resolvers);
@@ -402,9 +403,9 @@ Value ServicesTable::NotesUrlExpandedAccessor(const Value& row)
                return Empty;
 
        MacroProcessor::ResolverList resolvers {
-           { "service", service },
-           { "host", service->GetHost() },
-           { "icinga", IcingaApplication::GetInstance() }
+               { "service", service },
+               { "host", service->GetHost() },
+               { "icinga", IcingaApplication::GetInstance() }
        };
 
        return MacroProcessor::ResolveMacros(service->GetNotesUrl(), resolvers);
@@ -428,9 +429,9 @@ Value ServicesTable::ActionUrlExpandedAccessor(const Value& row)
                return Empty;
 
        MacroProcessor::ResolverList resolvers {
-           { "service", service },
-           { "host", service->GetHost() },
-           { "icinga", IcingaApplication::GetInstance() }
+               { "service", service },
+               { "host", service->GetHost() },
+               { "icinga", IcingaApplication::GetInstance() }
        };
 
        return MacroProcessor::ResolveMacros(service->GetActionUrl(), resolvers);
@@ -454,9 +455,9 @@ Value ServicesTable::IconImageExpandedAccessor(const Value& row)
                return Empty;
 
        MacroProcessor::ResolverList resolvers {
-           { "service", service },
-           { "host", service->GetHost() },
-           { "icinga", IcingaApplication::GetInstance() }
+               { "service", service },
+               { "host", service->GetHost() },
+               { "icinga", IcingaApplication::GetInstance() }
        };
 
        return MacroProcessor::ResolveMacros(service->GetIconImage(), resolvers);
@@ -509,7 +510,7 @@ Value ServicesTable::HasBeenCheckedAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableHasBeenChecked(service);
+       return Convert::ToLong(service->HasBeenChecked());
 }
 
 Value ServicesTable::LastStateAccessor(const Value& row)
@@ -549,7 +550,7 @@ Value ServicesTable::CheckTypeAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableCheckType(service);
+       return (service->GetEnableActiveChecks() ? 0 : 1); /* 0 .. active, 1 .. passive */
 }
 
 Value ServicesTable::AcknowledgedAccessor(const Value& row)
@@ -560,7 +561,7 @@ Value ServicesTable::AcknowledgedAccessor(const Value& row)
                return Empty;
 
        ObjectLock olock(service);
-       return CompatUtility::GetCheckableIsAcknowledged(service);
+       return service->IsAcknowledged();
 }
 
 Value ServicesTable::AcknowledgementTypeAccessor(const Value& row)
@@ -571,7 +572,7 @@ Value ServicesTable::AcknowledgementTypeAccessor(const Value& row)
                return Empty;
 
        ObjectLock olock(service);
-       return CompatUtility::GetCheckableAcknowledgementType(service);
+       return service->GetAcknowledgement();
 }
 
 Value ServicesTable::NoMoreNotificationsAccessor(const Value& row)
@@ -721,7 +722,7 @@ Value ServicesTable::ChecksEnabledAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableActiveChecksEnabled(service);
+       return Convert::ToLong(service->GetEnableActiveChecks());
 }
 
 Value ServicesTable::AcceptPassiveChecksAccessor(const Value& row)
@@ -731,7 +732,7 @@ Value ServicesTable::AcceptPassiveChecksAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckablePassiveChecksEnabled(service);
+       return Convert::ToLong(service->GetEnablePassiveChecks());
 }
 
 Value ServicesTable::EventHandlerEnabledAccessor(const Value& row)
@@ -741,7 +742,7 @@ Value ServicesTable::EventHandlerEnabledAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableEventHandlerEnabled(service);
+       return Convert::ToLong(service->GetEnableEventHandler());
 }
 
 Value ServicesTable::NotificationsEnabledAccessor(const Value& row)
@@ -751,7 +752,7 @@ Value ServicesTable::NotificationsEnabledAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableNotificationsEnabled(service);
+       return Convert::ToLong(service->GetEnableNotifications());
 }
 
 Value ServicesTable::ProcessPerformanceDataAccessor(const Value& row)
@@ -761,7 +762,7 @@ Value ServicesTable::ProcessPerformanceDataAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableProcessPerformanceData(service);
+       return Convert::ToLong(service->GetEnablePerfdata());
 }
 
 Value ServicesTable::ActiveChecksEnabledAccessor(const Value& row)
@@ -771,13 +772,7 @@ Value ServicesTable::ActiveChecksEnabledAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableActiveChecksEnabled(service);
-}
-
-Value ServicesTable::CheckOptionsAccessor(const Value& row)
-{
-       /* TODO - forcexec, freshness, orphan, none */
-       return Empty;
+       return Convert::ToLong(service->GetEnableActiveChecks());
 }
 
 Value ServicesTable::FlapDetectionEnabledAccessor(const Value& row)
@@ -787,17 +782,7 @@ Value ServicesTable::FlapDetectionEnabledAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableFlapDetectionEnabled(service);
-}
-
-Value ServicesTable::CheckFreshnessAccessor(const Value& row)
-{
-       Service::Ptr service = static_cast<Service::Ptr>(row);
-
-       if (!service)
-               return Empty;
-
-       return CompatUtility::GetCheckableFreshnessChecksEnabled(service);
+       return Convert::ToLong(service->GetEnableFlapping());
 }
 
 Value ServicesTable::StalenessAccessor(const Value& row)
@@ -807,7 +792,10 @@ Value ServicesTable::StalenessAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableStaleness(service);
+       if (service->HasBeenChecked() && service->GetLastCheck() > 0)
+               return (Utility::GetTime() - service->GetLastCheck()) / (service->GetCheckInterval() * 3600);
+
+       return 0.0;
 }
 
 Value ServicesTable::CheckIntervalAccessor(const Value& row)
@@ -847,7 +835,7 @@ Value ServicesTable::LowFlapThresholdAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableLowFlapThreshold(service);
+       return service->GetFlappingThresholdLow();
 }
 
 Value ServicesTable::HighFlapThresholdAccessor(const Value& row)
@@ -857,7 +845,7 @@ Value ServicesTable::HighFlapThresholdAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableHighFlapThreshold(service);
+       return service->GetFlappingThresholdHigh();
 }
 
 Value ServicesTable::LatencyAccessor(const Value& row)
@@ -897,7 +885,7 @@ Value ServicesTable::PercentStateChangeAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckablePercentStateChange(service);
+       return service->GetFlappingCurrent();
 }
 
 Value ServicesTable::InCheckPeriodAccessor(const Value& row)
@@ -907,7 +895,13 @@ Value ServicesTable::InCheckPeriodAccessor(const Value& row)
        if (!service)
                return Empty;
 
-       return CompatUtility::GetCheckableInCheckPeriod(service);
+       TimePeriod::Ptr timeperiod = service->GetCheckPeriod();
+
+       /* none set means always checked */
+       if (!timeperiod)
+               return 1;
+
+       return Convert::ToLong(timeperiod->IsInside(Utility::GetTime()));
 }
 
 Value ServicesTable::InNotificationPeriodAccessor(const Value& row)
@@ -1056,7 +1050,7 @@ Value ServicesTable::CustomVariableNamesAccessor(const Value& row)
 
        {
                ObjectLock olock(service);
-               vars = CompatUtility::GetCustomAttributeConfig(service);
+               vars = service->GetVars();
        }
 
        Array::Ptr cv = new Array();
@@ -1083,7 +1077,7 @@ Value ServicesTable::CustomVariableValuesAccessor(const Value& row)
 
        {
                ObjectLock olock(service);
-               vars = CompatUtility::GetCustomAttributeConfig(service);
+               vars = service->GetVars();
        }
 
        Array::Ptr cv = new Array();
@@ -1113,7 +1107,7 @@ Value ServicesTable::CustomVariablesAccessor(const Value& row)
 
        {
                ObjectLock olock(service);
-               vars = CompatUtility::GetCustomAttributeConfig(service);
+               vars = service->GetVars();
        }
 
        Array::Ptr cv = new Array();
@@ -1148,7 +1142,7 @@ Value ServicesTable::CVIsJsonAccessor(const Value& row)
 
        {
                ObjectLock olock(service);
-               vars = CompatUtility::GetCustomAttributeConfig(service);
+               vars = service->GetVars();
        }
 
        if (!vars)