Force usage of assert() condition when NDEBUG is defined
[lttng-tools.git] / src / common / actions / notify.c
index 85029a5e25908665396dca4770fd135e399c6018..c34f3845f7423725f5f0c5a83e5be0f9bb7c3bf3 100644 (file)
@@ -5,12 +5,13 @@
  *
  */
 
-#include <assert.h>
 #include <common/error.h>
 #include <common/macros.h>
+#include <common/mi-lttng.h>
 #include <lttng/action/action-internal.h>
-#include <lttng/action/firing-policy-internal.h>
 #include <lttng/action/notify-internal.h>
+#include <lttng/action/rate-policy-internal.h>
+#include <lttng/lttng-error.h>
 
 #define IS_NOTIFY_ACTION(action) \
        (lttng_action_get_type(action) == LTTNG_ACTION_TYPE_NOTIFY)
@@ -18,7 +19,7 @@
 static struct lttng_action_notify *action_notify_from_action(
                struct lttng_action *action)
 {
-       assert(action);
+       LTTNG_ASSERT(action);
 
        return container_of(action, struct lttng_action_notify, parent);
 }
@@ -26,7 +27,7 @@ static struct lttng_action_notify *action_notify_from_action(
 static const struct lttng_action_notify *action_notify_from_action_const(
                const struct lttng_action *action)
 {
-       assert(action);
+       LTTNG_ASSERT(action);
 
        return container_of(action, struct lttng_action_notify, parent);
 }
@@ -36,7 +37,7 @@ void lttng_action_notify_destroy(struct lttng_action *action)
 {
        struct lttng_action_notify *notify_action;
        notify_action = action_notify_from_action(action);
-       lttng_firing_policy_destroy(notify_action->policy);
+       lttng_rate_policy_destroy(notify_action->policy);
        free(notify_action);
 }
 
@@ -55,8 +56,8 @@ int lttng_action_notify_serialize(struct lttng_action *action,
        DBG("Serializing notify action");
 
        notify_action = action_notify_from_action(action);
-       DBG("Serializing notify action firing policy");
-       ret = lttng_firing_policy_serialize(notify_action->policy, payload);
+       DBG("Serializing notify action rate policy");
+       ret = lttng_rate_policy_serialize(notify_action->policy, payload);
 
 end:
        return ret;
@@ -70,12 +71,64 @@ bool lttng_action_notify_is_equal(const struct lttng_action *a,
 
        _a = action_notify_from_action_const(a);
        _b = action_notify_from_action_const(b);
-       return lttng_firing_policy_is_equal(_a->policy, _b->policy);
+       return lttng_rate_policy_is_equal(_a->policy, _b->policy);
+}
+
+static const struct lttng_rate_policy *
+lttng_action_notify_internal_get_rate_policy(const struct lttng_action *action)
+{
+       const struct lttng_action_notify *_action;
+       _action = action_notify_from_action_const(action);
+
+       return _action->policy;
+}
+
+static enum lttng_error_code lttng_action_notify_mi_serialize(
+               const struct lttng_action *action, struct mi_writer *writer)
+{
+       int ret;
+       enum lttng_action_status status;
+       enum lttng_error_code ret_code;
+       const struct lttng_rate_policy *policy = NULL;
+
+       LTTNG_ASSERT(action);
+       LTTNG_ASSERT(IS_NOTIFY_ACTION(action));
+       LTTNG_ASSERT(writer);
+
+       status = lttng_action_notify_get_rate_policy(action, &policy);
+       LTTNG_ASSERT(status == LTTNG_ACTION_STATUS_OK);
+       LTTNG_ASSERT(policy != NULL);
+
+       /* Open action notify. */
+       ret = mi_lttng_writer_open_element(
+                       writer, mi_lttng_element_action_notify);
+       if (ret) {
+               goto mi_error;
+       }
+
+       ret_code = lttng_rate_policy_mi_serialize(policy, writer);
+       if (ret_code != LTTNG_OK) {
+               goto end;
+       }
+
+       /* Close action notify element. */
+       ret = mi_lttng_writer_close_element(writer);
+       if (ret) {
+               goto mi_error;
+       }
+
+       ret_code = LTTNG_OK;
+       goto end;
+
+mi_error:
+       ret_code = LTTNG_ERR_MI_IO_FAIL;
+end:
+       return ret_code;
 }
 
 struct lttng_action *lttng_action_notify_create(void)
 {
-       struct lttng_firing_policy *policy = NULL;
+       struct lttng_rate_policy *policy = NULL;
        struct lttng_action_notify *notify = NULL;
        struct lttng_action *action = NULL;
 
@@ -85,7 +138,7 @@ struct lttng_action *lttng_action_notify_create(void)
        }
 
        /* Default policy. */
-       policy = lttng_firing_policy_every_n_create(1);
+       policy = lttng_rate_policy_every_n_create(1);
        if (!policy) {
                goto end;
        }
@@ -93,7 +146,10 @@ struct lttng_action *lttng_action_notify_create(void)
        lttng_action_init(&notify->parent, LTTNG_ACTION_TYPE_NOTIFY, NULL,
                        lttng_action_notify_serialize,
                        lttng_action_notify_is_equal,
-                       lttng_action_notify_destroy);
+                       lttng_action_notify_destroy,
+                       lttng_action_notify_internal_get_rate_policy,
+                       lttng_action_generic_add_error_query_results,
+                       lttng_action_notify_mi_serialize);
 
        notify->policy = policy;
        policy = NULL;
@@ -103,7 +159,7 @@ struct lttng_action *lttng_action_notify_create(void)
 
 end:
        free(notify);
-       lttng_firing_policy_destroy(policy);
+       lttng_rate_policy_destroy(policy);
        return action;
 }
 
