From 91c96f622ad9eadbf44a63b55289f673be9cf90e Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Wed, 25 Mar 2020 10:41:17 -0400 Subject: [PATCH] trigger: lttng_trigger_get_underlying_domain_type_restriction MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau Change-Id: I5fe156a09e4e4c833f84a0fe9027c838b73fe728 --- include/lttng/trigger/trigger-internal.h | 8 ++++ src/common/trigger.c | 47 ++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/include/lttng/trigger/trigger-internal.h b/include/lttng/trigger/trigger-internal.h index 873684769..e32ea737e 100644 --- a/include/lttng/trigger/trigger-internal.h +++ b/include/lttng/trigger/trigger-internal.h @@ -184,4 +184,12 @@ void lttng_trigger_fire(struct lttng_trigger *trigger); LTTNG_HIDDEN bool lttng_trigger_should_fire(const struct lttng_trigger *trigger); +/* + * Return the type of any underlying domain restriction. If no particular + * requirement is present, returns LTTNG_DOMAIN_NONE. + */ +LTTNG_HIDDEN +enum lttng_domain_type lttng_trigger_get_underlying_domain_type_restriction( + const struct lttng_trigger *trigger); + #endif /* LTTNG_TRIGGER_INTERNAL_H */ diff --git a/src/common/trigger.c b/src/common/trigger.c index 8c43fdbd8..132fda138 100644 --- a/src/common/trigger.c +++ b/src/common/trigger.c @@ -7,10 +7,14 @@ #include #include +#include +#include +#include #include #include #include #include +#include #include #include #include @@ -881,3 +885,46 @@ void lttng_trigger_fire(struct lttng_trigger *trigger) abort(); }; } + +LTTNG_HIDDEN +enum lttng_domain_type lttng_trigger_get_underlying_domain_type_restriction( + const struct lttng_trigger *trigger) +{ + enum lttng_domain_type type = LTTNG_DOMAIN_NONE; + const struct lttng_event_rule *event_rule; + enum lttng_condition_status c_status; + enum lttng_condition_type c_type; + + assert(trigger); + assert(trigger->condition); + + c_type = lttng_condition_get_type(trigger->condition); + assert (c_type != LTTNG_CONDITION_TYPE_UNKNOWN); + + switch (c_type) { + case LTTNG_CONDITION_TYPE_SESSION_CONSUMED_SIZE: + case LTTNG_CONDITION_TYPE_SESSION_ROTATION_ONGOING: + case LTTNG_CONDITION_TYPE_SESSION_ROTATION_COMPLETED: + /* Apply to any domain. */ + type = LTTNG_DOMAIN_NONE; + break; + case LTTNG_CONDITION_TYPE_EVENT_RULE_HIT: + /* Return the domain of the event rule. */ + c_status = lttng_condition_event_rule_get_rule( + trigger->condition, &event_rule); + assert(c_status == LTTNG_CONDITION_STATUS_OK); + type = lttng_event_rule_get_domain_type(event_rule); + break; + case LTTNG_CONDITION_TYPE_BUFFER_USAGE_HIGH: + case LTTNG_CONDITION_TYPE_BUFFER_USAGE_LOW: + /* Return the domain of the channel being monitored. */ + c_status = lttng_condition_buffer_usage_get_domain_type( + trigger->condition, &type); + assert(c_status == LTTNG_CONDITION_STATUS_OK); + break; + default: + abort(); + } + + return type; +} -- 2.34.1