X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Flttng.c;h=d3aaa8424683b58c189d2c8f9afc894f5d937bf2;hp=16582b0363b86fa1405d4afd6d1751f3c36b9499;hb=b8ec3da8333ea4489eaee6b3060287adc666a729;hpb=52b07d8a5f38946bea3176d486c1934ca7639415 diff --git a/src/bin/lttng/lttng.c b/src/bin/lttng/lttng.c index 16582b036..d3aaa8424 100644 --- a/src/bin/lttng/lttng.c +++ b/src/bin/lttng/lttng.c @@ -2,9 +2,8 @@ * Copyright (c) 2011 David Goulet * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * as published by the Free Software Foundation; only version 2 - * of the License. + * it under the terms of the GNU General Public License, version 2 only, + * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -35,9 +34,6 @@ /* Variables */ static char *progname; - -int opt_quiet; -int opt_verbose; static int opt_no_sessiond; static char *opt_sessiond_path; static pid_t sessiond_pid; @@ -78,13 +74,15 @@ static struct cmd_struct commands[] = { { "version", cmd_version}, { "calibrate", cmd_calibrate}, { "view", cmd_view}, + { "enable-consumer", cmd_enable_consumer}, /* OBSELETE */ + { "disable-consumer", cmd_disable_consumer}, /*OBSELETE */ { NULL, NULL} /* Array closure */ }; static void usage(FILE *ofp) { - fprintf(ofp, "LTTng Trace Control " VERSION"\n\n"); - fprintf(ofp, "usage: lttng [OPTIONS] \n"); + fprintf(ofp, "LTTng Trace Control " VERSION" - " VERSION_NAME"\n\n"); + fprintf(ofp, "usage: lttng [OPTIONS] []\n"); fprintf(ofp, "\n"); fprintf(ofp, "Options:\n"); fprintf(ofp, " -h, --help Show this help\n"); @@ -97,20 +95,20 @@ static void usage(FILE *ofp) fprintf(ofp, " --sessiond-path PATH Session daemon full path\n"); fprintf(ofp, "\n"); fprintf(ofp, "Commands:\n"); - fprintf(ofp, " add-context Add context to event and/or channel\n"); - fprintf(ofp, " calibrate Quantify LTTng overhead\n"); - fprintf(ofp, " create Create tracing session\n"); - fprintf(ofp, " destroy Tear down tracing session\n"); - fprintf(ofp, " enable-channel Enable tracing channel\n"); - fprintf(ofp, " enable-event Enable tracing event\n"); - fprintf(ofp, " disable-channel Disable tracing channel\n"); - fprintf(ofp, " disable-event Disable tracing event\n"); - fprintf(ofp, " list List possible tracing options\n"); - fprintf(ofp, " set-session Set current session name\n"); - fprintf(ofp, " start Start tracing\n"); - fprintf(ofp, " stop Stop tracing\n"); - fprintf(ofp, " version Show version information\n"); - fprintf(ofp, " view Start trace viewer\n"); + fprintf(ofp, " add-context Add context to event and/or channel\n"); + fprintf(ofp, " calibrate Quantify LTTng overhead\n"); + fprintf(ofp, " create Create tracing session\n"); + fprintf(ofp, " destroy Tear down tracing session\n"); + fprintf(ofp, " enable-channel Enable tracing channel\n"); + fprintf(ofp, " enable-event Enable tracing event\n"); + fprintf(ofp, " disable-channel Disable tracing channel\n"); + fprintf(ofp, " disable-event Disable tracing event\n"); + fprintf(ofp, " list List possible tracing options\n"); + fprintf(ofp, " set-session Set current session name\n"); + fprintf(ofp, " start Start tracing\n"); + fprintf(ofp, " stop Stop tracing\n"); + fprintf(ofp, " version Show version information\n"); + fprintf(ofp, " view Start trace viewer\n"); fprintf(ofp, "\n"); fprintf(ofp, "Each command also has its own -h, --help option.\n"); fprintf(ofp, "\n"); @@ -348,41 +346,44 @@ end: static int check_sessiond(void) { int ret; - char *pathname = NULL, *alloc_pathname = NULL; + char *pathname = NULL; ret = lttng_session_daemon_alive(); if (ret == 0) { /* not alive */ /* Try command line option path */ - if (opt_sessiond_path != NULL) { - ret = access(opt_sessiond_path, F_OK | X_OK); - if (ret < 0) { - ERR("No such file or access denied: %s", opt_sessiond_path); - goto end; - } - pathname = opt_sessiond_path; - } else { - /* Try LTTNG_SESSIOND_PATH env variable */ + pathname = opt_sessiond_path; + + /* Try LTTNG_SESSIOND_PATH env variable */ + if (pathname == NULL) { pathname = getenv(DEFAULT_SESSIOND_PATH_ENV); } - /* Let's rock and roll */ + /* Try with configured path */ if (pathname == NULL) { - ret = asprintf(&alloc_pathname, INSTALL_BIN_PATH "/lttng-sessiond"); - if (ret < 0) { - perror("asprintf spawn sessiond"); - goto end; + if (CONFIG_SESSIOND_BIN[0] != '\0') { + pathname = CONFIG_SESSIOND_BIN; } - pathname = alloc_pathname; + } + + /* Let's rock and roll while trying the default path */ + if (pathname == NULL) { + pathname = INSTALL_BIN_PATH "/lttng-sessiond"; + } + + DBG("Session daemon at: %s", pathname); + + /* Check existence and permissions */ + ret = access(pathname, F_OK | X_OK); + if (ret < 0) { + ERR("No such file or access denied: %s", pathname); + goto end; } ret = spawn_sessiond(pathname); - free(alloc_pathname); if (ret < 0) { ERR("Problem occurred when starting %s", pathname); - goto end; } } - end: return ret; } @@ -432,10 +433,10 @@ static int parse_args(int argc, char **argv) ret = 0; goto end; case 'v': - opt_verbose += 1; + lttng_opt_verbose += 1; break; case 'q': - opt_quiet = 1; + lttng_opt_quiet = 1; break; case 'g': lttng_set_tracing_group(optarg); @@ -462,8 +463,8 @@ static int parse_args(int argc, char **argv) } /* If both options are specified, quiet wins */ - if (opt_verbose && opt_quiet) { - opt_verbose = 0; + if (lttng_opt_verbose && lttng_opt_quiet) { + lttng_opt_verbose = 0; } /* Spawn session daemon if needed */ @@ -505,7 +506,9 @@ static int parse_args(int argc, char **argv) case 0: break; default: - ERR("%s", lttng_strerror(ret)); + if (ret < 0) { + ret = -ret; + } break; } @@ -521,14 +524,17 @@ error: int main(int argc, char *argv[]) { int ret; + char *user; progname = argv[0] ? argv[0] : "lttng"; /* For Mathieu Desnoyers a.k.a. Dr. Tracing */ - if (strncmp(progname, "drtrace", 7) == 0 || - strncmp("compudj", getenv("USER"), 7) == 0) { + user = getenv("USER"); + if (user != NULL && ((strncmp(progname, "drtrace", 7) == 0 || + strncmp("compudj", user, 7) == 0))) { MSG("%c[%d;%dmWelcome back Dr Tracing!%c[%dm\n", 27,1,33,27,0); } + /* Thanks Mathieu */ ret = set_signal_handler(); if (ret < 0) {