X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=lttng%2Fcommands%2Flist.c;h=50dad9a2b4efc3aa57cb747c72820cea36773add;hp=3c779c3a3444bfcc42dabd26a8236435cd191a7b;hb=874d3f847b8053e38a50321b17abce4248ce6e53;hpb=2a71efd5ae4e4bc9fe52154782d4a0a8f867d55a diff --git a/lttng/commands/list.c b/lttng/commands/list.c index 3c779c3a3..50dad9a2b 100644 --- a/lttng/commands/list.c +++ b/lttng/commands/list.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "../cmd.h" @@ -39,6 +40,8 @@ enum { OPT_HELP = 1, }; +static struct lttng_handle *handle; + static struct poptOption long_options[] = { /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, @@ -113,13 +116,10 @@ static int list_kernel_events(void) { int i, size; struct lttng_event *event_list; - struct lttng_domain dom; DBG("Getting all tracing events"); - dom.type = LTTNG_DOMAIN_KERNEL; - - size = lttng_list_tracepoints(&dom, &event_list); + size = lttng_list_tracepoints(handle, &event_list); if (size < 0) { ERR("Unable to list kernel events"); return size; @@ -139,13 +139,12 @@ static int list_kernel_events(void) /* * List events of channel of session and domain. */ -static int list_events(struct lttng_domain *dom, - const char *session_name, const char *channel_name) +static int list_events(const char *channel_name) { int ret, count, i; struct lttng_event *events = NULL; - count = lttng_list_events(dom, session_name, channel_name, &events); + count = lttng_list_events(handle, channel_name, &events); if (count < 0) { ret = count; goto error; @@ -179,6 +178,18 @@ static int list_events(struct lttng_domain *dom, events[i].name, events[i].enabled); MSG("%ssymbol: \"%s\"", indent8, events[i].attr.ftrace.symbol_name); break; + case LTTNG_EVENT_SYSCALL: + MSG("%s (type: syscall) [enabled: %d]", indent6, + events[i].enabled); + break; + case LTTNG_EVENT_NOOP: + MSG("%s (type: noop) [enabled: %d]", indent6, + events[i].enabled); + break; + case LTTNG_EVENT_ALL: + /* We should never have "all" events in list. */ + assert(0); + break; } } @@ -222,8 +233,7 @@ static void print_channel(struct lttng_channel *channel) * * If channel_name is NULL, all channels are listed. */ -static int list_channels(struct lttng_domain *dom, - const char *session_name, const char *channel_name) +static int list_channels(const char *channel_name) { int count, i, ret = CMD_SUCCESS; unsigned int chan_found = 0; @@ -231,7 +241,7 @@ static int list_channels(struct lttng_domain *dom, DBG("Listing channel(s) (%s)", channel_name); - count = lttng_list_channels(dom, session_name, &channels); + count = lttng_list_channels(handle, &channels); if (count < 0) { ret = count; goto error; @@ -255,9 +265,9 @@ static int list_channels(struct lttng_domain *dom, print_channel(&channels[i]); /* Listing events per channel */ - ret = list_events(dom, session_name, channels[i].name); + ret = list_events(channels[i].name); if (ret < 0) { - MSG("%s", lttng_get_readable_code(ret)); + MSG("%s", lttng_strerror(ret)); } if (chan_found) { @@ -307,6 +317,7 @@ static int list_sessions(const char *session_name) MSG("%sTrace path: %s\n", indent4, sessions[i].path); break; } + continue; } MSG(" %d) %s (%s)", i + 1, sessions[i].name, sessions[i].path); @@ -323,7 +334,7 @@ static int list_sessions(const char *session_name) } if (session_name == NULL) { - MSG("\nUse lttng list -s for a detail listing"); + MSG("\nUse lttng list for more details"); } return CMD_SUCCESS; @@ -335,14 +346,14 @@ error: /* * List available domain(s) for a session. */ -static int list_domains(const char *session_name) +static int list_domains(void) { int i, count, ret = CMD_SUCCESS; struct lttng_domain *domains = NULL; MSG("Domains:\n-------------"); - count = lttng_list_domains(session_name, &domains); + count = lttng_list_domains(handle, &domains); if (count < 0) { ret = count; goto error; @@ -406,6 +417,15 @@ int cmd_list(int argc, const char **argv) session_name = poptGetArg(pc); DBG("Session name: %s", session_name); + if (opt_kernel) { + domain.type = LTTNG_DOMAIN_KERNEL; + } + + handle = lttng_create_handle(session_name, &domain); + if (handle == NULL) { + goto end; + } + if (session_name == NULL) { if (opt_kernel) { ret = list_kernel_events(); @@ -427,14 +447,13 @@ int cmd_list(int argc, const char **argv) /* Domain listing */ if (opt_domain) { - ret = list_domains(session_name); + ret = list_domains(); goto end; } if (opt_kernel) { - domain.type = LTTNG_DOMAIN_KERNEL; /* Channel listing */ - ret = list_channels(&domain, session_name, opt_channel); + ret = list_channels(opt_channel); if (ret < 0) { goto end; } @@ -442,7 +461,7 @@ int cmd_list(int argc, const char **argv) /* TODO: Userspace domain */ } else { /* We want all domain(s) */ - ret = lttng_list_domains(session_name, &domains); + ret = lttng_list_domains(handle, &domains); if (ret < 0) { goto end; } @@ -457,7 +476,15 @@ int cmd_list(int argc, const char **argv) break; } - ret = list_channels(&domains[i], session_name, opt_channel); + /* Clean handle before creating a new one */ + lttng_destroy_handle(handle); + + handle = lttng_create_handle(session_name, &domains[i]); + if (handle == NULL) { + goto end; + } + + ret = list_channels(opt_channel); if (ret < 0) { goto end; } @@ -469,5 +496,7 @@ end: if (domains) { free(domains); } + lttng_destroy_handle(handle); + return ret; }