Manpage: cleanup layout of snapshot
[lttng-tools.git] / src / bin / lttng / commands / snapshot.c
index cc0dd9629d4d37902a7f6603313b89671ea9584a..56acca8666cd7ee9910a0dcf70cbf0243e5d4c61 100644 (file)
@@ -76,13 +76,13 @@ static struct cmd_struct actions[] = {
  */
 static void usage(FILE *ofp)
 {
-       fprintf(ofp, "usage: lttng snapshot [ACTION]\n");
+       fprintf(ofp, "usage: lttng snapshot [OPTION] ACTION\n");
        fprintf(ofp, "\n");
        fprintf(ofp, "Actions:\n");
        fprintf(ofp, "   add-output [-m <SIZE>] [-s <NAME>] [-n <NAME>] <URL> | -C <URL> -D <URL>\n");
        fprintf(ofp, "      Setup and add an snapshot output for a session.\n");
        fprintf(ofp, "\n");
-       fprintf(ofp, "   del-output ID [-s <NAME>]\n");
+       fprintf(ofp, "   del-output ID | NAME [-s <NAME>]\n");
        fprintf(ofp, "      Delete an output for a session using the ID.\n");
        fprintf(ofp, "\n");
        fprintf(ofp, "   list-output [-s <NAME>]\n");
@@ -91,8 +91,9 @@ static void usage(FILE *ofp)
        fprintf(ofp, "   record [-m <SIZE>] [-s <NAME>] [-n <NAME>] [<URL> | -C <URL> -D <URL>]\n");
        fprintf(ofp, "      Snapshot a session's buffer(s) for all domains. If an URL is\n");
        fprintf(ofp, "      specified, it is used instead of a previously added output.\n");
-       fprintf(ofp, "      The snapshot is saved in the session directory in snapshot/ with\n");
-       fprintf(ofp, "      the top directory being NAME or the default: snapshot-ID/\n");
+       fprintf(ofp, "      Specifying only a name or/a size will override the current output value.\n");
+       fprintf(ofp, "      For instance, you can record a snapshot with a custom maximum size\n");
+       fprintf(ofp, "      or with a different name.\n");
        fprintf(ofp, "\n");
        fprintf(ofp, "Options:\n");
        fprintf(ofp, "  -h, --help           Show this help\n");
@@ -211,7 +212,7 @@ error:
 /*
  * Delete output by ID.
  */
-static int del_output(uint32_t id)
+static int del_output(uint32_t id, const char *name)
 {
        int ret;
        struct lttng_snapshot_output *output = NULL;
@@ -222,7 +223,14 @@ static int del_output(uint32_t id)
                goto error;
        }
 
-       ret = lttng_snapshot_output_set_id(id, output);
+       if (name) {
+               ret = lttng_snapshot_output_set_name(name, output);
+       } else if (id != UINT32_MAX) {
+               ret = lttng_snapshot_output_set_id(id, output);
+       } else {
+               ret = CMD_ERROR;
+               goto error;
+       }
        if (ret < 0) {
                ret = CMD_FATAL;
                goto error;
@@ -233,8 +241,13 @@ static int del_output(uint32_t id)
                goto error;
        }
 
-       MSG("Snapshot output id %" PRIu32 " successfully deleted for session %s",
-                       id, current_session_name);
+       if (id != UINT32_MAX) {
+               MSG("Snapshot output id %" PRIu32 " successfully deleted for session %s",
+                               id, current_session_name);
+       } else {
+               MSG("Snapshot output %s successfully deleted for session %s",
+                               name, current_session_name);
+       }
 
 error:
        lttng_snapshot_output_destroy(output);
@@ -297,6 +310,8 @@ end:
 static int cmd_del_output(int argc, const char **argv)
 {
        int ret = CMD_SUCCESS;
+       char *name;
+       long id;
 
        if (argc < 2) {
                usage(stderr);
@@ -304,7 +319,17 @@ static int cmd_del_output(int argc, const char **argv)
                goto end;
        }
 
-       ret = del_output(atoi(argv[1]));
+       errno = 0;
+       id = strtol(argv[1], &name, 10);
+       if (id == 0 && errno == 0) {
+               ret = del_output(UINT32_MAX, name);
+       } else if (errno == 0 && *name == '\0') {
+               ret = del_output(id, NULL);
+       } else {
+               ERR("Argument %s not recognized", argv[1]);
+               ret = -1;
+               goto end;
+       }
 
 end:
        return ret;
@@ -323,12 +348,10 @@ static int record(const char *url)
        int ret;
        struct lttng_snapshot_output *output = NULL;
 
-       if (url || (opt_ctrl_url && opt_data_url)) {
-               output = create_output_from_args(url);
-               if (!output) {
-                       ret = CMD_FATAL;
-                       goto error;
-               }
+       output = create_output_from_args(url);
+       if (!output) {
+               ret = CMD_FATAL;
+               goto error;
        }
 
        ret = lttng_snapshot_record(current_session_name, output, 0);
@@ -343,11 +366,10 @@ static int record(const char *url)
        } else if (opt_ctrl_url) {
                MSG("Snapshot written to ctrl: %s, data: %s", opt_ctrl_url,
                                opt_data_url);
-       } else {
-               MSG("Snapshot written in session directory.");
        }
 
 error:
+       lttng_snapshot_output_destroy(output);
        return ret;
 }
 
@@ -423,6 +445,8 @@ int cmd_snapshot(int argc, const char **argv)
                        char *endptr;
                        const char *opt = poptGetOptArg(pc);
 
+                       /* Documented by the man page of strtoll(3). */
+                       errno = 0;
                        val = strtoll(opt, &endptr, 10);
                        if ((errno == ERANGE && (val == LLONG_MAX || val == LONG_MIN))
                                        || (errno != 0 && val == 0)) {
This page took 0.024956 seconds and 4 git commands to generate.