Add agent domains to lttng enable-event usage()
[lttng-tools.git] / src / bin / lttng / commands / enable_events.c
index a06dbb7600b0213fdd708e680bb234e0accc25a4..7b0e19545e8e8b2dbf354efcac02327ecafb55c9 100644 (file)
@@ -112,7 +112,7 @@ static struct poptOption long_options[] = {
  */
 static void usage(FILE *ofp)
 {
-       fprintf(ofp, "usage: lttng enable-event NAME[,NAME2,...] [-k|-u] [OPTIONS] \n");
+       fprintf(ofp, "usage: lttng enable-event NAME[,NAME2,...] (-k | -u | -j | -l | -p) [OPTIONS] \n");
        fprintf(ofp, "\n");
        fprintf(ofp, "Options:\n");
        fprintf(ofp, "  -h, --help               Show this help\n");
@@ -514,7 +514,10 @@ char *print_exclusions(int count, char **names)
 
        /* add length of preamble + one for NUL - one for last (missing) comma */
        length += strlen(preamble);
-       ret = malloc(length);
+       ret = zmalloc(length);
+       if (!ret) {
+               return NULL;
+       }
        strncpy(ret, preamble, length);
        for (i = 0; i < count; i++) {
                strcat(ret, names[i]);
@@ -573,11 +576,25 @@ int check_exclusion_subsets(const char *event_name,
                                goto error;
                        }
                        if (e == '*') {
+                               char *string;
+                               char **new_exclusion_list;
+
                                /* Excluder is a proper subset of event */
+                               string = strndup(next_excluder, excluder_length);
+                               if (!string) {
+                                       PERROR("strndup error");
+                                       goto error;
+                               }
+                               new_exclusion_list = realloc(exclusion_list,
+                                       sizeof(char *) * (exclusion_count + 1));
+                               if (!new_exclusion_list) {
+                                       PERROR("realloc");
+                                       free(string);
+                                       goto error;
+                               }
+                               exclusion_list = new_exclusion_list;
                                exclusion_count++;
-                               exclusion_list = realloc(exclusion_list, sizeof(char **) * exclusion_count);
-                               exclusion_list[exclusion_count - 1] = strndup(next_excluder, excluder_length);
-
+                               exclusion_list[exclusion_count - 1] = string;
                                break;
                        }
                        if (x != e) {
@@ -743,6 +760,16 @@ static int enable_events(char *session_name)
                                                        print_channel_name(channel_name), session_name);
                                        warn = 1;
                                        break;
+                               case LTTNG_ERR_TRACE_ALREADY_STARTED:
+                               {
+                                       const char *msg = "The command tried to enable an event in a new domain for a session that has already been started once.";
+                                       ERR("Events: %s (channel %s, session %s)",
+                                                       msg,
+                                                       print_channel_name(channel_name),
+                                                       session_name);
+                                       error = 1;
+                                       break;
+                               }
                                default:
                                        ERR("Events: %s (channel %s, session %s)",
                                                        lttng_strerror(ret),
@@ -760,6 +787,12 @@ static int enable_events(char *session_name)
                        case LTTNG_EVENT_TRACEPOINT:
                                if (opt_loglevel && dom.type != LTTNG_DOMAIN_KERNEL) {
                                        char *exclusion_string = print_exclusions(exclusion_count, exclusion_list);
+
+                                       if (!exclusion_string) {
+                                               PERROR("Cannot allocate exclusion_string");
+                                               error = 1;
+                                               goto end;
+                                       }
                                        MSG("All %s tracepoints%s are enabled in channel %s for loglevel %s",
                                                        get_domain_str(dom.type),
                                                        exclusion_string,
@@ -768,6 +801,12 @@ static int enable_events(char *session_name)
                                        free(exclusion_string);
                                } else {
                                        char *exclusion_string = print_exclusions(exclusion_count, exclusion_list);
+
+                                       if (!exclusion_string) {
+                                               PERROR("Cannot allocate exclusion_string");
+                                               error = 1;
+                                               goto end;
+                                       }
                                        MSG("All %s tracepoints%s are enabled in channel %s",
                                                        get_domain_str(dom.type),
                                                        exclusion_string,
@@ -777,13 +816,20 @@ static int enable_events(char *session_name)
                                break;
                        case LTTNG_EVENT_SYSCALL:
                                if (opt_kernel) {
-                                       MSG("All kernel system calls are enabled in channel %s",
+                                       MSG("All %s system calls are enabled in channel %s",
+                                                       get_domain_str(dom.type),
                                                        print_channel_name(channel_name));
                                }
                                break;
                        case LTTNG_EVENT_ALL:
                                if (opt_loglevel && dom.type != LTTNG_DOMAIN_KERNEL) {
                                        char *exclusion_string = print_exclusions(exclusion_count, exclusion_list);
+
+                                       if (!exclusion_string) {
+                                               PERROR("Cannot allocate exclusion_string");
+                                               error = 1;
+                                               goto end;
+                                       }
                                        MSG("All %s events%s are enabled in channel %s for loglevel %s",
                                                        get_domain_str(dom.type),
                                                        exclusion_string,
@@ -792,6 +838,12 @@ static int enable_events(char *session_name)
                                        free(exclusion_string);
                                } else {
                                        char *exclusion_string = print_exclusions(exclusion_count, exclusion_list);
+
+                                       if (!exclusion_string) {
+                                               PERROR("Cannot allocate exclusion_string");
+                                               error = 1;
+                                               goto end;
+                                       }
                                        MSG("All %s events%s are enabled in channel %s",
                                                        get_domain_str(dom.type),
                                                        exclusion_string,
@@ -819,6 +871,16 @@ static int enable_events(char *session_name)
                                                print_channel_name(channel_name), session_name);
                                        warn = 1;
                                        break;
+                               case LTTNG_ERR_TRACE_ALREADY_STARTED:
+                               {
+                                       const char *msg = "The command tried to enable an event in a new domain for a session that has already been started once.";
+                                       ERR("All events: %s (channel %s, session %s, filter \'%s\')",
+                                                       msg,
+                                                       print_channel_name(channel_name),
+                                                       session_name, opt_filter);
+                                       error = 1;
+                                       break;
+                               }
                                default:
                                        ERR("All events: %s (channel %s, session %s, filter \'%s\')",
                                                        lttng_strerror(command_ret),
@@ -853,7 +915,7 @@ static int enable_events(char *session_name)
                                ev.enabled = 0;
                                success = 0;
                        }
-                       ret = mi_lttng_event(writer, &ev, 1);
+                       ret = mi_lttng_event(writer, &ev, 1, handle->domain.type);
                        if (ret) {
                                ret = CMD_ERROR;
                                goto error;
@@ -1044,6 +1106,11 @@ static int enable_events(char *session_name)
                                        &ev, channel_name,
                                        NULL, exclusion_count, exclusion_list);
                        exclusion_string = print_exclusions(exclusion_count, exclusion_list);
+                       if (!exclusion_string) {
+                               PERROR("Cannot allocate exclusion_string");
+                               error = 1;
+                               goto end;
+                       }
                        if (command_ret < 0) {
                                /* Turn ret to positive value to handle the positive error code */
                                switch (-command_ret) {
@@ -1054,6 +1121,17 @@ static int enable_events(char *session_name)
                                                        print_channel_name(channel_name), session_name);
                                        warn = 1;
                                        break;
+                               case LTTNG_ERR_TRACE_ALREADY_STARTED:
+                               {
+                                       const char *msg = "The command tried to enable an event in a new domain for a session that has already been started once.";
+                                       ERR("Event %s%s: %s (channel %s, session %s)", event_name,
+                                                       exclusion_string,
+                                                       msg,
+                                                       print_channel_name(channel_name),
+                                                       session_name);
+                                       error = 1;
+                                       break;
+                               }
                                default:
                                        ERR("Event %s%s: %s (channel %s, session %s)", event_name,
                                                        exclusion_string,
@@ -1092,7 +1170,11 @@ static int enable_events(char *session_name)
                        command_ret = lttng_enable_event_with_exclusions(handle, &ev, channel_name,
                                        opt_filter, exclusion_count, exclusion_list);
                        exclusion_string = print_exclusions(exclusion_count, exclusion_list);
-
+                       if (!exclusion_string) {
+                               PERROR("Cannot allocate exclusion_string");
+                               error = 1;
+                               goto end;
+                       }
                        if (command_ret < 0) {
                                switch (-command_ret) {
                                case LTTNG_ERR_FILTER_EXIST:
@@ -1103,6 +1185,17 @@ static int enable_events(char *session_name)
                                                print_channel_name(channel_name), session_name);
                                        warn = 1;
                                        break;
+                               case LTTNG_ERR_TRACE_ALREADY_STARTED:
+                               {
+                                       const char *msg = "The command tried to enable an event in a new domain for a session that has already been started once.";
+                                       ERR("Event %s%s: %s (channel %s, session %s, filter \'%s\')", ev.name,
+                                                       exclusion_string,
+                                                       msg,
+                                                       print_channel_name(channel_name),
+                                                       session_name, opt_filter);
+                                       error = 1;
+                                       break;
+                               }
                                default:
                                        ERR("Event %s%s: %s (channel %s, session %s, filter \'%s\')", ev.name,
                                                        exclusion_string,
@@ -1132,7 +1225,7 @@ static int enable_events(char *session_name)
                                ev.enabled = 1;
                        }
 
-                       ret = mi_lttng_event(writer, &ev, 1);
+                       ret = mi_lttng_event(writer, &ev, 1, handle->domain.type);
                        if (ret) {
                                ret = CMD_ERROR;
                                goto error;
This page took 0.028137 seconds and 4 git commands to generate.