X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fcreate.c;h=d234c06a4f3f12afd891fce9e6e67b579d9e2483;hp=d9880504f80c0adca416c9f7b5a1cc67b82d8a36;hb=ecc48a904cc7c419fd1400afaa9ccb93be490cdd;hpb=16f6f82061de8b2a778e7c2a082d07c79ed8a790 diff --git a/src/bin/lttng/commands/create.c b/src/bin/lttng/commands/create.c index d9880504f..d234c06a4 100644 --- a/src/bin/lttng/commands/create.c +++ b/src/bin/lttng/commands/create.c @@ -17,6 +17,7 @@ #define _GNU_SOURCE #include +#include #include #include #include @@ -43,11 +44,13 @@ static char *opt_data_url; static int opt_no_consumer; static int opt_no_output; static int opt_snapshot; +static unsigned int opt_live_timer; static int opt_disable_consumer; enum { OPT_HELP = 1, OPT_LIST_OPTIONS, + OPT_LIVE_TIMER, }; static struct poptOption long_options[] = { @@ -62,6 +65,7 @@ static struct poptOption long_options[] = { {"no-consumer", 0, POPT_ARG_VAL, &opt_no_consumer, 1, 0, 0}, {"disable-consumer", 0, POPT_ARG_VAL, &opt_disable_consumer, 1, 0, 0}, {"snapshot", 0, POPT_ARG_VAL, &opt_snapshot, 1, 0, 0}, + {"live", 0, POPT_ARG_INT, 0, OPT_LIVE_TIMER, 0, 0}, {0, 0, 0, 0, 0, 0, 0} }; @@ -70,7 +74,7 @@ static struct poptOption long_options[] = { * why this declaration exists and used ONLY in for this command. */ extern int _lttng_create_session_ext(const char *name, const char *url, - const char *datetime); + const char *datetime, int live_timer); /* * usage @@ -85,12 +89,17 @@ static void usage(FILE *ofp) fprintf(ofp, " -h, --help Show this help\n"); fprintf(ofp, " --list-options Simple listing of options\n"); fprintf(ofp, " -o, --output PATH Specify output path for traces\n"); - fprintf(ofp, " --no-output Traces will not be outputed\n"); - fprintf(ofp, " --snasphot Set the session in snapshot mode.\n"); + fprintf(ofp, " --no-output Traces will not be outputted\n"); + fprintf(ofp, " --snapshot Set the session in snapshot mode.\n"); fprintf(ofp, " Created in no-output mode and uses the URL,\n"); fprintf(ofp, " if one, as the default snapshot output.\n"); fprintf(ofp, " Every channel will be set in overwrite mode\n"); fprintf(ofp, " and with mmap output (splice not supported).\n"); + fprintf(ofp, " --live USEC Set the session in live-reading mode.\n"); + fprintf(ofp, " The delay parameter in micro-seconds is the\n"); + fprintf(ofp, " maximum time the user can wait for the data\n"); + fprintf(ofp, " to be flushed. Requires a network URL (-U or -C/-D)\n"); + fprintf(ofp, " and a lttng-relayd listening.\n"); fprintf(ofp, "\n"); fprintf(ofp, "Extended Options:\n"); fprintf(ofp, "\n"); @@ -334,6 +343,18 @@ static int create_session(void) goto error; } + if ((opt_live_timer && !opt_url) && (opt_live_timer && !opt_data_url)) { + ERR("You need a network URL (-U or -C/-D) to use live tracing."); + ret = CMD_ERROR; + goto error; + } + + if (opt_snapshot && opt_live_timer) { + ERR("Snapshot and live modes are mutually exclusive."); + ret = CMD_ERROR; + goto error; + } + if (opt_snapshot) { /* No output by default. */ const char *snapshot_url = NULL; @@ -345,8 +366,10 @@ static int create_session(void) snapshot_url = url; } ret = lttng_create_session_snapshot(session_name, snapshot_url); + } else if (opt_live_timer) { + ret = lttng_create_session_live(session_name, url, opt_live_timer); } else { - ret = _lttng_create_session_ext(session_name, url, datetime); + ret = _lttng_create_session_ext(session_name, url, datetime, -1); } if (ret < 0) { /* Don't set ret so lttng can interpret the sessiond error. */ @@ -383,7 +406,7 @@ static int create_session(void) MSG("Default snapshot output set to: %s", print_str_url); } MSG("Snapshot mode set. Every channel enabled for that session will " - "be set in overwrite mode and mmap output"); + "be set in overwrite mode and mmap output."); } /* Init lttng session config */ @@ -414,6 +437,7 @@ error: int cmd_create(int argc, const char **argv) { int opt, ret = CMD_SUCCESS; + char *opt_arg = NULL; static poptContext pc; pc = poptGetContext(NULL, argc, argv, long_options, 0); @@ -427,6 +451,27 @@ int cmd_create(int argc, const char **argv) case OPT_LIST_OPTIONS: list_cmd_options(stdout, long_options); goto end; + case OPT_LIVE_TIMER: + { + unsigned long v; + + errno = 0; + opt_arg = poptGetOptArg(pc); + v = strtoul(opt_arg, NULL, 0); + if (errno != 0 || !isdigit(opt_arg[0])) { + ERR("Wrong value in --live parameter: %s", opt_arg); + ret = CMD_ERROR; + goto end; + } + if (v != (uint32_t) v) { + ERR("32-bit overflow in --live parameter: %s", opt_arg); + ret = CMD_ERROR; + goto end; + } + opt_live_timer = (uint32_t) v; + DBG("Session live timer interval set to %d", opt_live_timer); + break; + } default: usage(stderr); ret = CMD_UNDEFINED;