mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
journal: support epxorting the journal in a format suitable for text/event-stream
This commit is contained in:
parent
33316dbf20
commit
48383c2511
@ -193,6 +193,7 @@
|
|||||||
<literal>export</literal>,
|
<literal>export</literal>,
|
||||||
<literal>json</literal>,
|
<literal>json</literal>,
|
||||||
<literal>json-pretty</literal>,
|
<literal>json-pretty</literal>,
|
||||||
|
<literal>json-sse</literal>,
|
||||||
<literal>cat</literal>. <literal>short</literal>
|
<literal>cat</literal>. <literal>short</literal>
|
||||||
is the default and generates an output
|
is the default and generates an output
|
||||||
that is mostly identical to the
|
that is mostly identical to the
|
||||||
@ -219,7 +220,12 @@
|
|||||||
structures, but formats them in
|
structures, but formats them in
|
||||||
multiple lines in order to make them
|
multiple lines in order to make them
|
||||||
more readable for
|
more readable for
|
||||||
humans. <literal>cat</literal>
|
humans. <literal>json-sse</literal>
|
||||||
|
also formats entries as JSON data
|
||||||
|
structures, but wraps them in a format
|
||||||
|
suitable for <ulink
|
||||||
|
url="https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events">Server-Sent
|
||||||
|
Events</ulink>. <literal>cat</literal>
|
||||||
generates a very terse output only
|
generates a very terse output only
|
||||||
showing the actual message of each
|
showing the actual message of each
|
||||||
journal entry with no meta data, not
|
journal entry with no meta data, not
|
||||||
|
@ -55,7 +55,8 @@ typedef struct RequestMeta {
|
|||||||
static const char* const mime_types[_OUTPUT_MODE_MAX] = {
|
static const char* const mime_types[_OUTPUT_MODE_MAX] = {
|
||||||
[OUTPUT_SHORT] = "text/plain",
|
[OUTPUT_SHORT] = "text/plain",
|
||||||
[OUTPUT_JSON] = "application/json",
|
[OUTPUT_JSON] = "application/json",
|
||||||
[OUTPUT_EXPORT] = "application/vnd.fdo.journal"
|
[OUTPUT_JSON_SSE] = "text/event-stream",
|
||||||
|
[OUTPUT_EXPORT] = "application/vnd.fdo.journal",
|
||||||
};
|
};
|
||||||
|
|
||||||
static RequestMeta *request_meta(void **connection_cls) {
|
static RequestMeta *request_meta(void **connection_cls) {
|
||||||
@ -286,6 +287,8 @@ static int request_parse_accept(
|
|||||||
|
|
||||||
if (streq(accept, mime_types[OUTPUT_JSON]))
|
if (streq(accept, mime_types[OUTPUT_JSON]))
|
||||||
m->mode = OUTPUT_JSON;
|
m->mode = OUTPUT_JSON;
|
||||||
|
else if (streq(accept, mime_types[OUTPUT_JSON_SSE]))
|
||||||
|
m->mode = OUTPUT_JSON_SSE;
|
||||||
else if (streq(accept, mime_types[OUTPUT_EXPORT]))
|
else if (streq(accept, mime_types[OUTPUT_EXPORT]))
|
||||||
m->mode = OUTPUT_EXPORT;
|
m->mode = OUTPUT_EXPORT;
|
||||||
else
|
else
|
||||||
|
@ -93,7 +93,7 @@ static int help(void) {
|
|||||||
" -n --lines[=INTEGER] Number of journal entries to show\n"
|
" -n --lines[=INTEGER] Number of journal entries to show\n"
|
||||||
" --no-tail Show all lines, even in follow mode\n"
|
" --no-tail Show all lines, even in follow mode\n"
|
||||||
" -o --output=STRING Change journal output mode (short, short-monotonic,\n"
|
" -o --output=STRING Change journal output mode (short, short-monotonic,\n"
|
||||||
" verbose, export, json, json-pretty, cat)\n"
|
" verbose, export, json, json-pretty, json-sse, cat)\n"
|
||||||
" -q --quiet Don't show privilege warning\n"
|
" -q --quiet Don't show privilege warning\n"
|
||||||
" -m --merge Show entries from all available journals\n"
|
" -m --merge Show entries from all available journals\n"
|
||||||
" -b --this-boot Show data only from current boot\n"
|
" -b --this-boot Show data only from current boot\n"
|
||||||
|
@ -502,7 +502,10 @@ static int output_json(
|
|||||||
(unsigned long long) realtime,
|
(unsigned long long) realtime,
|
||||||
(unsigned long long) monotonic,
|
(unsigned long long) monotonic,
|
||||||
sd_id128_to_string(boot_id, sid));
|
sd_id128_to_string(boot_id, sid));
|
||||||
else
|
else {
|
||||||
|
if (mode == OUTPUT_JSON_SSE)
|
||||||
|
fputs("data: ", f);
|
||||||
|
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"{ \"__CURSOR\" : \"%s\", "
|
"{ \"__CURSOR\" : \"%s\", "
|
||||||
"\"__REALTIME_TIMESTAMP\" : \"%llu\", "
|
"\"__REALTIME_TIMESTAMP\" : \"%llu\", "
|
||||||
@ -512,6 +515,7 @@ static int output_json(
|
|||||||
(unsigned long long) realtime,
|
(unsigned long long) realtime,
|
||||||
(unsigned long long) monotonic,
|
(unsigned long long) monotonic,
|
||||||
sd_id128_to_string(boot_id, sid));
|
sd_id128_to_string(boot_id, sid));
|
||||||
|
}
|
||||||
free(cursor);
|
free(cursor);
|
||||||
|
|
||||||
SD_JOURNAL_FOREACH_DATA(j, data, length) {
|
SD_JOURNAL_FOREACH_DATA(j, data, length) {
|
||||||
@ -541,6 +545,8 @@ static int output_json(
|
|||||||
|
|
||||||
if (mode == OUTPUT_JSON_PRETTY)
|
if (mode == OUTPUT_JSON_PRETTY)
|
||||||
fputs("\n}\n", f);
|
fputs("\n}\n", f);
|
||||||
|
else if (mode == OUTPUT_JSON_SSE)
|
||||||
|
fputs("}\n\n", f);
|
||||||
else
|
else
|
||||||
fputs(" }\n", f);
|
fputs(" }\n", f);
|
||||||
|
|
||||||
@ -592,6 +598,7 @@ static int (*output_funcs[_OUTPUT_MODE_MAX])(
|
|||||||
[OUTPUT_EXPORT] = output_export,
|
[OUTPUT_EXPORT] = output_export,
|
||||||
[OUTPUT_JSON] = output_json,
|
[OUTPUT_JSON] = output_json,
|
||||||
[OUTPUT_JSON_PRETTY] = output_json,
|
[OUTPUT_JSON_PRETTY] = output_json,
|
||||||
|
[OUTPUT_JSON_SSE] = output_json,
|
||||||
[OUTPUT_CAT] = output_cat
|
[OUTPUT_CAT] = output_cat
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -769,6 +776,7 @@ static const char *const output_mode_table[_OUTPUT_MODE_MAX] = {
|
|||||||
[OUTPUT_EXPORT] = "export",
|
[OUTPUT_EXPORT] = "export",
|
||||||
[OUTPUT_JSON] = "json",
|
[OUTPUT_JSON] = "json",
|
||||||
[OUTPUT_JSON_PRETTY] = "json-pretty",
|
[OUTPUT_JSON_PRETTY] = "json-pretty",
|
||||||
|
[OUTPUT_JSON_SSE] = "json-sse",
|
||||||
[OUTPUT_CAT] = "cat"
|
[OUTPUT_CAT] = "cat"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@ typedef enum OutputMode {
|
|||||||
OUTPUT_EXPORT,
|
OUTPUT_EXPORT,
|
||||||
OUTPUT_JSON,
|
OUTPUT_JSON,
|
||||||
OUTPUT_JSON_PRETTY,
|
OUTPUT_JSON_PRETTY,
|
||||||
|
OUTPUT_JSON_SSE,
|
||||||
OUTPUT_CAT,
|
OUTPUT_CAT,
|
||||||
_OUTPUT_MODE_MAX,
|
_OUTPUT_MODE_MAX,
|
||||||
_OUTPUT_MODE_INVALID = -1
|
_OUTPUT_MODE_INVALID = -1
|
||||||
|
@ -3939,7 +3939,7 @@ static int systemctl_help(void) {
|
|||||||
" -n --lines=INTEGER Journal entries to show\n"
|
" -n --lines=INTEGER Journal entries to show\n"
|
||||||
" --follow Follow journal\n"
|
" --follow Follow journal\n"
|
||||||
" -o --output=STRING Change journal output mode (short, short-monotonic,\n"
|
" -o --output=STRING Change journal output mode (short, short-monotonic,\n"
|
||||||
" verbose, export, json, json-pretty, cat)\n\n"
|
" verbose, export, json, json-pretty, json-sse, cat)\n\n"
|
||||||
"Unit Commands:\n"
|
"Unit Commands:\n"
|
||||||
" list-units List loaded units\n"
|
" list-units List loaded units\n"
|
||||||
" start [NAME...] Start (activate) one or more units\n"
|
" start [NAME...] Start (activate) one or more units\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user