/******************************************************************************
* 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 *
#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
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));
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";
}
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)
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);
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);
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);
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);
if (!service)
return Empty;
- return CompatUtility::GetCheckableHasBeenChecked(service);
+ return Convert::ToLong(service->HasBeenChecked());
}
Value ServicesTable::LastStateAccessor(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)
return Empty;
ObjectLock olock(service);
- return CompatUtility::GetCheckableIsAcknowledged(service);
+ return service->IsAcknowledged();
}
Value ServicesTable::AcknowledgementTypeAccessor(const Value& row)
return Empty;
ObjectLock olock(service);
- return CompatUtility::GetCheckableAcknowledgementType(service);
+ return service->GetAcknowledgement();
}
Value ServicesTable::NoMoreNotificationsAccessor(const Value& row)
if (!service)
return Empty;
- return CompatUtility::GetCheckableActiveChecksEnabled(service);
+ return Convert::ToLong(service->GetEnableActiveChecks());
}
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)
if (!service)
return Empty;
- return CompatUtility::GetCheckableEventHandlerEnabled(service);
+ return Convert::ToLong(service->GetEnableEventHandler());
}
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)
if (!service)
return Empty;
- return CompatUtility::GetCheckableProcessPerformanceData(service);
+ return Convert::ToLong(service->GetEnablePerfdata());
}
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)
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)
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)
if (!service)
return Empty;
- return CompatUtility::GetCheckableLowFlapThreshold(service);
+ return service->GetFlappingThresholdLow();
}
Value ServicesTable::HighFlapThresholdAccessor(const Value& row)
if (!service)
return Empty;
- return CompatUtility::GetCheckableHighFlapThreshold(service);
+ return service->GetFlappingThresholdHigh();
}
Value ServicesTable::LatencyAccessor(const Value& row)
if (!service)
return Empty;
- return CompatUtility::GetCheckablePercentStateChange(service);
+ return service->GetFlappingCurrent();
}
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)
{
ObjectLock olock(service);
- vars = CompatUtility::GetCustomAttributeConfig(service);
+ vars = service->GetVars();
}
Array::Ptr cv = new Array();
{
ObjectLock olock(service);
- vars = CompatUtility::GetCustomAttributeConfig(service);
+ vars = service->GetVars();
}
Array::Ptr cv = new Array();
{
ObjectLock olock(service);
- vars = CompatUtility::GetCustomAttributeConfig(service);
+ vars = service->GetVars();
}
Array::Ptr cv = new Array();
{
ObjectLock olock(service);
- vars = CompatUtility::GetCustomAttributeConfig(service);
+ vars = service->GetVars();
}
if (!vars)