X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=lttng%2Flttng.c;h=169e70eb0ddeedf5d29ffbe57ffb4f8581b3990f;hb=8028d92056a3f0f8999cb895d0fd21eeca0ce849;hp=907984370edf7831e4fdb5b0f8a135345d58b357;hpb=5b8719f52eb9c8012e3bd48be778548cfbf5a8b8;p=lttng-tools.git diff --git a/lttng/lttng.c b/lttng/lttng.c index 907984370..169e70eb0 100644 --- a/lttng/lttng.c +++ b/lttng/lttng.c @@ -41,6 +41,8 @@ static char *progname; /* Prototypes */ static int process_client_opt(void); static int process_opt_list_apps(void); +static int process_opt_list_sessions(void); +static int process_opt_create_session(void); static void sighandler(int sig); static int set_signal_handler(void); @@ -54,6 +56,7 @@ static int set_signal_handler(void); static int process_client_opt(void) { int ret; + uuid_t uuid; /* Connect to the session daemon */ ret = lttng_connect_sessiond(); @@ -68,6 +71,28 @@ static int process_client_opt(void) } } + if (opt_list_session) { + ret = process_opt_list_sessions(); + if (ret < 0) { + goto end; + } + } + + if (opt_create_session != NULL) { + ret = process_opt_create_session(); + if (ret < 0) { + goto end; + } + } + + if (opt_destroy_session != NULL) { + uuid_parse(opt_destroy_session, uuid); + ret = lttng_destroy_session(&uuid); + if (ret < 0) { + goto end; + } + } + return 0; end: @@ -75,6 +100,63 @@ end: return ret; } +/* + * process_opt_create_session + * + * Create a new session using the name pass + * to the command line. + */ +static int process_opt_create_session(void) +{ + int ret; + uuid_t session_id; + char str_uuid[37]; + + ret = lttng_create_session(opt_create_session, &session_id); + if (ret < 0) { + goto error; + } + + uuid_unparse(session_id, str_uuid); + + MSG("Session created:"); + MSG(" %s (%s)", opt_create_session, str_uuid); + +error: + return ret; +} + +/* + * process_opt_list_sessions + * + * Get the list of available sessions from + * the session daemon and print it to user. + */ +static int process_opt_list_sessions(void) +{ + int ret, count, i; + struct lttng_session *sess; + + count = lttng_list_sessions(&sess); + if (count < 0) { + ret = count; + goto error; + } + + MSG("Available sessions [Name (uuid)]:"); + for (i = 0; i < count; i++) { + MSG("\tName: %s (uuid: %s)", sess[i].name, sess[i].uuid); + } + + free(sess); + MSG("\nTo select a session, use --session UUID."); + + return 0; + +error: + return ret; +} + /* * process_opt_list_apps * @@ -83,22 +165,24 @@ end: */ static int process_opt_list_apps(void) { - int i, ret; + int i, ret, count; pid_t *pids; FILE *fp; char path[24]; /* Can't go bigger than /proc/65535/cmdline */ char cmdline[PATH_MAX]; - ret = lttng_ust_list_apps(&pids); - if (ret < 0) { + count = lttng_ust_list_apps(&pids); + if (count < 0) { + ret = count; goto error; } MSG("LTTng UST traceable application [name (pid)]:"); - for (i=0; i < ret; i++) { + for (i=0; i < count; i++) { snprintf(path, sizeof(path), "/proc/%d/cmdline", pids[i]); fp = fopen(path, "r"); if (fp == NULL) { + MSG("\t(not running) (%d)", pids[i]); continue; } ret = fread(cmdline, 1, sizeof(cmdline), fp); @@ -131,7 +215,7 @@ static int spawn_sessiond(char *pathname) /* Spawn session daemon and tell * it to signal us when ready. */ - ret = execlp(pathname, "ltt-sessiond", "--sig-parent", NULL); + ret = execlp(pathname, "ltt-sessiond", "--sig-parent", "--quiet", NULL); if (ret < 0) { if (errno == ENOENT) { ERR("No session daemon found. Use --sessiond-path."); @@ -180,7 +264,13 @@ static int check_ltt_sessiond(void) pathname = opt_sessiond_path; } else { /* Try LTTNG_SESSIOND_PATH env variable */ - pathname = strdup(getenv(LTTNG_SESSIOND_PATH_ENV)); + pathname = getenv(LTTNG_SESSIOND_PATH_ENV); + if (pathname != NULL) { + /* strdup here in order to make the free() + * not fail later on. + */ + pathname = strdup(pathname); + } } /* Let's rock and roll */