]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
coredumpctl: Add --directory option for reading alternate journal
authorStef Walter <stefw@redhat.com>
Tue, 25 Aug 2015 08:36:49 +0000 (10:36 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 25 Aug 2015 18:06:43 +0000 (20:06 +0200)
In the Cockpit integration tests we hang onton the journal files
for a failed test and would like to inspect them using coredumpctl.

This commit adds the ability to specify an alternate directory
for coredumpctl to read the journal from.

man/coredumpctl.xml
src/journal/coredumpctl.c

index efbc655a76b9ad0ef7da58bb2396270209d82d05..1bcc984cc567de9f92b679efdc7e3be0497aec30 100644 (file)
         </para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>-D</option> <replaceable>DIR</replaceable></term>
+        <term><option>--directory=</option><replaceable>DIR</replaceable></term>
+
+        <listitem><para>Use the journal files in the specified <option>DIR</option>.
+        </para></listitem>
+      </varlistentry>
+
       <xi:include href="standard-options.xml" xpointer="help" />
       <xi:include href="standard-options.xml" xpointer="version" />
       <xi:include href="standard-options.xml" xpointer="no-pager" />
index 098f62af50a15e0f92c28d60ad09be4d152cc2ad..644ba91b0dbc57e4fe250639ed131a003b1835fb 100644 (file)
@@ -49,6 +49,7 @@ static enum {
         ACTION_GDB,
 } arg_action = ACTION_LIST;
 static const char* arg_field = NULL;
+static const char *arg_directory = NULL;
 static int arg_no_pager = false;
 static int arg_no_legend = false;
 static int arg_one = false;
@@ -131,6 +132,7 @@ static void help(void) {
                "  -1                 Show information about most recent entry only\n"
                "  -F --field=FIELD   List all values a certain field takes\n"
                "  -o --output=FILE   Write output to FILE\n\n"
+               "  -D --directory=DIR Use journal files from directory\n\n"
 
                "Commands:\n"
                "  list [MATCHES...]  List available coredumps (default)\n"
@@ -156,13 +158,14 @@ static int parse_argv(int argc, char *argv[], Set *matches) {
                 { "no-legend",    no_argument,       NULL, ARG_NO_LEGEND },
                 { "output",       required_argument, NULL, 'o'           },
                 { "field",        required_argument, NULL, 'F'           },
+                { "directory",    required_argument, NULL, 'D'           },
                 {}
         };
 
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "ho:F:1", options, NULL)) >= 0)
+        while ((c = getopt_long(argc, argv, "ho:F:1D:", options, NULL)) >= 0)
                 switch(c) {
 
                 case 'h':
@@ -208,6 +211,10 @@ static int parse_argv(int argc, char *argv[], Set *matches) {
                         arg_one = true;
                         break;
 
+                case 'D':
+                        arg_directory = optarg;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
@@ -808,10 +815,18 @@ int main(int argc, char *argv[]) {
 
         sigbus_install();
 
-        r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
-        if (r < 0) {
-                log_error_errno(r, "Failed to open journal: %m");
-                goto end;
+        if (arg_directory) {
+                r = sd_journal_open_directory(&j, arg_directory, 0);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to open journals in directory: %s: %m", arg_directory);
+                        goto end;
+                }
+        } else {
+                r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
+                if (r < 0) {
+                        log_error_errno(r, "Failed to open journal: %m");
+                        goto end;
+                }
         }
 
         /* We want full data, nothing truncated. */