X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Flist.c;h=f7a5c576bc58b63e0bf4e8037551075a3161c78e;hb=255a5dabcee8a4b0cfd5062955063110d46f36f4;hp=d84fd2ba97d6e78551b3f07d07ea649d5dc6ffb5;hpb=ca1c3607d2f5654163875cda874f43971df0f696;p=lttng-tools.git diff --git a/src/bin/lttng/commands/list.c b/src/bin/lttng/commands/list.c index d84fd2ba9..f7a5c576b 100644 --- a/src/bin/lttng/commands/list.c +++ b/src/bin/lttng/commands/list.c @@ -70,22 +70,22 @@ static struct poptOption long_options[] = { */ static void usage(FILE *ofp) { - fprintf(ofp, "usage: lttng list [SESSION []]\n"); + fprintf(ofp, "usage: lttng list [OPTIONS] [SESSION []]\n"); fprintf(ofp, "\n"); fprintf(ofp, "With no arguments, list available tracing session(s)\n"); fprintf(ofp, "\n"); - fprintf(ofp, "With -k alone, list available kernel events\n"); - fprintf(ofp, "With -u alone, list available userspace events\n"); + fprintf(ofp, "Without a session, -k lists available kernel events\n"); + fprintf(ofp, "Without a session, -u lists available userspace events\n"); fprintf(ofp, "\n"); fprintf(ofp, " -h, --help Show this help\n"); - fprintf(ofp, " --list-options Simple listing of options\n"); + fprintf(ofp, " --list-options Simple listing of options\n"); fprintf(ofp, " -k, --kernel Select kernel domain\n"); fprintf(ofp, " -u, --userspace Select user-space domain.\n"); #if 0 fprintf(ofp, " -p, --pid PID List user-space events by PID\n"); #endif fprintf(ofp, "\n"); - fprintf(ofp, "Options:\n"); + fprintf(ofp, "Session Options:\n"); fprintf(ofp, " -c, --channel NAME List details of a channel\n"); fprintf(ofp, " -d, --domain List available domain(s)\n"); fprintf(ofp, "\n"); @@ -145,9 +145,9 @@ const char *enabled_string(int value) } static -const char *loglevel_string_pre(const char *loglevel) +const char *loglevel_string_pre(int loglevel) { - if (loglevel[0] == '\0') { + if (loglevel == -1) { return ""; } else { return " (loglevel: "; @@ -155,15 +155,55 @@ const char *loglevel_string_pre(const char *loglevel) } static -const char *loglevel_string_post(const char *loglevel) +const char *loglevel_string_post(int loglevel) { - if (loglevel[0] == '\0') { + if (loglevel == -1) { return ""; } else { return ")"; } } +static const char *loglevel_string(int value) +{ + switch (value) { + case -1: + return ""; + case LTTNG_LOGLEVEL_EMERG: + return "TRACE_EMERG"; + case LTTNG_LOGLEVEL_ALERT: + return "TRACE_ALERT"; + case LTTNG_LOGLEVEL_CRIT: + return "TRACE_CRIT"; + case LTTNG_LOGLEVEL_ERR: + return "TRACE_ERR"; + case LTTNG_LOGLEVEL_WARNING: + return "TRACE_WARNING"; + case LTTNG_LOGLEVEL_NOTICE: + return "TRACE_NOTICE"; + case LTTNG_LOGLEVEL_INFO: + return "TRACE_INFO"; + case LTTNG_LOGLEVEL_DEBUG_SYSTEM: + return "TRACE_DEBUG_SYSTEM"; + case LTTNG_LOGLEVEL_DEBUG_PROGRAM: + return "TRACE_DEBUG_PROGRAM"; + case LTTNG_LOGLEVEL_DEBUG_PROCESS: + return "TRACE_DEBUG_PROCESS"; + case LTTNG_LOGLEVEL_DEBUG_MODULE: + return "TRACE_DEBUG_MODULE"; + case LTTNG_LOGLEVEL_DEBUG_UNIT: + return "TRACE_DEBUG_UNIT"; + case LTTNG_LOGLEVEL_DEBUG_FUNCTION: + return "TRACE_DEBUG_FUNCTION"; + case LTTNG_LOGLEVEL_DEBUG_LINE: + return "TRACE_DEBUG_LINE"; + case LTTNG_LOGLEVEL_DEBUG: + return "TRACE_DEBUG"; + default: + return "<>"; + } +} + /* * Pretty print single event. */ @@ -172,22 +212,10 @@ static void print_events(struct lttng_event *event) switch (event->type) { case LTTNG_EVENT_TRACEPOINT: { - char ll_value[LTTNG_SYMBOL_NAME_LEN] = ""; - - if (event->loglevel[0] != '\0') { - int ret; - - ret = snprintf(ll_value, LTTNG_SYMBOL_NAME_LEN, - " (%lld)", (long long) event->loglevel_value); - if (ret < 0) { - ERR("snprintf error"); - } - } - MSG("%s%s%s%s%s%s (type: tracepoint)%s", indent6, + MSG("%s%s%s%s%s (type: tracepoint)%s", indent6, event->name, loglevel_string_pre(event->loglevel), - event->loglevel, - ll_value, + loglevel_string(event->loglevel), loglevel_string_post(event->loglevel), enabled_string(event->enabled)); break; @@ -209,7 +237,7 @@ static void print_events(struct lttng_event *event) MSG("%ssymbol: \"%s\"", indent8, event->attr.ftrace.symbol_name); break; case LTTNG_EVENT_SYSCALL: - MSG("%s (type: syscall)%s", indent6, + MSG("%ssyscalls (type: syscall)%s", indent6, enabled_string(event->enabled)); break; case LTTNG_EVENT_NOOP: @@ -234,6 +262,8 @@ static int list_ust_events(void) struct lttng_event *event_list; pid_t cur_pid = 0; + memset(&domain, 0, sizeof(domain)); + DBG("Getting UST tracing events"); domain.type = LTTNG_DOMAIN_UST; @@ -246,6 +276,7 @@ static int list_ust_events(void) size = lttng_list_tracepoints(handle, &event_list); if (size < 0) { ERR("Unable to list UST events"); + lttng_destroy_handle(handle); return size; } @@ -266,10 +297,12 @@ static int list_ust_events(void) MSG(""); free(event_list); + lttng_destroy_handle(handle); return CMD_SUCCESS; error: + lttng_destroy_handle(handle); return -1; } @@ -283,6 +316,8 @@ static int list_kernel_events(void) struct lttng_handle *handle; struct lttng_event *event_list; + memset(&domain, 0, sizeof(domain)); + DBG("Getting kernel tracing events"); domain.type = LTTNG_DOMAIN_KERNEL; @@ -295,6 +330,7 @@ static int list_kernel_events(void) size = lttng_list_tracepoints(handle, &event_list); if (size < 0) { ERR("Unable to list kernel events"); + lttng_destroy_handle(handle); return size; } @@ -308,9 +344,11 @@ static int list_kernel_events(void) free(event_list); + lttng_destroy_handle(handle); return CMD_SUCCESS; error: + lttng_destroy_handle(handle); return -1; } @@ -389,10 +427,10 @@ static int list_channels(const char *channel_name) count = lttng_list_channels(handle, &channels); if (count < 0) { ret = count; - goto error; + goto error_channels; } else if (count == 0) { - MSG("No channel found"); - goto end; + ERR("Channel %s not found", channel_name); + goto error; } if (channel_name == NULL) { @@ -421,14 +459,16 @@ static int list_channels(const char *channel_name) } if (!chan_found && channel_name != NULL) { - MSG("Channel %s not found", channel_name); + ERR("Channel %s not found", channel_name); + goto error; } -end: - free(channels); ret = CMD_SUCCESS; error: + free(channels); + +error_channels: return ret; } @@ -465,7 +505,8 @@ static int list_sessions(const char *session_name) continue; } - MSG(" %d) %s (%s)%s", i + 1, sessions[i].name, sessions[i].path, active_string(sessions[i].enabled)); + MSG(" %d) %s (%s)%s", i + 1, sessions[i].name, sessions[i].path, + active_string(sessions[i].enabled)); if (session_found) { break; @@ -475,7 +516,9 @@ static int list_sessions(const char *session_name) free(sessions); if (!session_found && session_name != NULL) { - MSG("Session %s not found", session_name); + ERR("Session '%s' not found", session_name); + ret = CMD_ERROR; + goto error; } if (session_name == NULL) { @@ -539,6 +582,8 @@ int cmd_list(int argc, const char **argv) struct lttng_domain domain; struct lttng_domain *domains = NULL; + memset(&domain, 0, sizeof(domain)); + if (argc < 1) { usage(stderr); ret = CMD_ERROR; @@ -577,48 +622,43 @@ int cmd_list(int argc, const char **argv) domain.type = LTTNG_DOMAIN_UST; } - handle = lttng_create_handle(session_name, &domain); - if (handle == NULL) { - ret = CMD_FATAL; - goto end; + if (opt_kernel || opt_userspace) { + handle = lttng_create_handle(session_name, &domain); + if (handle == NULL) { + ret = CMD_FATAL; + goto end; + } } if (session_name == NULL) { if (!opt_kernel && !opt_userspace) { ret = list_sessions(NULL); - if (ret < 0) { - ret = CMD_ERROR; + if (ret != 0) { goto end; } } if (opt_kernel) { ret = list_kernel_events(); if (ret < 0) { - ret = CMD_ERROR; goto end; } } if (opt_userspace) { ret = list_ust_events(); if (ret < 0) { - ret = CMD_ERROR; goto end; } } } else { /* List session attributes */ ret = list_sessions(session_name); - if (ret < 0) { - ret = CMD_ERROR; + if (ret != 0) { goto end; } /* Domain listing */ if (opt_domain) { ret = list_domains(session_name); - if (ret < 0) { - ret = CMD_ERROR; - } goto end; } @@ -626,14 +666,13 @@ int cmd_list(int argc, const char **argv) /* Channel listing */ ret = list_channels(opt_channel); if (ret < 0) { - ret = CMD_ERROR; goto end; } } else { /* We want all domain(s) */ nb_domain = lttng_list_domains(session_name, &domains); if (nb_domain < 0) { - ret = CMD_ERROR; + ret = nb_domain; goto end; } @@ -651,7 +690,9 @@ int cmd_list(int argc, const char **argv) } /* Clean handle before creating a new one */ - lttng_destroy_handle(handle); + if (handle) { + lttng_destroy_handle(handle); + } handle = lttng_create_handle(session_name, &domains[i]); if (handle == NULL) { @@ -661,7 +702,6 @@ int cmd_list(int argc, const char **argv) ret = list_channels(opt_channel); if (ret < 0) { - ret = CMD_ERROR; goto end; } } @@ -672,7 +712,9 @@ end: if (domains) { free(domains); } - lttng_destroy_handle(handle); + if (handle) { + lttng_destroy_handle(handle); + } poptFreeContext(pc); return ret;