MI: implement all objects related to trigger machine interface
[lttng-tools.git] / src / common / conditions / session-rotation.c
index 7df5ebab0d8daf97324fccdc0dfb55715ae01da5..1be0f0ad25c5f20b1c27028160b6d3ce231e79de 100644 (file)
@@ -5,12 +5,13 @@
  *
  */
 
+#include <assert.h>
+#include <common/error.h>
+#include <common/macros.h>
+#include <common/mi-lttng.h>
 #include <lttng/condition/condition-internal.h>
 #include <lttng/condition/session-rotation-internal.h>
 #include <lttng/location-internal.h>
-#include <common/macros.h>
-#include <common/error.h>
-#include <assert.h>
 #include <stdbool.h>
 
 static
@@ -27,6 +28,11 @@ static
 void lttng_condition_session_rotation_destroy(
                struct lttng_condition *condition);
 
+static
+enum lttng_error_code lttng_condition_session_rotation_mi_serialize(
+               const struct lttng_condition *condition,
+               struct mi_writer *writer);
+
 static const
 struct lttng_condition rotation_condition_template = {
        /* .type omitted; shall be set on creation. */
@@ -34,6 +40,7 @@ struct lttng_condition rotation_condition_template = {
        .serialize = lttng_condition_session_rotation_serialize,
        .equal = lttng_condition_session_rotation_is_equal,
        .destroy = lttng_condition_session_rotation_destroy,
+       .mi_serialize = lttng_condition_session_rotation_mi_serialize,
 };
 
 static
@@ -586,3 +593,65 @@ lttng_evaluation_session_rotation_completed_get_location(
 end:
        return status;
 }
+
+static
+enum lttng_error_code lttng_condition_session_rotation_mi_serialize(
+               const struct lttng_condition *condition,
+               struct mi_writer *writer)
+{
+       int ret;
+       enum lttng_error_code ret_code;
+       enum lttng_condition_status status;
+       const char *session_name = NULL;
+       const char *type_element_str = NULL;
+
+       assert(condition);
+       assert(writer);
+       assert(is_rotation_condition(condition));
+
+       switch (lttng_condition_get_type(condition)) {
+       case LTTNG_CONDITION_TYPE_SESSION_ROTATION_COMPLETED:
+               type_element_str =
+                               mi_lttng_element_condition_session_rotation_completed;
+               break;
+       case LTTNG_CONDITION_TYPE_SESSION_ROTATION_ONGOING:
+               type_element_str =
+                               mi_lttng_element_condition_session_rotation_ongoing;
+               break;
+       default:
+               abort();
+               break;
+       }
+
+       status = lttng_condition_session_rotation_get_session_name(
+                       condition, &session_name);
+       assert(status == LTTNG_CONDITION_STATUS_OK);
+       assert(session_name);
+
+       /* Open condition session rotation_* element. */
+       ret = mi_lttng_writer_open_element(writer, type_element_str);
+       if (ret) {
+               goto mi_error;
+       }
+
+       /* Session name. */
+       ret = mi_lttng_writer_write_element_string(
+                       writer, mi_lttng_element_session_name, session_name);
+       if (ret) {
+               goto mi_error;
+       }
+
+       /* Close condition session rotation 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;
+}
This page took 0.02622 seconds and 5 git commands to generate.