trigger: lttng_trigger_get_underlying_domain_type_restriction
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Wed, 25 Mar 2020 14:41:17 +0000 (10:41 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 24 Nov 2020 20:12:59 +0000 (15:12 -0500)
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I5fe156a09e4e4c833f84a0fe9027c838b73fe728

include/lttng/trigger/trigger-internal.h
src/common/trigger.c

index 87368476958f08186e5f907545764bc3a6376086..e32ea737ea8a911c9dc56402601186d08c5a5a5d 100644 (file)
@@ -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 */
index 8c43fdbd8aaa8aa7f7ad1fda253ea8701c7f751c..132fda138912ef8ac264f6452f274614c1b19eca 100644 (file)
@@ -7,10 +7,14 @@
 
 #include <lttng/trigger/trigger-internal.h>
 #include <lttng/condition/condition-internal.h>
+#include <lttng/condition/event-rule.h>
+#include <lttng/condition/buffer-usage.h>
+#include <lttng/event-rule/event-rule-internal.h>
 #include <lttng/action/action-internal.h>
 #include <common/credentials.h>
 #include <common/payload.h>
 #include <common/payload-view.h>
+#include <lttng/domain.h>
 #include <common/error.h>
 #include <common/dynamic-array.h>
 #include <common/optional.h>
@@ -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;
+}
This page took 0.034955 seconds and 4 git commands to generate.