Remove lttng_event_rule_tracepoint
[lttng-tools.git] / src / bin / lttng / commands / list_triggers.c
index 7c8bd7f883f6bd304656958a81ec570c31ebf230..929d9a46b442e01b26679906972253c0d9d50a85 100644 (file)
@@ -18,8 +18,8 @@
 #include "lttng/condition/event-rule-matches-internal.h"
 /* For lttng_domain_type_str(). */
 #include "lttng/domain-internal.h"
-/* For lttng_event_rule_syscall_emission_site_str() */
-#include "lttng/event-rule/syscall-internal.h"
+/* For lttng_event_rule_kernel_syscall_emission_site_str() */
+#include "lttng/event-rule/kernel-syscall-internal.h"
 #include "../loglevel.h"
 #include <lttng/lttng.h>
 
@@ -29,6 +29,14 @@ static const char help_msg[] =
 ;
 #endif
 
+typedef enum lttng_event_rule_status (*event_rule_logging_get_name_pattern)(
+               const struct lttng_event_rule *rule, const char **pattern);
+typedef enum lttng_event_rule_status (*event_rule_logging_get_filter)(
+               const struct lttng_event_rule *rule, const char **expression);
+typedef enum lttng_event_rule_status (*event_rule_logging_get_log_level_rule)(
+               const struct lttng_event_rule *rule,
+               const struct lttng_log_level_rule **log_level_rule);
+
 enum {
        OPT_HELP,
        OPT_LIST_OPTIONS,
@@ -118,26 +126,26 @@ static void print_condition_session_rotation(
 
 /*
  * Returns the human-readable log level name associated with a numerical value
- * if there is one. The Log4j and JUL domains have discontinuous log level
+ * if there is one. The Log4j and JUL event rule have discontinuous log level
  * values (a value can fall between two labels). In those cases, NULL is
  * returned.
  */
 static const char *get_pretty_loglevel_name(
-               enum lttng_domain_type domain, int loglevel)
+               enum lttng_event_rule_type event_rule_type, int loglevel)
 {
        const char *name = NULL;
 
-       switch (domain) {
-       case LTTNG_DOMAIN_UST:
+       switch (event_rule_type) {
+       case LTTNG_EVENT_RULE_TYPE_USER_TRACEPOINT:
                name = loglevel_value_to_name(loglevel);
                break;
-       case LTTNG_DOMAIN_LOG4J:
+       case LTTNG_EVENT_RULE_TYPE_LOG4J_LOGGING:
                name = loglevel_log4j_value_to_name(loglevel);
                break;
-       case LTTNG_DOMAIN_JUL:
+       case LTTNG_EVENT_RULE_TYPE_JUL_LOGGING:
                name = loglevel_jul_value_to_name(loglevel);
                break;
-       case LTTNG_DOMAIN_PYTHON:
+       case LTTNG_EVENT_RULE_TYPE_PYTHON_LOGGING:
                name = loglevel_python_value_to_name(loglevel);
                break;
        default:
@@ -148,10 +156,9 @@ static const char *get_pretty_loglevel_name(
 }
 
 static
-void print_event_rule_tracepoint(const struct lttng_event_rule *event_rule)
+void print_event_rule_user_tracepoint(const struct lttng_event_rule *event_rule)
 {
        enum lttng_event_rule_status event_rule_status;
-       enum lttng_domain_type domain_type;
        const char *pattern;
        const char *filter;
        int log_level;
@@ -159,18 +166,13 @@ void print_event_rule_tracepoint(const struct lttng_event_rule *event_rule)
        unsigned int exclusions_count;
        int i;
 
-       event_rule_status = lttng_event_rule_tracepoint_get_pattern(
+       event_rule_status = lttng_event_rule_user_tracepoint_get_name_pattern(
                        event_rule, &pattern);
        assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
 
-       event_rule_status = lttng_event_rule_tracepoint_get_domain_type(
-                       event_rule, &domain_type);
-       assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
-
-       _MSG("    rule: %s (type: tracepoint, domain: %s", pattern,
-                       lttng_domain_type_str(domain_type));
+       _MSG("    rule: %s (type: user tracepoint", pattern);
 
-       event_rule_status = lttng_event_rule_tracepoint_get_filter(
+       event_rule_status = lttng_event_rule_user_tracepoint_get_filter(
                        event_rule, &filter);
        if (event_rule_status == LTTNG_EVENT_RULE_STATUS_OK) {
                _MSG(", filter: %s", filter);
@@ -178,7 +180,7 @@ void print_event_rule_tracepoint(const struct lttng_event_rule *event_rule)
                assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_UNSET);
        }
 
-       event_rule_status = lttng_event_rule_tracepoint_get_log_level_rule(
+       event_rule_status = lttng_event_rule_user_tracepoint_get_log_level_rule(
                        event_rule, &log_level_rule);
        if (event_rule_status == LTTNG_EVENT_RULE_STATUS_OK) {
                enum lttng_log_level_rule_status llr_status;
@@ -203,7 +205,7 @@ void print_event_rule_tracepoint(const struct lttng_event_rule *event_rule)
                assert(llr_status == LTTNG_LOG_LEVEL_RULE_STATUS_OK);
 
                pretty_loglevel_name = get_pretty_loglevel_name(
-                               domain_type, log_level);
+                               LTTNG_EVENT_RULE_TYPE_USER_TRACEPOINT, log_level);
                if (pretty_loglevel_name) {
                        _MSG(", log level %s %s", log_level_op,
                                        pretty_loglevel_name);
@@ -214,7 +216,7 @@ void print_event_rule_tracepoint(const struct lttng_event_rule *event_rule)
                assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_UNSET);
        }
 
-       event_rule_status = lttng_event_rule_tracepoint_get_exclusions_count(
+       event_rule_status = lttng_event_rule_user_tracepoint_get_name_pattern_exclusion_count(
                        event_rule, &exclusions_count);
        assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
        if (exclusions_count > 0) {
@@ -222,7 +224,7 @@ void print_event_rule_tracepoint(const struct lttng_event_rule *event_rule)
                for (i = 0; i < exclusions_count; i++) {
                        const char *exclusion;
 
-                       event_rule_status = lttng_event_rule_tracepoint_get_exclusion_at_index(
+                       event_rule_status = lttng_event_rule_user_tracepoint_get_name_pattern_exclusion_at_index(
                                        event_rule, i, &exclusion);
                        assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
 
@@ -233,6 +235,128 @@ void print_event_rule_tracepoint(const struct lttng_event_rule *event_rule)
        MSG(")");
 }
 
+static
+void print_event_rule_kernel_tracepoint(const struct lttng_event_rule *event_rule)
+{
+       enum lttng_event_rule_status event_rule_status;
+       const char *pattern;
+       const char *filter;
+
+       event_rule_status = lttng_event_rule_kernel_tracepoint_get_name_pattern(
+                       event_rule, &pattern);
+       assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
+
+       _MSG("    rule: %s (type: kernel tracepoint", pattern);
+
+       event_rule_status = lttng_event_rule_kernel_tracepoint_get_filter(
+                       event_rule, &filter);
+       if (event_rule_status == LTTNG_EVENT_RULE_STATUS_OK) {
+               _MSG(", filter: %s", filter);
+       } else {
+               assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_UNSET);
+       }
+
+       MSG(")");
+}
+
+static
+void print_event_rule_logging(const struct lttng_event_rule *event_rule)
+{
+       enum lttng_event_rule_status event_rule_status;
+       enum lttng_event_rule_type event_rule_type = lttng_event_rule_get_type(event_rule);
+       const char *pattern;
+       const char *filter;
+       int log_level;
+       const struct lttng_log_level_rule *log_level_rule = NULL;
+       const char *type_str = NULL;
+
+       event_rule_logging_get_name_pattern logging_get_name_pattern;
+       event_rule_logging_get_filter logging_get_filter;
+       event_rule_logging_get_log_level_rule logging_get_log_level_rule;
+
+       switch (event_rule_type) {
+       case LTTNG_EVENT_RULE_TYPE_JUL_LOGGING:
+               logging_get_name_pattern =
+                               lttng_event_rule_jul_logging_get_name_pattern;
+               logging_get_filter = lttng_event_rule_jul_logging_get_filter;
+               logging_get_log_level_rule =
+                               lttng_event_rule_jul_logging_get_log_level_rule;
+               type_str = "jul";
+               break;
+       case LTTNG_EVENT_RULE_TYPE_LOG4J_LOGGING:
+               logging_get_name_pattern =
+                               lttng_event_rule_log4j_logging_get_name_pattern;
+               logging_get_filter = lttng_event_rule_log4j_logging_get_filter;
+               logging_get_log_level_rule =
+                               lttng_event_rule_log4j_logging_get_log_level_rule;
+               type_str = "log4j";
+               break;
+       case LTTNG_EVENT_RULE_TYPE_PYTHON_LOGGING:
+               logging_get_name_pattern =
+                               lttng_event_rule_python_logging_get_name_pattern;
+               logging_get_filter = lttng_event_rule_python_logging_get_filter;
+               logging_get_log_level_rule =
+                               lttng_event_rule_python_logging_get_log_level_rule;
+               type_str = "python";
+               break;
+       default:
+               abort();
+               break;
+       }
+
+       event_rule_status = logging_get_name_pattern(
+                       event_rule, &pattern);
+       assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
+
+       _MSG("    rule: %s (type: %s:logging", pattern, type_str);
+
+       event_rule_status = logging_get_filter(
+                       event_rule, &filter);
+       if (event_rule_status == LTTNG_EVENT_RULE_STATUS_OK) {
+               _MSG(", filter: %s", filter);
+       } else {
+               assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_UNSET);
+       }
+
+       event_rule_status = logging_get_log_level_rule(
+                       event_rule, &log_level_rule);
+       if (event_rule_status == LTTNG_EVENT_RULE_STATUS_OK) {
+               enum lttng_log_level_rule_status llr_status;
+               const char *log_level_op;
+               const char *pretty_loglevel_name;
+
+               switch (lttng_log_level_rule_get_type(log_level_rule)) {
+               case LTTNG_LOG_LEVEL_RULE_TYPE_EXACTLY:
+                       log_level_op = "is";
+                       llr_status = lttng_log_level_rule_exactly_get_level(
+                                       log_level_rule, &log_level);
+                       break;
+               case LTTNG_LOG_LEVEL_RULE_TYPE_AT_LEAST_AS_SEVERE_AS:
+                       log_level_op = "at least";
+                       llr_status = lttng_log_level_rule_at_least_as_severe_as_get_level(
+                                       log_level_rule, &log_level);
+                       break;
+               default:
+                       abort();
+               }
+
+               assert(llr_status == LTTNG_LOG_LEVEL_RULE_STATUS_OK);
+
+               pretty_loglevel_name = get_pretty_loglevel_name(
+                               event_rule_type, log_level);
+               if (pretty_loglevel_name) {
+                       _MSG(", log level %s %s", log_level_op,
+                                       pretty_loglevel_name);
+               } else {
+                       _MSG(", log level %s %d", log_level_op, log_level);
+               }
+       } else {
+               assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_UNSET);
+       }
+
+       MSG(")");
+}
+
 static void print_kernel_probe_location(
                const struct lttng_kernel_probe_location *location)
 {
@@ -294,22 +418,22 @@ void print_event_rule_kernel_probe(const struct lttng_event_rule *event_rule)
        const char *name;
        const struct lttng_kernel_probe_location *location;
 
-       assert(lttng_event_rule_get_type(event_rule) == LTTNG_EVENT_RULE_TYPE_KERNEL_PROBE);
+       assert(lttng_event_rule_get_type(event_rule) == LTTNG_EVENT_RULE_TYPE_KERNEL_KPROBE);
 
-       event_rule_status = lttng_event_rule_kernel_probe_get_event_name(event_rule, &name);
+       event_rule_status = lttng_event_rule_kernel_kprobe_get_event_name(event_rule, &name);
        if (event_rule_status != LTTNG_EVENT_RULE_STATUS_OK) {
                ERR("Failed to get kprobe event rule's name.");
                goto end;
        }
 
-       event_rule_status = lttng_event_rule_kernel_probe_get_location(
+       event_rule_status = lttng_event_rule_kernel_kprobe_get_location(
                        event_rule, &location);
        if (event_rule_status != LTTNG_EVENT_RULE_STATUS_OK) {
                ERR("Failed to get kprobe event rule's location.");
                goto end;
        }
 
-       _MSG("    rule: %s (type: probe, location: ", name);
+       _MSG("    rule: %s (type: kernel:kprobe, location: ", name);
 
        print_kernel_probe_location(location);
 
@@ -327,23 +451,23 @@ void print_event_rule_userspace_probe(const struct lttng_event_rule *event_rule)
        const struct lttng_userspace_probe_location *location;
        enum lttng_userspace_probe_location_type userspace_probe_location_type;
 
-       assert(lttng_event_rule_get_type(event_rule) == LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE);
+       assert(lttng_event_rule_get_type(event_rule) == LTTNG_EVENT_RULE_TYPE_KERNEL_UPROBE);
 
-       event_rule_status = lttng_event_rule_userspace_probe_get_event_name(
+       event_rule_status = lttng_event_rule_kernel_uprobe_get_event_name(
                        event_rule, &name);
        if (event_rule_status != LTTNG_EVENT_RULE_STATUS_OK) {
                ERR("Failed to get uprobe event rule's name.");
                goto end;
        }
 
-       event_rule_status = lttng_event_rule_userspace_probe_get_location(
+       event_rule_status = lttng_event_rule_kernel_uprobe_get_location(
                        event_rule, &location);
        if (event_rule_status != LTTNG_EVENT_RULE_STATUS_OK) {
                ERR("Failed to get uprobe event rule's location.");
                goto end;
        }
 
-       _MSG("    rule: %s (type: userspace probe, ", name);
+       _MSG("    rule: %s (type: kernel:uprobe, ", name);
 
        userspace_probe_location_type =
                        lttng_userspace_probe_location_get_type(location);
@@ -389,22 +513,22 @@ void print_event_rule_syscall(const struct lttng_event_rule *event_rule)
 {
        const char *pattern, *filter;
        enum lttng_event_rule_status event_rule_status;
-       enum lttng_event_rule_syscall_emission_site_type emission_site_type;
+       enum lttng_event_rule_kernel_syscall_emission_site emission_site;
 
-       assert(lttng_event_rule_get_type(event_rule) == LTTNG_EVENT_RULE_TYPE_SYSCALL);
+       assert(lttng_event_rule_get_type(event_rule) == LTTNG_EVENT_RULE_TYPE_KERNEL_SYSCALL);
 
-       emission_site_type =
-               lttng_event_rule_syscall_get_emission_site_type(event_rule);
+       emission_site =
+               lttng_event_rule_kernel_syscall_get_emission_site(event_rule);
 
-       event_rule_status = lttng_event_rule_syscall_get_pattern(
+       event_rule_status = lttng_event_rule_kernel_syscall_get_name_pattern(
                        event_rule, &pattern);
        assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
 
-       _MSG("    rule: %s (type: syscall:%s", pattern,
-                       lttng_event_rule_syscall_emission_site_str(
-                                       emission_site_type));
+       _MSG("    rule: %s (type: kernel:syscall:%s", pattern,
+                       lttng_event_rule_kernel_syscall_emission_site_str(
+                                       emission_site));
 
-       event_rule_status = lttng_event_rule_syscall_get_filter(
+       event_rule_status = lttng_event_rule_kernel_syscall_get_filter(
                        event_rule, &filter);
        if (event_rule_status == LTTNG_EVENT_RULE_STATUS_OK) {
                _MSG(", filter: %s", filter);
@@ -422,16 +546,24 @@ void print_event_rule(const struct lttng_event_rule *event_rule)
                        lttng_event_rule_get_type(event_rule);
 
        switch (event_rule_type) {
-       case LTTNG_EVENT_RULE_TYPE_TRACEPOINT:
-               print_event_rule_tracepoint(event_rule);
+       case LTTNG_EVENT_RULE_TYPE_USER_TRACEPOINT:
+               print_event_rule_user_tracepoint(event_rule);
+               break;
+       case LTTNG_EVENT_RULE_TYPE_KERNEL_TRACEPOINT:
+               print_event_rule_kernel_tracepoint(event_rule);
+               break;
+       case LTTNG_EVENT_RULE_TYPE_JUL_LOGGING:
+       case LTTNG_EVENT_RULE_TYPE_LOG4J_LOGGING:
+       case LTTNG_EVENT_RULE_TYPE_PYTHON_LOGGING:
+               print_event_rule_logging(event_rule);
                break;
-       case LTTNG_EVENT_RULE_TYPE_KERNEL_PROBE:
+       case LTTNG_EVENT_RULE_TYPE_KERNEL_KPROBE:
                print_event_rule_kernel_probe(event_rule);
                break;
-       case LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE:
+       case LTTNG_EVENT_RULE_TYPE_KERNEL_UPROBE:
                print_event_rule_userspace_probe(event_rule);
                break;
-       case LTTNG_EVENT_RULE_TYPE_SYSCALL:
+       case LTTNG_EVENT_RULE_TYPE_KERNEL_SYSCALL:
                print_event_rule_syscall(event_rule);
                break;
        default:
@@ -539,9 +671,10 @@ static void print_condition_event_rule_matches(
        }
 }
 
-static
-void print_action_errors(const struct lttng_trigger *trigger,
-               const struct lttng_action *action)
+static void print_action_errors(const struct lttng_trigger *trigger,
+               const struct lttng_action *action,
+               const uint64_t *action_path_indexes,
+               size_t action_path_length)
 {
        unsigned int i, count, printed_errors_count = 0;
        enum lttng_error_code error_query_ret;
@@ -550,9 +683,13 @@ void print_action_errors(const struct lttng_trigger *trigger,
        const char *trigger_name;
        uid_t trigger_uid;
        enum lttng_trigger_status trigger_status;
-       struct lttng_error_query *query =
-                       lttng_error_query_action_create(trigger, action);
+       struct lttng_error_query *query;
+       struct lttng_action_path *action_path = lttng_action_path_create(
+                       action_path_indexes, action_path_length);
+
+       assert(action_path);
 
+       query = lttng_error_query_action_create(trigger, action_path);
        assert(query);
 
        trigger_status = lttng_trigger_get_name(trigger, &trigger_name);
@@ -625,11 +762,14 @@ end:
        MSG("");
        lttng_error_query_destroy(query);
        lttng_error_query_results_destroy(results);
+       lttng_action_path_destroy(action_path);
 }
 
 static
 void print_one_action(const struct lttng_trigger *trigger,
-               const struct lttng_action *action)
+               const struct lttng_action *action,
+               const uint64_t *action_path_indexes,
+               size_t action_path_length)
 {
        enum lttng_action_type action_type;
        enum lttng_action_status action_status;
@@ -773,7 +913,7 @@ void print_one_action(const struct lttng_trigger *trigger,
                                /* The default is 1 so print only when it is a
                                 * special case.
                                 */
-                               _MSG(", rate policy: after every %" PRIu64
+                               _MSG(", rate policy: every %" PRIu64
                                     " occurrences",
                                                policy_value);
                        }
@@ -795,7 +935,8 @@ void print_one_action(const struct lttng_trigger *trigger,
        }
 
        MSG("");
-       print_action_errors(trigger, action);
+       print_action_errors(trigger, action, action_path_indexes,
+                       action_path_length);
 
 end:
        return;
@@ -949,16 +1090,18 @@ void print_one_trigger(const struct lttng_trigger *trigger)
                assert(action_status == LTTNG_ACTION_STATUS_OK);
 
                for (i = 0; i < count; i++) {
+                       const uint64_t action_path_index = i;
                        const struct lttng_action *subaction =
                                        lttng_action_list_get_at_index(
                                                        action, i);
 
                        _MSG("    ");
-                       print_one_action(trigger, subaction);
+                       print_one_action(trigger, subaction, &action_path_index,
+                                       1);
                }
        } else {
                _MSG(" action:");
-               print_one_action(trigger, action);
+               print_one_action(trigger, action, NULL, 0);
        }
 
        print_trigger_errors(trigger);
This page took 0.03194 seconds and 4 git commands to generate.