diff --git a/include/villas/web.hpp b/include/villas/web.hpp index c2a7f3a9c..2de77e3f7 100644 --- a/include/villas/web.hpp +++ b/include/villas/web.hpp @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -61,7 +62,6 @@ protected: Api *api; void worker(); - static void lwsLogger(int level, const char *msg); public: @@ -74,6 +74,9 @@ public: void start(); void stop(); + static void lwsLogger(int level, const char *msg); + static int lwsLogLevel(Log::Level lvl); + /** Parse HTTPd and WebSocket related options */ int parse(json_t *json); diff --git a/lib/web.cpp b/lib/web.cpp index 81a7b95d5..fc55a4144 100644 --- a/lib/web.cpp +++ b/lib/web.cpp @@ -20,7 +20,6 @@ * along with this program. If not, see . *********************************************************************************/ -#include #include #include @@ -147,7 +146,7 @@ void Web::lwsLogger(int lws_lvl, const char *msg) { logger->warn("{}", msg); break; - case LLL_NOTICE: + case LLL_NOTICE: case LLL_INFO: logger->info("{}", msg); break; @@ -157,6 +156,27 @@ void Web::lwsLogger(int lws_lvl, const char *msg) { } } +int Web::lwsLogLevel(Log::Level lvl) { + int lwsLvl = 0; + + switch (lvl) { + case Log::Level::trace: + lwsLvl |= LLL_THREAD | LLL_USER | LLL_LATENCY | LLL_CLIENT | LLL_EXT | LLL_HEADER | LLL_PARSER; + case Log::Level::debug: + lwsLvl |= LLL_DEBUG | LLL_NOTICE | LLL_INFO; + case Log::Level::info: + case Log::Level::warn: + lwsLvl |= LLL_WARN; + case Log::Level::err: + lwsLvl |= LLL_ERR; + case Log::Level::critical: + case Log::Level::off: + default: { } + } + + return lwsLvl; +} + void Web::worker() { lws *wsi; @@ -185,8 +205,7 @@ Web::Web(Api *a) : htdocs(WEB_PATH), api(a) { - /** @todo Port to C++: add LLL_DEBUG and others if trace log level is activated */ - lws_set_log_level(LLL_ERR | LLL_WARN | LLL_NOTICE, lwsLogger); + lws_set_log_level(lwsLogLevel(logging.getLevel()), lwsLogger); } int Web::parse(json_t *json) diff --git a/src/villas-relay.cpp b/src/villas-relay.cpp index 2f8c03dc5..fe0890f5d 100644 --- a/src/villas-relay.cpp +++ b/src/villas-relay.cpp @@ -37,12 +37,14 @@ #include #include #include +#include #include "villas-relay.hpp" typedef char uuid_string_t[37]; using namespace villas; +using namespace villas::node; namespace villas { namespace node { @@ -244,7 +246,7 @@ Relay::Relay(int argc, char *argv[]) : throw RuntimeError("Failed to initialize memory"); /* Initialize logging */ - lws_set_log_level((1 << LLL_COUNT) - 1, loggerCallback); + lws_set_log_level(Web::lwsLogLevel(logging.getLevel()), Web::lwsLogger); protocols = { { @@ -269,37 +271,6 @@ Relay::Relay(int argc, char *argv[]) : }; } -void Relay::loggerCallback(int level, const char *msg) -{ - auto logger = logging.get("lws"); - - char *nl = (char *) strchr(msg, '\n'); - if (nl) - *nl = 0; - - /* Decrease severity for some errors. */ - if (strstr(msg, "Unable to open") == msg) - level = LLL_WARN; - - switch (level) { - case LLL_ERR: - logger->error("{}", msg); - break; - - case LLL_WARN: - logger->warn( "{}", msg); - break; - - case LLL_INFO: - logger->info( "{}", msg); - break; - - default: - logger->debug("{}", msg); - break; - } -} - int Relay::httpProtocolCallback(lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { int ret; @@ -444,6 +415,7 @@ void Relay::parse() switch (c) { case 'd': logging.setLevel(optarg); + lws_set_log_level(Web::lwsLogLevel(logging.getLevel()), Web::lwsLogger); break; case 'p': @@ -478,7 +450,8 @@ void Relay::parse() continue; -check: if (optarg == endptr) { +check: + if (optarg == endptr) { logger->error("Failed to parse parse option argument '-{} {}'", c, optarg); exit(EXIT_FAILURE); } @@ -558,7 +531,7 @@ const lws_http_mount Relay::mount = { .cache_intermediaries = 0, .origin_protocol = LWSMPRO_CALLBACK, /* dynamic */ .mountpoint_len = 7, /* char count */ - .basic_auth_login_file =nullptr, + .basic_auth_login_file = nullptr, }; } /* namespace tools */