X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=lttng%2Fcommands%2Flist.c;h=8c1dadac8e5dc66bddebe81d7a564c9fc7c20555;hp=808c2a549edbe9519a3b90387fbff845547020bb;hb=e4baff1ed855ca743e95068ca6449fd906d2d833;hpb=dbdbd482ead909120dc3c4e4b6e41413b7fa57a1 diff --git a/lttng/commands/list.c b/lttng/commands/list.c index 808c2a549..8c1dadac8 100644 --- a/lttng/commands/list.c +++ b/lttng/commands/list.c @@ -28,6 +28,7 @@ static int opt_pid; static int opt_userspace; +static char *opt_cmd_name; static int opt_kernel; static char *opt_channel; static int opt_domain; @@ -38,6 +39,7 @@ const char *indent8 = " "; enum { OPT_HELP = 1, + OPT_USERSPACE, }; static struct lttng_handle *handle; @@ -46,7 +48,7 @@ static struct poptOption long_options[] = { /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, {"kernel", 'k', POPT_ARG_VAL, &opt_kernel, 1, 0, 0}, - {"userspace", 'u', POPT_ARG_VAL, &opt_userspace, 1, 0, 0}, + {"userspace", 'u', POPT_ARG_STRING | POPT_ARGFLAG_OPTIONAL, &opt_cmd_name, OPT_USERSPACE, 0, 0}, {"pid", 'p', POPT_ARG_INT, &opt_pid, 0, 0, 0}, {"channel", 'c', POPT_ARG_STRING, &opt_channel, 0, 0, 0}, {"domain", 'd', POPT_ARG_VAL, &opt_domain, 1, 0, 0}, @@ -107,6 +109,48 @@ end: return cmdline; } +static +const char *active_string(int value) +{ + switch (value) { + case 0: return " [inactive]"; + case 1: return " [active]"; + case -1: return ""; + default: return NULL; + } +} + +static +const char *enabled_string(int value) +{ + switch (value) { + case 0: return " [disabled]"; + case 1: return " [enabled]"; + case -1: return ""; + default: return NULL; + } +} + +static +const char *loglevel_string_pre(const char *loglevel) +{ + if (loglevel[0] == '\0') { + return ""; + } else { + return " (loglevel: "; + } +} + +static +const char *loglevel_string_post(const char *loglevel) +{ + if (loglevel[0] == '\0') { + return ""; + } else { + return ")"; + } +} + /* * Pretty print single event. */ @@ -114,12 +158,29 @@ static void print_events(struct lttng_event *event) { switch (event->type) { case LTTNG_EVENT_TRACEPOINT: - MSG("%s%s (type: tracepoint) [enabled: %d]", indent6, - event->name, event->enabled); + { + 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, + event->name, + loglevel_string_pre(event->loglevel), + event->loglevel, + ll_value, + loglevel_string_post(event->loglevel), + enabled_string(event->enabled)); break; + } case LTTNG_EVENT_PROBE: - MSG("%s%s (type: probe) [enabled: %d]", indent6, - event->name, event->enabled); + MSG("%s%s (type: probe)%s", indent6, + event->name, enabled_string(event->enabled)); if (event->attr.probe.addr != 0) { MSG("%saddr: 0x%" PRIx64, indent8, event->attr.probe.addr); } else { @@ -129,17 +190,22 @@ static void print_events(struct lttng_event *event) break; case LTTNG_EVENT_FUNCTION: case LTTNG_EVENT_FUNCTION_ENTRY: - MSG("%s%s (type: function) [enabled: %d]", indent6, - event->name, event->enabled); + MSG("%s%s (type: function)%s", indent6, + event->name, enabled_string(event->enabled)); MSG("%ssymbol: \"%s\"", indent8, event->attr.ftrace.symbol_name); break; case LTTNG_EVENT_SYSCALL: - MSG("%s (type: syscall) [enabled: %d]", indent6, - event->enabled); + MSG("%s (type: syscall)%s", indent6, + enabled_string(event->enabled)); break; case LTTNG_EVENT_NOOP: - MSG("%s (type: noop) [enabled: %d]", indent6, - event->enabled); + MSG("%s (type: noop)%s", indent6, + enabled_string(event->enabled)); + break; + case LTTNG_EVENT_TRACEPOINT_LOGLEVEL: + MSG("%s%s (type: tracepoint loglevel)%s", indent6, + event->name, + enabled_string(event->enabled)); break; case LTTNG_EVENT_ALL: /* We should never have "all" events in list. */ @@ -255,7 +321,7 @@ static int list_events(const char *channel_name) MSG("\n%sEvents:", indent4); if (count == 0) { - MSG("%sNone", indent6); + MSG("%sNone\n", indent6); goto end; } @@ -280,7 +346,7 @@ error: */ static void print_channel(struct lttng_channel *channel) { - MSG("- %s (enabled: %d):\n", channel->name, channel->enabled); + MSG("- %s:%s\n", channel->name, enabled_string(channel->enabled)); MSG("%sAttributes:", indent4); MSG("%soverwrite mode: %d", indent6, channel->attr.overwrite); @@ -309,7 +375,7 @@ static int list_channels(const char *channel_name) unsigned int chan_found = 0; struct lttng_channel *channels = NULL; - DBG("Listing channel(s) (%s)", channel_name); + DBG("Listing channel(s) (%s)", channel_name ? : ""); count = lttng_list_channels(handle, &channels); if (count < 0) { @@ -383,14 +449,14 @@ static int list_sessions(const char *session_name) if (session_name != NULL) { if (strncmp(sessions[i].name, session_name, NAME_MAX) == 0) { session_found = 1; - MSG("Tracing session %s:", session_name); + MSG("Tracing session %s:%s", session_name, active_string(sessions[i].enabled)); MSG("%sTrace path: %s\n", indent4, sessions[i].path); break; } continue; } - MSG(" %d) %s (%s)", i + 1, sessions[i].name, sessions[i].path); + MSG(" %d) %s (%s)%s", i + 1, sessions[i].name, sessions[i].path, active_string(sessions[i].enabled)); if (session_found) { break; @@ -458,7 +524,7 @@ error: int cmd_list(int argc, const char **argv) { int opt, i, ret = CMD_SUCCESS; - unsigned int nb_domain; + int nb_domain; const char *session_name; static poptContext pc; struct lttng_domain domain; @@ -477,6 +543,9 @@ int cmd_list(int argc, const char **argv) case OPT_HELP: usage(stderr); goto end; + case OPT_USERSPACE: + opt_userspace = 1; + break; default: usage(stderr); ret = CMD_UNDEFINED;