diff --git a/lib/icingadb/icingadb-stats.cpp b/lib/icingadb/icingadb-stats.cpp index d05dfe55f..c43ae4ceb 100644 --- a/lib/icingadb/icingadb-stats.cpp +++ b/lib/icingadb/icingadb-stats.cpp @@ -12,42 +12,15 @@ using namespace icinga; Dictionary::Ptr IcingaDB::GetStats() { - Dictionary::Ptr stats = new Dictionary(); - - //TODO: Figure out if more stats can be useful here. - Namespace::Ptr statsFunctions = ScriptGlobal::Get("StatsFunctions", &Empty); - - if (!statsFunctions) - Dictionary::Ptr(); - - ObjectLock olock(statsFunctions); - - for (auto& kv : statsFunctions) - { - Function::Ptr func = kv.second.Val; - - if (!func) - BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid status function name.")); - - Dictionary::Ptr status = new Dictionary(); - Array::Ptr perfdata = new Array(); - func->Invoke({ status, perfdata }); - - stats->Set(kv.first, new Dictionary({ - { "status", status }, - { "perfdata", Serialize(perfdata, FAState) } - })); - } - - typedef Dictionary::Ptr DP; - DP app = DP(DP(DP(stats->Get("IcingaApplication"))->Get("status"))->Get("icingaapplication"))->Get("app"); + Dictionary::Ptr status = new Dictionary(); + IcingaApplication::StatsFunc(status, nullptr); + Dictionary::Ptr app(Dictionary::Ptr(status->Get("icingaapplication"))->Get("app")); app->Set("program_start", TimestampToMilliseconds(Application::GetStartTime())); - auto localEndpoint (Endpoint::GetLocalEndpoint()); - if (localEndpoint) { + if (auto localEndpoint(Endpoint::GetLocalEndpoint()); localEndpoint) { app->Set("endpoint_id", GetObjectIdentifier(localEndpoint)); } - return stats; + return new Dictionary{{ "IcingaApplication", new Dictionary{{"status", status}}}}; } diff --git a/lib/icingadb/icingadb.hpp b/lib/icingadb/icingadb.hpp index 6652d9c1f..b943d7f4b 100644 --- a/lib/icingadb/icingadb.hpp +++ b/lib/icingadb/icingadb.hpp @@ -143,7 +143,7 @@ private: Dictionary::Ptr SerializeState(const Checkable::Ptr& checkable); /* Stats */ - Dictionary::Ptr GetStats(); + static Dictionary::Ptr GetStats(); /* utilities */ static String FormatCheckSumBinary(const String& str);