From d7f6d7994be18fb014d85d725f6610a41e18a6d2 Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Fri, 8 Jun 2018 11:38:36 +0200 Subject: [PATCH] Move stats into a separate file --- lib/redis/CMakeLists.txt | 2 +- lib/redis/rediswriter-stats.cpp | 48 +++++++++++++++++++++++++++++++++ lib/redis/rediswriter.cpp | 15 +---------- lib/redis/rediswriter.hpp | 3 +++ 4 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 lib/redis/rediswriter-stats.cpp diff --git a/lib/redis/CMakeLists.txt b/lib/redis/CMakeLists.txt index dbf707d01..5ff39f81d 100644 --- a/lib/redis/CMakeLists.txt +++ b/lib/redis/CMakeLists.txt @@ -18,7 +18,7 @@ mkclass_target(rediswriter.ti rediswriter-ti.cpp rediswriter-ti.hpp) set(redis_SOURCES - rediswriter.cpp rediswriter-objects.cpp rediswriter-utility.cpp rediswriter-ti.hpp + rediswriter.cpp rediswriter-objects.cpp rediswriter-stats.cpp rediswriter-utility.cpp rediswriter-ti.hpp ) if(ICINGA2_UNITY_BUILD) diff --git a/lib/redis/rediswriter-stats.cpp b/lib/redis/rediswriter-stats.cpp new file mode 100644 index 000000000..152d0b64b --- /dev/null +++ b/lib/redis/rediswriter-stats.cpp @@ -0,0 +1,48 @@ +/****************************************************************************** + * Icinga 2 * + * 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 * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software Foundation * + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ******************************************************************************/ + +#include "redis/rediswriter.hpp" +#include "base/json.hpp" +#include "base/logger.hpp" +#include "base/serializer.hpp" +#include "base/statsfunction.hpp" +#include "base/convert.hpp" + +using namespace icinga; + +Dictionary::Ptr RedisWriter::GetStats() +{ + //TODO: Figure out if more stats can be useful here. + Dictionary::Ptr statsFunctions = ScriptGlobal::Get("StatsFunctions", &Empty); + + if (!statsFunctions) + Dictionary::Ptr(); + + Function::Ptr func = statsFunctions->Get("CIB"); + + Dictionary::Ptr status = new Dictionary(); + Array::Ptr perfdata = new Array(); + + func->Invoke({ status, perfdata }); + +// String jsonStats = JsonEncode(status); + + return status; +} + diff --git a/lib/redis/rediswriter.cpp b/lib/redis/rediswriter.cpp index 12383c837..aaa4b3629 100644 --- a/lib/redis/rediswriter.cpp +++ b/lib/redis/rediswriter.cpp @@ -21,7 +21,6 @@ #include "redis/rediswriter-ti.cpp" #include "remote/eventqueue.hpp" #include "base/json.hpp" -#include "base/statsfunction.hpp" #include using namespace icinga; @@ -230,19 +229,7 @@ void RedisWriter::PublishStats() if (!m_Context) return; - //TODO: Figure out if more stats can be useful here. - Dictionary::Ptr statsFunctions = ScriptGlobal::Get("StatsFunctions", &Empty); - - if (!statsFunctions) - return; - - Function::Ptr func = statsFunctions->Get("CIB"); - - Dictionary::Ptr status = new Dictionary(); - Array::Ptr perfdata = new Array(); - - func->Invoke({ status, perfdata }); - + Dictionary::Ptr status = GetStats(); String jsonStats = JsonEncode(status); ExecuteQuery({ "PUBLISH", "icinga:stats", jsonStats }); diff --git a/lib/redis/rediswriter.hpp b/lib/redis/rediswriter.hpp index 194dff8ab..9adf7dddb 100644 --- a/lib/redis/rediswriter.hpp +++ b/lib/redis/rediswriter.hpp @@ -71,6 +71,9 @@ private: void SendStatusUpdate(const ConfigObject::Ptr& object, bool useTransaction); void UpdateObjectAttrs(const String& keyPrefix, const ConfigObject::Ptr& object, int fieldType); + /* Stats */ + Dictionary::Ptr GetStats(); + /* utilities */ static String FormatCheckSumBinary(const String& str);