From 56ae875861ab260b80a030f50c4aff9f9dc8fff0 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 13:32:39 +0200 Subject: Adding upstream version 2.14.2. Signed-off-by: Daniel Baumann --- lib/livestatus/table.hpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 lib/livestatus/table.hpp (limited to 'lib/livestatus/table.hpp') diff --git a/lib/livestatus/table.hpp b/lib/livestatus/table.hpp new file mode 100644 index 0000000..fa3fc2a --- /dev/null +++ b/lib/livestatus/table.hpp @@ -0,0 +1,73 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#ifndef TABLE_H +#define TABLE_H + +#include "livestatus/column.hpp" +#include "base/object.hpp" +#include "base/dictionary.hpp" +#include "base/array.hpp" +#include + +namespace icinga +{ + +// Well, don't ask. +#define LIVESTATUS_INTERVAL_LENGTH 60.0 + +struct LivestatusRowValue { + Value Row; + LivestatusGroupByType GroupByType; + Value GroupByObject; +}; + +typedef std::function AddRowFunction; + +class Filter; + +/** + * @ingroup livestatus + */ +class Table : public Object +{ +public: + DECLARE_PTR_TYPEDEFS(Table); + + static Table::Ptr GetByName(const String& name, const String& compat_log_path = "", const unsigned long& from = 0, const unsigned long& until = 0); + + virtual String GetName() const = 0; + virtual String GetPrefix() const = 0; + + std::vector FilterRows(const intrusive_ptr& filter, int limit = -1); + + void AddColumn(const String& name, const Column& column); + Column GetColumn(const String& name) const; + std::vector GetColumnNames() const; + + LivestatusGroupByType GetGroupByType() const; + +protected: + Table(LivestatusGroupByType type = LivestatusGroupByNone); + + virtual void FetchRows(const AddRowFunction& addRowFn) = 0; + + static Value ZeroAccessor(const Value&); + static Value OneAccessor(const Value&); + static Value EmptyStringAccessor(const Value&); + static Value EmptyArrayAccessor(const Value&); + static Value EmptyDictionaryAccessor(const Value&); + + LivestatusGroupByType m_GroupByType; + Value m_GroupByObject; + +private: + std::map m_Columns; + + bool FilteredAddRow(std::vector& rs, const intrusive_ptr& filter, int limit, const Value& row, LivestatusGroupByType groupByType, const Object::Ptr& groupByObject); +}; + +} + +#endif /* TABLE_H */ + +#include "livestatus/filter.hpp" -- cgit v1.2.3