From 50fee6aeb979b53f771666d7c680f1592d7465a5 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Wed, 26 Jan 2022 14:02:48 +0100 Subject: [PATCH] Icinga DB: include amount of history kept in memory in /v1/status --- lib/icingadb/icingadb.cpp | 26 ++++++++++++++++++++++++++ lib/icingadb/icingadb.hpp | 1 + 2 files changed, 27 insertions(+) diff --git a/lib/icingadb/icingadb.cpp b/lib/icingadb/icingadb.cpp index 0e3ae9830..bf3f06594 100644 --- a/lib/icingadb/icingadb.cpp +++ b/lib/icingadb/icingadb.cpp @@ -7,6 +7,8 @@ #include "remote/eventqueue.hpp" #include "base/configuration.hpp" #include "base/json.hpp" +#include "base/perfdatavalue.hpp" +#include "base/statsfunction.hpp" #include "base/tlsutility.hpp" #include "base/utility.hpp" #include "icinga/checkable.hpp" @@ -27,6 +29,8 @@ std::once_flag IcingaDB::m_EnvironmentIdOnce; REGISTER_TYPE(IcingaDB); +REGISTER_STATSFUNCTION(IcingaDB, &IcingaDB::StatsFunc); + IcingaDB::IcingaDB() : m_Rcon(nullptr) { @@ -38,6 +42,28 @@ IcingaDB::IcingaDB() m_PrefixConfigCheckSum = "icinga:checksum:"; } +/** + * Feature stats interface + * + * @param status Key value pairs for feature stats + */ +void IcingaDB::StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& perfdata) +{ + DictionaryData nodes; + + for (auto& icingadb : ConfigType::GetObjectsByType()) { + auto historyBufferItems (icingadb->m_HistoryBulker.Size()); + + nodes.emplace_back(icingadb->GetName(), new Dictionary({ + { "history_buffer_items", historyBufferItems } + })); + + perfdata->Add(new PerfdataValue("icingadb_" + icingadb->GetName() + "_history_buffer_items", historyBufferItems)); + } + + status->Set("icingadb", new Dictionary(std::move(nodes))); +} + void IcingaDB::Validate(int types, const ValidationUtils& utils) { ObjectImpl::Validate(types, utils); diff --git a/lib/icingadb/icingadb.hpp b/lib/icingadb/icingadb.hpp index 62570cae1..e302e4683 100644 --- a/lib/icingadb/icingadb.hpp +++ b/lib/icingadb/icingadb.hpp @@ -37,6 +37,7 @@ public: IcingaDB(); static void ConfigStaticInitialize(); + static void StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& perfdata); void Validate(int types, const ValidationUtils& utils) override; virtual void Start(bool runtimeCreated) override;