*/
static void usage(FILE *ofp)
{
- fprintf(ofp, "usage: lttng snapshot [ACTION]\n");
+ fprintf(ofp, "usage: lttng snapshot 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");
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");
/*
* 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;
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;
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);
static int cmd_del_output(int argc, const char **argv)
{
int ret = CMD_SUCCESS;
+ char *name;
+ long id;
if (argc < 2) {
usage(stderr);
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;
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);
} 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:
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)) {