Zbigniew Jędrzejewski-Szmek 62fe94
From 9fd290443f5f99fca0dcd4216b1de70f7d3b8db1 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 62fe94
From: Jan Synacek <jsynacek@redhat.com>
Zbigniew Jędrzejewski-Szmek 62fe94
Date: Thu, 2 Oct 2014 14:39:29 +0200
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] journalctl: add --utc option
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
Introduce option to display time in UTC.
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 man/journalctl.xml       |  7 +++++++
Zbigniew Jędrzejewski-Szmek 62fe94
 src/journal/journalctl.c | 11 ++++++++++-
Zbigniew Jędrzejewski-Szmek 62fe94
 src/shared/logs-show.c   |  8 +++++---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/shared/output-mode.h |  1 +
Zbigniew Jędrzejewski-Szmek 62fe94
 4 files changed, 23 insertions(+), 4 deletions(-)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/man/journalctl.xml b/man/journalctl.xml
Zbigniew Jędrzejewski-Szmek 62fe94
index acd75a6370..7fb6afc8f6 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/man/journalctl.xml
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/man/journalctl.xml
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -380,6 +380,13 @@
Zbigniew Jędrzejewski-Szmek 62fe94
                         </varlistentry>
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                         <varlistentry>
Zbigniew Jędrzejewski-Szmek 62fe94
+                                <term><option>--utc</option></term>
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+                                <listitem><para>Express time in Coordinated Universal
Zbigniew Jędrzejewski-Szmek 62fe94
+                                Time (UTC).</para></listitem>
Zbigniew Jędrzejewski-Szmek 62fe94
+                        </varlistentry>
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+                        <varlistentry>
Zbigniew Jędrzejewski-Szmek 62fe94
                                 <term><option>-x</option></term>
Zbigniew Jędrzejewski-Szmek 62fe94
                                 <term><option>--catalog</option></term>
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 89a922c067..395f85c9ae 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/journal/journalctl.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/journal/journalctl.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -63,6 +63,7 @@
Zbigniew Jędrzejewski-Szmek 62fe94
 #define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 static OutputMode arg_output = OUTPUT_SHORT;
Zbigniew Jędrzejewski-Szmek 62fe94
+static bool arg_utc = false;
Zbigniew Jędrzejewski-Szmek 62fe94
 static bool arg_pager_end = false;
Zbigniew Jędrzejewski-Szmek 62fe94
 static bool arg_follow = false;
