diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 11:32:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 11:32:39 +0000 |
commit | 56ae875861ab260b80a030f50c4aff9f9dc8fff0 (patch) | |
tree | 531412110fc901a5918c7f7442202804a83cada9 /lib/livestatus/downtimestable.cpp | |
parent | Initial commit. (diff) | |
download | icinga2-56ae875861ab260b80a030f50c4aff9f9dc8fff0.tar.xz icinga2-56ae875861ab260b80a030f50c4aff9f9dc8fff0.zip |
Adding upstream version 2.14.2.upstream/2.14.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | lib/livestatus/downtimestable.cpp | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/lib/livestatus/downtimestable.cpp b/lib/livestatus/downtimestable.cpp new file mode 100644 index 0000000..09c111e --- /dev/null +++ b/lib/livestatus/downtimestable.cpp @@ -0,0 +1,168 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#include "livestatus/downtimestable.hpp" +#include "livestatus/hoststable.hpp" +#include "livestatus/servicestable.hpp" +#include "icinga/service.hpp" +#include "base/configtype.hpp" +#include "base/objectlock.hpp" + +using namespace icinga; + +DowntimesTable::DowntimesTable() +{ + AddColumns(this); +} + +void DowntimesTable::AddColumns(Table *table, const String& prefix, + const Column::ObjectAccessor& objectAccessor) +{ + table->AddColumn(prefix + "author", Column(&DowntimesTable::AuthorAccessor, objectAccessor)); + table->AddColumn(prefix + "comment", Column(&DowntimesTable::CommentAccessor, objectAccessor)); + table->AddColumn(prefix + "id", Column(&DowntimesTable::IdAccessor, objectAccessor)); + table->AddColumn(prefix + "entry_time", Column(&DowntimesTable::EntryTimeAccessor, objectAccessor)); + table->AddColumn(prefix + "type", Column(&DowntimesTable::TypeAccessor, objectAccessor)); + table->AddColumn(prefix + "is_service", Column(&DowntimesTable::IsServiceAccessor, objectAccessor)); + table->AddColumn(prefix + "start_time", Column(&DowntimesTable::StartTimeAccessor, objectAccessor)); + table->AddColumn(prefix + "end_time", Column(&DowntimesTable::EndTimeAccessor, objectAccessor)); + table->AddColumn(prefix + "fixed", Column(&DowntimesTable::FixedAccessor, objectAccessor)); + table->AddColumn(prefix + "duration", Column(&DowntimesTable::DurationAccessor, objectAccessor)); + table->AddColumn(prefix + "triggered_by", Column(&DowntimesTable::TriggeredByAccessor, objectAccessor)); + + /* order is important - host w/o services must not be empty */ + ServicesTable::AddColumns(table, "service_", [objectAccessor](const Value& row, LivestatusGroupByType, const Object::Ptr&) -> Value { + return ServiceAccessor(row, objectAccessor); + }); + HostsTable::AddColumns(table, "host_", [objectAccessor](const Value& row, LivestatusGroupByType, const Object::Ptr&) -> Value { + return HostAccessor(row, objectAccessor); + }); +} + +String DowntimesTable::GetName() const +{ + return "downtimes"; +} + +String DowntimesTable::GetPrefix() const +{ + return "downtime"; +} + +void DowntimesTable::FetchRows(const AddRowFunction& addRowFn) +{ + for (const Downtime::Ptr& downtime : ConfigType::GetObjectsByType<Downtime>()) { + if (!addRowFn(downtime, LivestatusGroupByNone, Empty)) + return; + } +} + +Object::Ptr DowntimesTable::HostAccessor(const Value& row, const Column::ObjectAccessor&) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + Checkable::Ptr checkable = downtime->GetCheckable(); + + Host::Ptr host; + Service::Ptr service; + tie(host, service) = GetHostService(checkable); + + return host; +} + +Object::Ptr DowntimesTable::ServiceAccessor(const Value& row, const Column::ObjectAccessor&) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + Checkable::Ptr checkable = downtime->GetCheckable(); + + Host::Ptr host; + Service::Ptr service; + tie(host, service) = GetHostService(checkable); + + return service; +} + +Value DowntimesTable::AuthorAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + return downtime->GetAuthor(); +} + +Value DowntimesTable::CommentAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + return downtime->GetComment(); +} + +Value DowntimesTable::IdAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + return downtime->GetLegacyId(); +} + +Value DowntimesTable::EntryTimeAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + return static_cast<int>(downtime->GetEntryTime()); +} + +Value DowntimesTable::TypeAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + // 1 .. active, 0 .. pending + return (downtime->IsInEffect() ? 1 : 0); +} + +Value DowntimesTable::IsServiceAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + Checkable::Ptr checkable = downtime->GetCheckable(); + + return (dynamic_pointer_cast<Host>(checkable) ? 0 : 1); +} + +Value DowntimesTable::StartTimeAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + return static_cast<int>(downtime->GetStartTime()); +} + +Value DowntimesTable::EndTimeAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + return static_cast<int>(downtime->GetEndTime()); +} + +Value DowntimesTable::FixedAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + return downtime->GetFixed(); +} + +Value DowntimesTable::DurationAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + return downtime->GetDuration(); +} + +Value DowntimesTable::TriggeredByAccessor(const Value& row) +{ + Downtime::Ptr downtime = static_cast<Downtime::Ptr>(row); + + String triggerDowntimeName = downtime->GetTriggeredBy(); + + Downtime::Ptr triggerDowntime = Downtime::GetByName(triggerDowntimeName); + + if (triggerDowntime) + return triggerDowntime->GetLegacyId(); + + return Empty; +} |