@@ -113,12 +169,12 @@ ssize_t lttng_action_notify_create_from_payload(
 {
        enum lttng_action_status status;
        ssize_t consumed_length;
-       struct lttng_firing_policy *firing_policy = NULL;
+       struct lttng_rate_policy *rate_policy = NULL;
        struct lttng_action *_action = NULL;
 
-       consumed_length = lttng_firing_policy_create_from_payload(
-                       view, &firing_policy);
-       if (!firing_policy) {
+       consumed_length = lttng_rate_policy_create_from_payload(
+                       view, &rate_policy);
+       if (!rate_policy) {
                consumed_length = -1;
                goto end;
        }
@@ -129,7 +185,7 @@ ssize_t lttng_action_notify_create_from_payload(
                goto end;
        }
 
-       status = lttng_action_notify_set_firing_policy(_action, firing_policy);
+       status = lttng_action_notify_set_rate_policy(_action, rate_policy);
        if (status != LTTNG_ACTION_STATUS_OK) {
                consumed_length = -1;
                goto end;
@@ -139,25 +195,25 @@ ssize_t lttng_action_notify_create_from_payload(
        _action = NULL;
 
 end:
-       lttng_firing_policy_destroy(firing_policy);
+       lttng_rate_policy_destroy(rate_policy);
        lttng_action_destroy(_action);
        return consumed_length;
 }
 
-enum lttng_action_status lttng_action_notify_set_firing_policy(
+enum lttng_action_status lttng_action_notify_set_rate_policy(
                struct lttng_action *action,
-               const struct lttng_firing_policy *policy)
+               const struct lttng_rate_policy *policy)
 {
        enum lttng_action_status status;
        struct lttng_action_notify *notify_action;
-       struct lttng_firing_policy *copy = NULL;
+       struct lttng_rate_policy *copy = NULL;
 
        if (!action || !policy || !IS_NOTIFY_ACTION(action)) {
                status = LTTNG_ACTION_STATUS_INVALID;
                goto end;
        }
 
-       copy = lttng_firing_policy_copy(policy);
+       copy = lttng_rate_policy_copy(policy);
        if (!copy) {
                status = LTTNG_ACTION_STATUS_ERROR;
                goto end;
@@ -165,8 +221,8 @@ enum lttng_action_status lttng_action_notify_set_firing_policy(
 
        notify_action = action_notify_from_action(action);
 
-       /* Free the previous firing policy .*/
-       lttng_firing_policy_destroy(notify_action->policy);
+       /* Free the previous rate policy .*/
+       lttng_rate_policy_destroy(notify_action->policy);
 
        /* Assign the policy. */
        notify_action->policy = copy;
@@ -174,13 +230,13 @@ enum lttng_action_status lttng_action_notify_set_firing_policy(
        copy = NULL;
 
 end:
-       lttng_firing_policy_destroy(copy);
+       lttng_rate_policy_destroy(copy);
        return status;
 }
 
-enum lttng_action_status lttng_action_notify_get_firing_policy(
+enum lttng_action_status lttng_action_notify_get_rate_policy(
                const struct lttng_action *action,
-               const struct lttng_firing_policy **policy)
+               const struct lttng_rate_policy **policy)
 {
        enum lttng_action_status status;
        const struct lttng_action_notify *notify_action;
This page took 0.026857 seconds and 4 git commands to generate.