From 7a69007a24cfff30158ea80665cb6c3c9d3251b0 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 9 Oct 2012 01:31:27 +0200 Subject: [PATCH] journal: implement follow mode for HTTP GET in gatewayd --- src/journal/journal-gatewayd.c | 32 +++++++++++++++++++++++++++++++- src/journal/journalctl.c | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/journal/journal-gatewayd.c b/src/journal/journal-gatewayd.c index 9599e891d..b6a9a2a28 100644 --- a/src/journal/journal-gatewayd.c +++ b/src/journal/journal-gatewayd.c @@ -47,6 +47,8 @@ typedef struct RequestMeta { uint64_t delta, size; int argument_parse_error; + + bool follow; } RequestMeta; static const char* const mime_types[_OUTPUT_MODE_MAX] = { @@ -194,8 +196,20 @@ static ssize_t request_reader_entries( if (r < 0) { log_error("Failed to advance journal pointer: %s", strerror(-r)); return MHD_CONTENT_READER_END_WITH_ERROR; - } else if (r == 0) + } else if (r == 0) { + + if (m->follow) { + r = sd_journal_wait(m->journal, (uint64_t) -1); + if (r < 0) { + log_error("Couldn't wait for journal event: %s", strerror(-r)); + return MHD_CONTENT_READER_END_WITH_ERROR; + } + + continue; + } + return MHD_CONTENT_READER_END_OF_STREAM; + } pos -= m->size; m->delta += m->size; @@ -356,6 +370,22 @@ static int request_parse_arguments_iterator( return MHD_NO; } + if (streq(key, "follow")) { + if (isempty(value)) { + m->follow = true; + return MHD_YES; + } + + r = parse_boolean(value); + if (r < 0) { + m->argument_parse_error = r; + return MHD_NO; + } + + m->follow = r; + return MHD_YES; + } + p = strjoin(key, "=", strempty(value), NULL); if (!p) { m->argument_parse_error = log_oom(); diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index cbf983318..b6f9b2f22 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -915,7 +915,7 @@ int main(int argc, char *argv[]) { r = sd_journal_wait(j, (uint64_t) -1); if (r < 0) { - log_error("Couldn't wait for log event: %s", strerror(-r)); + log_error("Couldn't wait for journal event: %s", strerror(-r)); goto finish; } } -- 2.30.2