kore

a fork of the worlds most advanced web framework
Log | Files | Refs | README | LICENSE

commit baafa4897e29d2c274bf6b271455214458dc2540
parent cb482d8e8f45f933f55361f45ec852fcf332740d
Author: Joris Vink <joris@coders.se>
Date:   Thu, 15 Nov 2018 16:01:37 +0100

Add -q flag.

If specified Kore will run quietly and only log important messages.

Diffstat:
Minclude/kore/kore.h | 1+
Msrc/config.c | 24++++++++++++++++--------
Msrc/kore.c | 34+++++++++++++++++++++++-----------
Msrc/msg.c | 4+++-
Msrc/worker.c | 17+++++++++++++----
5 files changed, 56 insertions(+), 24 deletions(-)

diff --git a/include/kore/kore.h b/include/kore/kore.h @@ -506,6 +506,7 @@ extern char *config_file; extern pid_t kore_pid; extern int foreground; +extern int kore_quiet; extern int kore_debug; extern int skip_chroot; extern int skip_runas; diff --git a/src/config.c b/src/config.c @@ -238,8 +238,11 @@ kore_parse_config(void) if (getcwd(path, sizeof(path)) == NULL) fatal("getcwd: %s", errno_s); kore_root_path = kore_strdup(path); - kore_log(LOG_NOTICE, - "privsep: no root path set, using working directory"); + + if (!kore_quiet) { + kore_log(LOG_NOTICE, "privsep: no root path set, " + "using working directory"); + } } if (getuid() != 0 && skip_chroot == 0) { @@ -255,12 +258,15 @@ kore_parse_config(void) } if (skip_runas) { - kore_log(LOG_WARNING, "privsep: will not change user"); + if (!kore_quiet) + kore_log(LOG_WARNING, "privsep: will not change user"); } else { #if !defined(KORE_NO_TLS) if (keymgr_runas_user == NULL) { - kore_log(LOG_NOTICE, - "privsep: no keymgr_runas set, using 'runas` user"); + if (!kore_quiet) { + kore_log(LOG_NOTICE, "privsep: no keymgr_runas " + "set, using 'runas` user"); + } keymgr_runas_user = kore_strdup(kore_runas_user); } #endif @@ -268,13 +274,15 @@ kore_parse_config(void) #if !defined(KORE_NO_TLS) if (keymgr_root_path == NULL) { - kore_log(LOG_NOTICE, - "privsep: no keymgr_root set, using 'root` directory"); + if (!kore_quiet) { + kore_log(LOG_NOTICE, "privsep: no keymgr_root set, " + "using 'root` directory"); + } keymgr_root_path = kore_strdup(kore_root_path); } #endif - if (skip_chroot) + if (skip_chroot && !kore_quiet) kore_log(LOG_WARNING, "privsep: will not chroot"); } diff --git a/src/kore.c b/src/kore.c @@ -43,6 +43,7 @@ pid_t kore_pid = -1; u_int16_t cpu_count = 1; int foreground = 0; int kore_debug = 0; +int kore_quiet = 0; int skip_runas = 0; int skip_chroot = 0; u_int8_t worker_count = 0; @@ -76,6 +77,7 @@ usage(void) fprintf(stderr, "\t-f\tstart in foreground\n"); fprintf(stderr, "\t-h\tthis help text\n"); fprintf(stderr, "\t-n\tdo not chroot\n"); + fprintf(stderr, "\t-q\tonly log errors\n"); fprintf(stderr, "\t-r\tdo not drop privileges\n"); fprintf(stderr, "\t-v\tdisplay %s build information\n", __progname); @@ -126,9 +128,9 @@ main(int argc, char *argv[]) flags = 0; #if !defined(KORE_SINGLE_BINARY) - while ((ch = getopt(argc, argv, "c:dfhnrv")) != -1) { + while ((ch = getopt(argc, argv, "c:dfhnqrv")) != -1) { #else - while ((ch = getopt(argc, argv, "dfhnrv")) != -1) { + while ((ch = getopt(argc, argv, "dfhnqrv")) != -1) { #endif flags++; switch (ch) { @@ -151,6 +153,9 @@ main(int argc, char *argv[]) case 'n': skip_chroot = 1; break; + case 'q': + kore_quiet = 1; + break; case 'r': skip_runas = 1; break; @@ -223,7 +228,9 @@ main(int argc, char *argv[]) kore_signal_setup(); kore_server_start(argc, argv); - kore_log(LOG_NOTICE, "server shutting down"); + if (!kore_quiet) + kore_log(LOG_NOTICE, "server shutting down"); + kore_worker_shutdown(); rcall = kore_runtime_getcall("kore_parent_teardown"); @@ -236,7 +243,9 @@ main(int argc, char *argv[]) kore_log(LOG_NOTICE, "failed to remove pidfile (%s)", errno_s); kore_listener_cleanup(); - kore_log(LOG_NOTICE, "goodbye"); + + if (!kore_quiet) + kore_log(LOG_NOTICE, "goodbye"); #if defined(KORE_USE_PYTHON) kore_python_cleanup(); @@ -337,7 +346,7 @@ kore_server_bind(const char *ip, const char *port, const char *ccb) return (KORE_RESULT_ERROR); } - if (foreground) { + if (foreground && !kore_quiet) { #if !defined(KORE_NO_TLS) kore_log(LOG_NOTICE, "running on https://%s:%s", ip, port); #else @@ -387,7 +396,7 @@ kore_server_bind_unix(const char *path, const char *ccb) return (KORE_RESULT_ERROR); } - if (foreground) + if (foreground && !kore_quiet) kore_log(LOG_NOTICE, "running on %s", path); return (KORE_RESULT_OK); @@ -606,19 +615,22 @@ kore_server_start(int argc, char *argv[]) kore_pid = getpid(); kore_write_kore_pid(); - kore_log(LOG_NOTICE, "%s is starting up", __progname); + if (!kore_quiet) { + kore_log(LOG_NOTICE, "%s is starting up", __progname); #if defined(KORE_USE_PGSQL) - kore_log(LOG_NOTICE, "pgsql built-in enabled"); + kore_log(LOG_NOTICE, "pgsql built-in enabled"); #endif #if defined(KORE_USE_TASKS) - kore_log(LOG_NOTICE, "tasks built-in enabled"); + kore_log(LOG_NOTICE, "tasks built-in enabled"); #endif #if defined(KORE_USE_JSONRPC) - kore_log(LOG_NOTICE, "jsonrpc built-in enabled"); + kore_log(LOG_NOTICE, "jsonrpc built-in enabled"); #endif #if defined(KORE_USE_PYTHON) - kore_log(LOG_NOTICE, "python built-in enabled"); + kore_log(LOG_NOTICE, "python built-in enabled"); #endif + } + #if !defined(KORE_SINGLE_BINARY) rcall = kore_runtime_getcall("kore_parent_configure"); if (rcall != NULL) { diff --git a/src/msg.c b/src/msg.c @@ -207,7 +207,9 @@ msg_recv_data(struct netbuf *nb) static void msg_disconnected_parent(struct connection *c) { - kore_log(LOG_ERR, "parent gone, shutting down"); + if (!kore_quiet) + kore_log(LOG_ERR, "parent gone, shutting down"); + if (kill(worker->pid, SIGQUIT) == -1) kore_log(LOG_ERR, "failed to send SIGQUIT: %s", errno_s); } diff --git a/src/worker.c b/src/worker.c @@ -185,7 +185,11 @@ kore_worker_shutdown(void) struct kore_worker *kw; u_int16_t id, done; - kore_log(LOG_NOTICE, "waiting for workers to drain and shutdown"); + if (!kore_quiet) { + kore_log(LOG_NOTICE, + "waiting for workers to drain and shutdown"); + } + for (;;) { done = 0; for (id = 0; id < worker_count; id++) { @@ -367,7 +371,10 @@ kore_worker_entry(struct kore_worker *kw) if (nlisteners == 0) worker_no_lock = 1; - kore_log(LOG_NOTICE, "worker %d started (cpu#%d)", kw->id, kw->cpu); + if (!kore_quiet) { + kore_log(LOG_NOTICE, + "worker %d started (cpu#%d)", kw->id, kw->cpu); + } rcall = kore_runtime_getcall("kore_worker_configure"); if (rcall != NULL) { @@ -524,8 +531,10 @@ kore_worker_wait(int final) if (kw->pid != pid) continue; - kore_log(LOG_NOTICE, "worker %d (%d)-> status %d", - kw->id, pid, status); + if (final == 0 || (final == 1 && !kore_quiet)) { + kore_log(LOG_NOTICE, "worker %d (%d)-> status %d", + kw->id, pid, status); + } if (final) { kw->pid = 0;