From b316de8aeab988a6cae8448654ee7a3ab849d95e Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Thu, 7 Sep 2017 14:37:02 +0200 Subject: [PATCH] Implement additional logging for the JsonRpc class --- lib/remote/jsonrpc.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/lib/remote/jsonrpc.cpp b/lib/remote/jsonrpc.cpp index 93d02be17..8aab9c2f7 100644 --- a/lib/remote/jsonrpc.cpp +++ b/lib/remote/jsonrpc.cpp @@ -20,9 +20,38 @@ #include "remote/jsonrpc.hpp" #include "base/netstring.hpp" #include "base/json.hpp" +#include "base/console.hpp" +#include "base/scriptglobal.hpp" +#include "base/convert.hpp" using namespace icinga; +#ifdef I2_DEBUG +static bool GetDebugJsonRpcCached(void) +{ + static int debugJsonRpc = -1; + + if (debugJsonRpc != -1) + return debugJsonRpc; + + debugJsonRpc = false; + + Dictionary::Ptr internal = ScriptGlobal::Get("Internal", &Empty); + + if (!internal) + return false; + + Value vdebug; + + if (!internal->Get("DebugJsonRpc", &vdebug)) + return false; + + debugJsonRpc = Convert::ToLong(vdebug); + + return debugJsonRpc; +} +#endif /* I2_DEBUG */ + /** * Sends a message to the connected peer. * @@ -31,6 +60,12 @@ using namespace icinga; void JsonRpc::SendMessage(const Stream::Ptr& stream, const Dictionary::Ptr& message) { String json = JsonEncode(message); + +#ifdef I2_DEBUG + if (GetDebugJsonRpcCached()) + std::cerr << ConsoleColorTag(Console_ForegroundBlue) << ">> " << json << ConsoleColorTag(Console_Normal) << "\n"; +#endif /* I2_DEBUG */ + NetString::WriteStringToStream(stream, json); } @@ -44,6 +79,11 @@ StreamReadStatus JsonRpc::ReadMessage(const Stream::Ptr& stream, String *message *message = jsonString; +#ifdef I2_DEBUG + if (GetDebugJsonRpcCached()) + std::cerr << ConsoleColorTag(Console_ForegroundBlue) << "<< " << jsonString << ConsoleColorTag(Console_Normal) << "\n"; +#endif /* I2_DEBUG */ + return StatusNewItem; }