Zbigniew Jędrzejewski-Szmek 62fe94
 static bool arg_full = true;
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -191,6 +192,7 @@ static void help(void) {
Zbigniew Jędrzejewski-Szmek 62fe94
                "  -o --output=STRING       Change journal output mode (short, short-iso,\n"
Zbigniew Jędrzejewski-Szmek 62fe94
                "                                   short-precise, short-monotonic, verbose,\n"
Zbigniew Jędrzejewski-Szmek 62fe94
                "                                   export, json, json-pretty, json-sse, cat)\n"
Zbigniew Jędrzejewski-Szmek 62fe94
+               "     --utc                 Express time in Coordinated Universal Time (UTC)\n"
Zbigniew Jędrzejewski-Szmek 62fe94
                "  -x --catalog             Add message explanations where available\n"
Zbigniew Jędrzejewski-Szmek 62fe94
                "     --no-full             Ellipsize fields\n"
Zbigniew Jędrzejewski-Szmek 62fe94
                "  -a --all                 Show all fields, including long and unprintable\n"
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -250,6 +252,7 @@ static int parse_argv(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 ARG_DUMP_CATALOG,
Zbigniew Jędrzejewski-Szmek 62fe94
                 ARG_UPDATE_CATALOG,
Zbigniew Jędrzejewski-Szmek 62fe94
                 ARG_FORCE,
Zbigniew Jędrzejewski-Szmek 62fe94
+                ARG_UTC,
Zbigniew Jędrzejewski-Szmek 62fe94
         };
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         static const struct option options[] = {
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -299,6 +302,7 @@ static int parse_argv(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 { "update-catalog", no_argument,       NULL, ARG_UPDATE_CATALOG },
Zbigniew Jędrzejewski-Szmek 62fe94
                 { "reverse",        no_argument,       NULL, 'r'                },
Zbigniew Jędrzejewski-Szmek 62fe94
                 { "machine",        required_argument, NULL, 'M'                },
Zbigniew Jędrzejewski-Szmek 62fe94
+                { "utc",            no_argument,       NULL, ARG_UTC            },
Zbigniew Jędrzejewski-Szmek 62fe94
                 {}
Zbigniew Jędrzejewski-Szmek 62fe94
         };
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -639,6 +643,10 @@ static int parse_argv(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek 62fe94
                         arg_reverse = true;
Zbigniew Jędrzejewski-Szmek 62fe94
                         break;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+                case ARG_UTC:
Zbigniew Jędrzejewski-Szmek 62fe94
+                        arg_utc = true;
Zbigniew Jędrzejewski-Szmek 62fe94
+                        break;
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
                 case '?':
Zbigniew Jędrzejewski-Szmek 62fe94
                         return -EINVAL;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -1958,7 +1966,8 @@ int main(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek 62fe94
                                 arg_all * OUTPUT_SHOW_ALL |
Zbigniew Jędrzejewski-Szmek 62fe94
                                 arg_full * OUTPUT_FULL_WIDTH |
Zbigniew Jędrzejewski-Szmek 62fe94
                                 on_tty() * OUTPUT_COLOR |
Zbigniew Jędrzejewski-Szmek 62fe94
-                                arg_catalog * OUTPUT_CATALOG;
Zbigniew Jędrzejewski-Szmek 62fe94
+                                arg_catalog * OUTPUT_CATALOG |
Zbigniew Jędrzejewski-Szmek 62fe94
+                                arg_utc * OUTPUT_UTC;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                         r = output_journal(stdout, j, arg_output, 0, flags, &ellipsized);
Zbigniew Jędrzejewski-Szmek 62fe94
                         need_seek = true;
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 5a7bbaf03a..d5d9d090b5 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/shared/logs-show.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/shared/logs-show.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -311,8 +311,10 @@ static int output_short(
Zbigniew Jędrzejewski-Szmek 62fe94
                 uint64_t x;
Zbigniew Jędrzejewski-Szmek 62fe94
                 time_t t;
Zbigniew Jędrzejewski-Szmek 62fe94
                 struct tm tm;
Zbigniew Jędrzejewski-Szmek 62fe94
+                struct tm *(*gettime_r)(const time_t *, struct tm *);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = -ENOENT;
Zbigniew Jędrzejewski-Szmek 62fe94
+                gettime_r = (flags & OUTPUT_UTC) ? gmtime_r : localtime_r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (realtime)
Zbigniew Jędrzejewski-Szmek 62fe94
                         r = safe_atou64(realtime, &x);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -329,17 +331,17 @@ static int output_short(
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 switch(mode) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 case OUTPUT_SHORT_ISO:
Zbigniew Jędrzejewski-Szmek 62fe94
-                        r = strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", localtime_r(&t, &tm));
Zbigniew Jędrzejewski-Szmek 62fe94
+                        r = strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", gettime_r(&t, &tm));
Zbigniew Jędrzejewski-Szmek 62fe94
                         break;
Zbigniew Jędrzejewski-Szmek 62fe94
                 case OUTPUT_SHORT_PRECISE:
Zbigniew Jędrzejewski-Szmek 62fe94
-                        r = strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm));
Zbigniew Jędrzejewski-Szmek 62fe94
+                        r = strftime(buf, sizeof(buf), "%b %d %H:%M:%S", gettime_r(&t, &tm));
Zbigniew Jędrzejewski-Szmek 62fe94
                         if (r > 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
                                 snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
Zbigniew Jędrzejewski-Szmek 62fe94
                                          ".%06llu", (unsigned long long) (x % USEC_PER_SEC));
Zbigniew Jędrzejewski-Szmek 62fe94
                         }
Zbigniew Jędrzejewski-Szmek 62fe94
                         break;
Zbigniew Jędrzejewski-Szmek 62fe94
                 default:
Zbigniew Jędrzejewski-Szmek 62fe94
-                        r = strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm));
Zbigniew Jędrzejewski-Szmek 62fe94
+                        r = strftime(buf, sizeof(buf), "%b %d %H:%M:%S", gettime_r(&t, &tm));
Zbigniew Jędrzejewski-Szmek 62fe94
                 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (r <= 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/shared/output-mode.h b/src/shared/output-mode.h
Zbigniew Jędrzejewski-Szmek 62fe94
index ac1bb0123b..81d7f05d91 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/shared/output-mode.h
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/shared/output-mode.h
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -44,4 +44,5 @@ typedef enum OutputFlags {
Zbigniew Jędrzejewski-Szmek 62fe94
         OUTPUT_COLOR          = 1 << 4,
Zbigniew Jędrzejewski-Szmek 62fe94
         OUTPUT_CATALOG        = 1 << 5,
Zbigniew Jędrzejewski-Szmek 62fe94
         OUTPUT_BEGIN_NEWLINE  = 1 << 6,
Zbigniew Jędrzejewski-Szmek 62fe94
+        OUTPUT_UTC            = 1 << 7,
Zbigniew Jędrzejewski-Szmek 62fe94
 } OutputFlags;