/* * List agent events for a specific session using the handle. * * Return CMD_SUCCESS on success else a negative value. */ static int list_session_agent_events(void) { int ret = CMD_SUCCESS, count, i; struct lttng_event *events = NULL; count = lttng_list_events(handle, "", &events); if (count < 0) { ret = CMD_ERROR; ERR("%s", lttng_strerror(count)); goto error; } if (lttng_opt_mi) { /* Mi print */ ret = mi_list_session_agent_events(events, count); if (ret) { ret = CMD_ERROR; goto end; } } else { /* Pretty print */ MSG("Events (Logger name):\n---------------------"); if (count == 0) { MSG("%sNone\n", indent6); goto end; } for (i = 0; i < count; i++) { MSG("%s- %s%s (loglevel%s %s)", indent4, events[i].name, enabled_string(events[i].enabled), logleveltype_string(events[i].loglevel_type), mi_lttng_loglevel_string(events[i].loglevel, handle->domain.type)); } MSG(""); } end: free(events); error: return ret; }
/* * Pretty print single event. */ static void print_events(struct lttng_event *event) { int ret; const char *filter_str; char *filter_msg = NULL; char *exclusion_msg = NULL; ret = lttng_event_get_filter_expression(event, &filter_str); if (ret) { filter_msg = strdup(" [failed to retrieve filter]"); } else if (filter_str) { const char * const filter_fmt = " [filter: '%s']"; filter_msg = malloc(strlen(filter_str) + strlen(filter_fmt) + 1); if (filter_msg) { sprintf(filter_msg, filter_fmt, filter_str); } } exclusion_msg = get_exclusion_names_msg(event); if (!exclusion_msg) { exclusion_msg = strdup(" [failed to retrieve exclusions]"); } switch (event->type) { case LTTNG_EVENT_TRACEPOINT: { if (event->loglevel != -1) { MSG("%s%s (loglevel%s %s (%d)) (type: tracepoint)%s%s%s", indent6, event->name, logleveltype_string(event->loglevel_type), mi_lttng_loglevel_string(event->loglevel, handle->domain.type), event->loglevel, enabled_string(event->enabled), safe_string(exclusion_msg), safe_string(filter_msg)); } else { MSG("%s%s (type: tracepoint)%s%s%s", indent6, event->name, enabled_string(event->enabled), safe_string(exclusion_msg), safe_string(filter_msg)); } break; } case LTTNG_EVENT_FUNCTION: MSG("%s%s (type: function)%s%s", indent6, event->name, enabled_string(event->enabled), safe_string(filter_msg)); if (event->attr.probe.addr != 0) { MSG("%saddr: 0x%" PRIx64, indent8, event->attr.probe.addr); } else { MSG("%soffset: 0x%" PRIx64, indent8, event->attr.probe.offset); MSG("%ssymbol: %s", indent8, event->attr.probe.symbol_name); } break; case LTTNG_EVENT_PROBE: MSG("%s%s (type: probe)%s%s", indent6, event->name, enabled_string(event->enabled), safe_string(filter_msg)); if (event->attr.probe.addr != 0) { MSG("%saddr: 0x%" PRIx64, indent8, event->attr.probe.addr); } else { MSG("%soffset: 0x%" PRIx64, indent8, event->attr.probe.offset); MSG("%ssymbol: %s", indent8, event->attr.probe.symbol_name); } break; case LTTNG_EVENT_FUNCTION_ENTRY: MSG("%s%s (type: function)%s%s", indent6, event->name, enabled_string(event->enabled), safe_string(filter_msg)); MSG("%ssymbol: \"%s\"", indent8, event->attr.ftrace.symbol_name); break; case LTTNG_EVENT_SYSCALL: MSG("%s%s%s%s%s%s", indent6, event->name, (opt_syscall ? "" : " (type:syscall)"), enabled_string(event->enabled), bitness_event(event->flags), safe_string(filter_msg)); break; case LTTNG_EVENT_NOOP: MSG("%s (type: noop)%s%s", indent6, enabled_string(event->enabled), safe_string(filter_msg)); break; case LTTNG_EVENT_ALL: /* We should never have "all" events in list. */ assert(0); break; } free(filter_msg); free(exclusion_msg); }
/* * Pretty print single event. */ static void print_events(struct lttng_event *event) { switch (event->type) { case LTTNG_EVENT_TRACEPOINT: { if (event->loglevel != -1) { MSG("%s%s (loglevel%s %s (%d)) (type: tracepoint)%s%s%s", indent6, event->name, logleveltype_string(event->loglevel_type), mi_lttng_loglevel_string(event->loglevel, handle->domain.type), event->loglevel, enabled_string(event->enabled), exclusion_string(event->exclusion), filter_string(event->filter)); } else { MSG("%s%s (type: tracepoint)%s%s%s", indent6, event->name, enabled_string(event->enabled), exclusion_string(event->exclusion), filter_string(event->filter)); } break; } case LTTNG_EVENT_FUNCTION: MSG("%s%s (type: function)%s%s", indent6, event->name, enabled_string(event->enabled), filter_string(event->filter)); if (event->attr.probe.addr != 0) { MSG("%saddr: 0x%" PRIx64, indent8, event->attr.probe.addr); } else { MSG("%soffset: 0x%" PRIx64, indent8, event->attr.probe.offset); MSG("%ssymbol: %s", indent8, event->attr.probe.symbol_name); } break; case LTTNG_EVENT_PROBE: MSG("%s%s (type: probe)%s%s", indent6, event->name, enabled_string(event->enabled), filter_string(event->filter)); if (event->attr.probe.addr != 0) { MSG("%saddr: 0x%" PRIx64, indent8, event->attr.probe.addr); } else { MSG("%soffset: 0x%" PRIx64, indent8, event->attr.probe.offset); MSG("%ssymbol: %s", indent8, event->attr.probe.symbol_name); } break; case LTTNG_EVENT_FUNCTION_ENTRY: MSG("%s%s (type: function)%s%s", indent6, event->name, enabled_string(event->enabled), filter_string(event->filter)); MSG("%ssymbol: \"%s\"", indent8, event->attr.ftrace.symbol_name); break; case LTTNG_EVENT_SYSCALL: MSG("%s%s%s%s%s", indent6, event->name, (opt_syscall ? "" : " (type:syscall)"), enabled_string(event->enabled), bitness_event(event->flags)); break; case LTTNG_EVENT_NOOP: MSG("%s (type: noop)%s%s", indent6, enabled_string(event->enabled), filter_string(event->filter)); break; case LTTNG_EVENT_ALL: /* We should never have "all" events in list. */ assert(0); break; } }
/* * List agent events for a specific session using the handle. * * Return CMD_SUCCESS on success else a negative value. */ static int list_session_agent_events(void) { int ret = CMD_SUCCESS, count, i; struct lttng_event *events = NULL; count = lttng_list_events(handle, "", &events); if (count < 0) { ret = CMD_ERROR; ERR("%s", lttng_strerror(count)); goto error; } if (lttng_opt_mi) { /* Mi print */ ret = mi_list_session_agent_events(events, count); if (ret) { ret = CMD_ERROR; goto end; } } else { /* Pretty print */ MSG("Events (Logger name):\n---------------------"); if (count == 0) { MSG("%sNone\n", indent6); goto end; } for (i = 0; i < count; i++) { const char *filter_str; char *filter_msg = NULL; struct lttng_event *event = &events[i]; ret = lttng_event_get_filter_expression(event, &filter_str); if (ret) { filter_msg = strdup(" [failed to retrieve filter]"); } else if (filter_str) { const char * const filter_fmt = " [filter: '%s']"; filter_msg = malloc(strlen(filter_str) + strlen(filter_fmt) + 1); if (filter_msg) { sprintf(filter_msg, filter_fmt, filter_str); } } if (event->loglevel_type != LTTNG_EVENT_LOGLEVEL_ALL) { MSG("%s- %s%s (loglevel%s %s)%s", indent4, event->name, enabled_string(event->enabled), logleveltype_string( event->loglevel_type), mi_lttng_loglevel_string( event->loglevel, handle->domain.type), safe_string(filter_msg)); } else { MSG("%s- %s%s%s", indent4, event->name, enabled_string(event->enabled), safe_string(filter_msg)); } free(filter_msg); } MSG(""); } end: free(events); error: return ret; }