From e40128a2da1e3dab782ec34ed4c00a14858dc63b Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Fri, 20 Jun 2014 09:58:51 +1000 Subject: [PATCH] Allow the loglevel to be changed on the fly --- src/ckpool.c | 25 +++++++++++++++++++++++++ src/connector.c | 4 ++++ src/generator.c | 4 ++++ src/stratifier.c | 2 ++ 4 files changed, 35 insertions(+) diff --git a/src/ckpool.c b/src/ckpool.c index 84639d9e..674aadf8 100644 --- a/src/ckpool.c +++ b/src/ckpool.c @@ -130,6 +130,17 @@ void ckmsgq_add(ckmsgq_t *ckmsgq, void *data) mutex_unlock(&ckmsgq->lock); } +static void broadcast_proc(ckpool_t *ckp, const char *buf) +{ + int i; + + for (i = 0; i < ckp->proc_instances; i++) { + proc_instance_t *pi = ckp->children[i]; + + send_proc(pi, buf); + } +} + /* Listen for incoming global requests. Always returns a response if possible */ static void *listener(void *arg) { @@ -159,6 +170,20 @@ retry: } else if (!strncasecmp(buf, "ping", 4)) { LOGDEBUG("Listener received ping request"); send_unix_msg(sockd, "pong"); + } else if (!strncasecmp(buf, "loglevel", 8)) { + int loglevel; + + if (sscanf(buf, "loglevel=%d", &loglevel) != 1) { + LOGWARNING("Failed to parse loglevel message %s", buf); + send_unix_msg(sockd, "Failed"); + } else if (loglevel < LOG_EMERG || loglevel > LOG_DEBUG) { + LOGWARNING("Invalid loglevel %d sent", loglevel); + send_unix_msg(sockd, "Invalid"); + } else { + ckp->loglevel = loglevel; + broadcast_proc(ckp, buf); + send_unix_msg(sockd, "success"); + } } else if (!strncasecmp(buf, "getfd", 5)) { char *msg; diff --git a/src/connector.c b/src/connector.c index 9c5c5a68..ae0893ce 100644 --- a/src/connector.c +++ b/src/connector.c @@ -506,6 +506,10 @@ retry: ci->accept = false; goto retry; } + if (!strncasecmp(buf, "loglevel", 8)) { + sscanf(buf, "loglevel=%d", &ckp->loglevel); + goto retry; + } LOGDEBUG("Connector received message: %s", buf); if (!strncasecmp(buf, "shutdown", 8)) diff --git a/src/generator.c b/src/generator.c index af2fa6aa..e6853ae0 100644 --- a/src/generator.c +++ b/src/generator.c @@ -279,6 +279,8 @@ retry: LOGNOTICE("Submitting block data!"); if (submit_block(cs, buf + 12)) send_proc(ckp->stratifier, "block"); + } else if (!strncasecmp(buf, "loglevel", 8)) { + sscanf(buf, "loglevel=%d", &ckp->loglevel); } else if (!strncasecmp(buf, "ping", 4)) { LOGDEBUG("Generator received ping request"); send_unix_msg(sockd, "pong"); @@ -1253,6 +1255,8 @@ retry: pthread_cancel(proxi->pth_precv); pthread_cancel(proxi->pth_psend); goto reconnect; + } else if (!strncasecmp(buf, "loglevel", 8)) { + sscanf(buf, "loglevel=%d", &ckp->loglevel); } else if (!strncasecmp(buf, "ping", 4)) { LOGDEBUG("Proxy received ping request"); send_unix_msg(sockd, "pong"); diff --git a/src/stratifier.c b/src/stratifier.c index 16965448..783aa9a3 100644 --- a/src/stratifier.c +++ b/src/stratifier.c @@ -963,6 +963,8 @@ retry: } else if (!strncasecmp(buf, "block", 5)) { block_solve(ckp); update_base(ckp); + } else if (!strncasecmp(buf, "loglevel", 8)) { + sscanf(buf, "loglevel=%d", &ckp->loglevel); } else { json_t *val = json_loads(buf, 0, NULL);