Test log level for newly introduced event rule type (*_logging, user_tracepoint)
[lttng-tools.git] / src / common / event-rule / tracepoint.c
index fbe1fc4bc8e1e7e62fc5534f40d18a47b5e1f61a..58757bb24a4851cb9dd007b5fdcbce9a88ab9fea 100644 (file)
@@ -15,6 +15,7 @@
 #include <common/runas.h>
 #include <common/hashtable/hashtable.h>
 #include <common/hashtable/utils.h>
+#include <common/string-utils/string-utils.h>
 #include <lttng/event-rule/event-rule-internal.h>
 #include <lttng/event-rule/tracepoint-internal.h>
 #include <lttng/log-level-rule.h>
@@ -97,7 +98,7 @@ static int lttng_event_rule_tracepoint_serialize(
        tracepoint = container_of(
                        rule, struct lttng_event_rule_tracepoint, parent);
 
-       status = lttng_event_rule_tracepoint_get_exclusions_count(rule, &exclusion_count);
+       status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(rule, &exclusion_count);
        assert(status == LTTNG_EVENT_RULE_STATUS_OK);
 
        pattern_len = strlen(tracepoint->pattern) + 1;
@@ -113,7 +114,7 @@ static int lttng_event_rule_tracepoint_serialize(
        for (i = 0; i < exclusion_count; i++) {
                const char *exclusion;
 
-               status = lttng_event_rule_tracepoint_get_exclusion_at_index(
+               status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(
                                rule, i, &exclusion);
                assert(status == LTTNG_EVENT_RULE_STATUS_OK);
 
@@ -162,7 +163,7 @@ static int lttng_event_rule_tracepoint_serialize(
                size_t len;
                const char *exclusion;
 
-               status = lttng_event_rule_tracepoint_get_exclusion_at_index(
+               status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(
                                rule, i, &exclusion);
                assert(status == LTTNG_EVENT_RULE_STATUS_OK);
 
@@ -205,9 +206,9 @@ static bool lttng_event_rule_tracepoint_is_equal(
        a = container_of(_a, struct lttng_event_rule_tracepoint, parent);
        b = container_of(_b, struct lttng_event_rule_tracepoint, parent);
 
-       status = lttng_event_rule_tracepoint_get_exclusions_count(_a, &count_a);
+       status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(_a, &count_a);
        assert(status == LTTNG_EVENT_RULE_STATUS_OK);
-       status = lttng_event_rule_tracepoint_get_exclusions_count(_b, &count_b);
+       status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(_b, &count_b);
        assert(status == LTTNG_EVENT_RULE_STATUS_OK);
 
        /* Quick checks. */
@@ -247,10 +248,10 @@ static bool lttng_event_rule_tracepoint_is_equal(
        for (i = 0; i < count_a; i++) {
                const char *exclusion_a, *exclusion_b;
 
-               status = lttng_event_rule_tracepoint_get_exclusion_at_index(
+               status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(
                                _a, i, &exclusion_a);
                assert(status == LTTNG_EVENT_RULE_STATUS_OK);
-               status = lttng_event_rule_tracepoint_get_exclusion_at_index(
+               status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(
                                _b, i, &exclusion_b);
                assert(status == LTTNG_EVENT_RULE_STATUS_OK);
                if (strcmp(exclusion_a, exclusion_b)) {
@@ -284,7 +285,7 @@ static int generate_agent_filter(
        assert(rule);
        assert(_agent_filter);
 
-       status = lttng_event_rule_tracepoint_get_pattern(rule, &pattern);
+       status = lttng_event_rule_tracepoint_get_name_pattern(rule, &pattern);
        if (status != LTTNG_EVENT_RULE_STATUS_OK) {
                ret = -1;
                goto end;
@@ -525,7 +526,7 @@ lttng_event_rule_tracepoint_generate_exclusions(
                abort();
        }
 
-       event_rule_status = lttng_event_rule_tracepoint_get_exclusions_count(
+       event_rule_status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(
                        rule, &nb_exclusions);
        assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
        if (nb_exclusions == 0) {
@@ -549,7 +550,7 @@ lttng_event_rule_tracepoint_generate_exclusions(
                const char *exclusion_str;
 
                event_rule_status =
-                               lttng_event_rule_tracepoint_get_exclusion_at_index(
+                               lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(
                                                rule, i, &exclusion_str);
                assert(event_rule_status == LTTNG_EVENT_RULE_STATUS_OK);
 
@@ -597,14 +598,14 @@ static unsigned long lttng_event_rule_tracepoint_hash(
                hash ^= lttng_log_level_rule_hash(tp_rule->log_level_rule);
        }
 
-       status = lttng_event_rule_tracepoint_get_exclusions_count(rule,
+       status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(rule,
                        &exclusion_count);
        assert(status == LTTNG_EVENT_RULE_STATUS_OK);
 
        for (i = 0; i < exclusion_count; i++) {
                const char *exclusion;
 
-               status = lttng_event_rule_tracepoint_get_exclusion_at_index(
+               status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(
                                rule, i, &exclusion);
                assert(status == LTTNG_EVENT_RULE_STATUS_OK);
                hash ^= hash_key_str(exclusion, lttng_ht_seed);
@@ -726,7 +727,7 @@ struct lttng_event_rule *lttng_event_rule_tracepoint_create(
                        destroy_lttng_exclusions_element);
 
        /* Default pattern is '*'. */
-       status = lttng_event_rule_tracepoint_set_pattern(rule, "*");
+       status = lttng_event_rule_tracepoint_set_name_pattern(rule, "*");
        if (status != LTTNG_EVENT_RULE_STATUS_OK) {
                lttng_event_rule_destroy(rule);
                rule = NULL;
@@ -882,7 +883,7 @@ skip_log_level_rule:
                        goto end;
                }
 
-               status = lttng_event_rule_tracepoint_add_exclusion(rule, exclusion);
+               status = lttng_event_rule_tracepoint_add_name_pattern_exclusion(rule, exclusion);
                if (status != LTTNG_EVENT_RULE_STATUS_OK) {
                        ERR("Failed to add event rule tracepoint exclusion \"%s\".",
                                        exclusion);
@@ -894,7 +895,7 @@ skip_log_level_rule:
                offset += *exclusion_len;
        }
 
-       status = lttng_event_rule_tracepoint_set_pattern(rule, pattern);
+       status = lttng_event_rule_tracepoint_set_name_pattern(rule, pattern);
        if (status != LTTNG_EVENT_RULE_STATUS_OK) {
                ERR("Failed to set event rule tracepoint pattern.");
                ret = -1;
@@ -931,7 +932,7 @@ end:
        return ret;
 }
 
-enum lttng_event_rule_status lttng_event_rule_tracepoint_set_pattern(
+enum lttng_event_rule_status lttng_event_rule_tracepoint_set_name_pattern(
                struct lttng_event_rule *rule, const char *pattern)
 {
        char *pattern_copy = NULL;
@@ -952,6 +953,9 @@ enum lttng_event_rule_status lttng_event_rule_tracepoint_set_pattern(
                goto end;
        }
 
+       /* Normalize the pattern. */
+       strutils_normalize_star_glob_pattern(pattern_copy);
+
        free(tracepoint->pattern);
 
        tracepoint->pattern = pattern_copy;
@@ -960,7 +964,7 @@ end:
        return status;
 }
 
-enum lttng_event_rule_status lttng_event_rule_tracepoint_get_pattern(
+enum lttng_event_rule_status lttng_event_rule_tracepoint_get_name_pattern(
                const struct lttng_event_rule *rule, const char **pattern)
 {
        struct lttng_event_rule_tracepoint *tracepoint;
@@ -1117,6 +1121,27 @@ end:
        return valid;
 }
 
+static bool domain_supports_log_levels(enum lttng_domain_type domain)
+{
+       bool supported;
+
+       switch (domain) {
+       case LTTNG_DOMAIN_KERNEL:
+               supported = false;
+               break;
+       case LTTNG_DOMAIN_UST:
+       case LTTNG_DOMAIN_JUL:
+       case LTTNG_DOMAIN_LOG4J:
+       case LTTNG_DOMAIN_PYTHON:
+               supported = true;
+               break;
+       default:
+               abort();
+       }
+
+       return supported;
+}
+
 enum lttng_event_rule_status lttng_event_rule_tracepoint_set_log_level_rule(
                struct lttng_event_rule *rule,
                const struct lttng_log_level_rule *log_level_rule)
@@ -1133,6 +1158,11 @@ enum lttng_event_rule_status lttng_event_rule_tracepoint_set_log_level_rule(
        tracepoint = container_of(
                        rule, struct lttng_event_rule_tracepoint, parent);
 
+       if (!domain_supports_log_levels(tracepoint->domain)) {
+               status = LTTNG_EVENT_RULE_STATUS_UNSUPPORTED;
+               goto end;
+       }
+
        if (!log_level_rule_valid(log_level_rule, tracepoint->domain)) {
                status = LTTNG_EVENT_RULE_STATUS_INVALID;
                goto end;
@@ -1179,7 +1209,7 @@ end:
        return status;
 }
 
-enum lttng_event_rule_status lttng_event_rule_tracepoint_add_exclusion(
+enum lttng_event_rule_status lttng_event_rule_tracepoint_add_name_pattern_exclusion(
                struct lttng_event_rule *rule,
                const char *exclusion)
 {
@@ -1242,7 +1272,7 @@ end:
        return status;
 }
 
-enum lttng_event_rule_status lttng_event_rule_tracepoint_get_exclusions_count(
+enum lttng_event_rule_status lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(
                const struct lttng_event_rule *rule, unsigned int *count)
 {
        struct lttng_event_rule_tracepoint *tracepoint;
@@ -1260,7 +1290,7 @@ end:
        return status;
 }
 
-enum lttng_event_rule_status lttng_event_rule_tracepoint_get_exclusion_at_index(
+enum lttng_event_rule_status lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(
                const struct lttng_event_rule *rule,
                unsigned int index,
                const char **exclusion)
@@ -1276,7 +1306,7 @@ enum lttng_event_rule_status lttng_event_rule_tracepoint_get_exclusion_at_index(
 
        tracepoint = container_of(
                        rule, struct lttng_event_rule_tracepoint, parent);
-       if (lttng_event_rule_tracepoint_get_exclusions_count(rule, &count) !=
+       if (lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(rule, &count) !=
                        LTTNG_EVENT_RULE_STATUS_OK) {
                goto end;
        }
This page took 0.027302 seconds and 4 git commands to generate.