X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Flttng.c;h=2df8b8740225afc831c5769779473c0db5140f51;hp=dc9dd9241b9847eb12466fefdefa8120314321ad;hb=234170acd2ca985ff9023007eef52440601d8f12;hpb=3c9bd23cc5999729bb49a973d8c1e2bedef939bb diff --git a/src/bin/lttng/lttng.c b/src/bin/lttng/lttng.c index dc9dd9241..2df8b8740 100644 --- a/src/bin/lttng/lttng.c +++ b/src/bin/lttng/lttng.c @@ -39,7 +39,10 @@ static char *opt_sessiond_path; static pid_t sessiond_pid; static volatile int recv_child_signal; +char *opt_relayd_path; + enum { + OPT_RELAYD_PATH, OPT_SESSION_PATH, OPT_DUMP_OPTIONS, OPT_DUMP_COMMANDS, @@ -52,8 +55,10 @@ static struct option long_options[] = { {"group", 1, NULL, 'g'}, {"verbose", 0, NULL, 'v'}, {"quiet", 0, NULL, 'q'}, + {"mi", 1, NULL, 'm'}, {"no-sessiond", 0, NULL, 'n'}, {"sessiond-path", 1, NULL, OPT_SESSION_PATH}, + {"relayd-path", 1, NULL, OPT_RELAYD_PATH}, {"list-options", 0, NULL, OPT_DUMP_OPTIONS}, {"list-commands", 0, NULL, OPT_DUMP_COMMANDS}, {NULL, 0, NULL, 0} @@ -76,6 +81,8 @@ static struct cmd_struct commands[] = { { "calibrate", cmd_calibrate}, { "view", cmd_view}, { "snapshot", cmd_snapshot}, + { "save", cmd_save}, + { "load", cmd_load}, { "enable-consumer", cmd_enable_consumer}, /* OBSOLETE */ { "disable-consumer", cmd_disable_consumer}, /* OBSOLETE */ { NULL, NULL} /* Array closure */ @@ -83,7 +90,8 @@ static struct cmd_struct commands[] = { static void usage(FILE *ofp) { - fprintf(ofp, "LTTng Trace Control " VERSION" - " VERSION_NAME"\n\n"); + fprintf(ofp, "LTTng Trace Control " VERSION " - " VERSION_NAME "%s\n\n", + GIT_VERSION[0] == '\0' ? "" : " - " GIT_VERSION); fprintf(ofp, "usage: lttng [OPTIONS] []\n"); fprintf(ofp, "\n"); fprintf(ofp, "Options:\n"); @@ -93,9 +101,12 @@ static void usage(FILE *ofp) fprintf(ofp, " --list-commands Simple listing of lttng commands\n"); fprintf(ofp, " -v, --verbose Increase verbosity\n"); fprintf(ofp, " -q, --quiet Quiet mode\n"); + fprintf(ofp, " -m, --mi TYPE Machine Interface mode.\n"); + fprintf(ofp, " Type: xml\n"); fprintf(ofp, " -g, --group NAME Unix tracing group name. (default: tracing)\n"); fprintf(ofp, " -n, --no-sessiond Don't spawn a session daemon\n"); fprintf(ofp, " --sessiond-path PATH Session daemon full path\n"); + fprintf(ofp, " --relayd-path PATH Relayd daemon full path\n"); fprintf(ofp, "\n"); fprintf(ofp, "Commands:\n"); fprintf(ofp, " add-context Add context to event and/or channel\n"); @@ -113,6 +124,8 @@ static void usage(FILE *ofp) fprintf(ofp, " stop Stop tracing\n"); fprintf(ofp, " version Show version information\n"); fprintf(ofp, " view Start trace viewer\n"); + fprintf(ofp, " save Save session configuration\n"); + fprintf(ofp, " load Load session configuration\n"); fprintf(ofp, "\n"); fprintf(ofp, "Each command also has its own -h, --help option.\n"); fprintf(ofp, "\n"); @@ -122,8 +135,28 @@ static void usage(FILE *ofp) static void version(FILE *ofp) { - fprintf(ofp, "%s (LTTng Trace Control) " VERSION" - " VERSION_NAME"\n", - progname); + fprintf(ofp, "%s (LTTng Trace Control) " VERSION" - " VERSION_NAME "%s\n", + progname, + GIT_VERSION[0] == '\0' ? "" : " - " GIT_VERSION); +} + +/* + * Find the MI output type enum from a string. This function is for the support + * of machine interface output. + */ +static int mi_output_type(const char *output_type) +{ + int ret = 0; + + if (!strncasecmp("xml", output_type, 3)) { + ret = LTTNG_MI_XML; + } else { + /* Invalid output format */ + ERR("MI output format not supported"); + ret = -LTTNG_ERR_MI_OUTPUT_TYPE; + } + + return ret; } /* @@ -417,7 +450,7 @@ static int parse_args(int argc, char **argv) clean_exit(EXIT_FAILURE); } - while ((opt = getopt_long(argc, argv, "+Vhnvqg:", long_options, NULL)) != -1) { + while ((opt = getopt_long(argc, argv, "+Vhnvqg:m:", long_options, NULL)) != -1) { switch (opt) { case 'V': version(stdout); @@ -428,11 +461,21 @@ static int parse_args(int argc, char **argv) ret = 0; goto end; case 'v': - lttng_opt_verbose += 1; + /* There is only 3 possible level of verbosity. (-vvv) */ + if (lttng_opt_verbose < 3) { + lttng_opt_verbose += 1; + } break; case 'q': lttng_opt_quiet = 1; break; + case 'm': + lttng_opt_mi = mi_output_type(optarg); + if (lttng_opt_mi < 0) { + ret = lttng_opt_mi; + goto error; + } + break; case 'g': lttng_set_tracing_group(optarg); break; @@ -442,6 +485,9 @@ static int parse_args(int argc, char **argv) case OPT_SESSION_PATH: opt_sessiond_path = strdup(optarg); break; + case OPT_RELAYD_PATH: + opt_relayd_path = strdup(optarg); + break; case OPT_DUMP_OPTIONS: list_options(stdout); ret = 0;