Fix: use negative code for errors in enum
[lttng-tools.git] / src / common / mi-lttng.c
index f0244d9fdd46d012dee437f335b495a6a8b188cf..d5148bcb58376cc09e24978e2f5de06fee9c028f 100644 (file)
@@ -36,7 +36,7 @@ LTTNG_HIDDEN const char * const mi_lttng_w3_schema_uri = "http://www.w3.org/2001
 LTTNG_HIDDEN const char * const mi_lttng_schema_location = "xsi:schemaLocation";
 LTTNG_HIDDEN const char * const mi_lttng_schema_location_uri =
        DEFAULT_LTTNG_MI_NAMESPACE " "
-       "http://lttng.org/xml/schemas/lttng-mi/" XSTR(MI_SCHEMA_MAJOR_VERSION)
+       "https://lttng.org/xml/schemas/lttng-mi/" XSTR(MI_SCHEMA_MAJOR_VERSION)
        "/lttng-mi-" XSTR(MI_SCHEMA_MAJOR_VERSION) "."
        XSTR(MI_SCHEMA_MINOR_VERSION) ".xsd";
 LTTNG_HIDDEN const char * const mi_lttng_schema_version = "schemaVersion";
@@ -74,6 +74,9 @@ const char * const mi_lttng_element_command_success = "success";
 const char * const mi_lttng_element_command_track = "track";
 const char * const mi_lttng_element_command_untrack = "untrack";
 const char * const mi_lttng_element_command_version = "version";
+const char * const mi_lttng_element_command_rotate = "rotate";
+const char * const mi_lttng_element_command_enable_rotation = "enable-rotation";
+const char * const mi_lttng_element_command_disable_rotation = "disable-rotation";
 
 /* Strings related to version command */
 const char * const mi_lttng_element_version = "version";
@@ -179,6 +182,23 @@ const char * const mi_lttng_element_snapshots = "snapshots";
 /* String related to track/untrack command */
 const char * const mi_lttng_element_track_untrack_all_wildcard = "*";
 
+LTTNG_HIDDEN const char * const mi_lttng_element_session_name = "session_name";
+
+/* String related to rotate command */
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation = "rotation";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotate_status = "status";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation_schedule = "rotation_schedule";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation_schedules = "rotation_schedules";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation_schedule_result = "rotation_schedule_result";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation_schedule_results = "rotation_schedule_results";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation_schedule_periodic = "periodic";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation_schedule_periodic_time_us = "time_us";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation_schedule_size_threshold = "size_threshold";
+LTTNG_HIDDEN const char * const mi_lttng_element_rotation_schedule_size_threshold_bytes = "bytes";
+
+/* String related to add-context command */
+LTTNG_HIDDEN const char * const mi_lttng_element_context_symbol = "symbol";
+
 /* Deprecated symbols preserved for ABI compatibility. */
 const char * const mi_lttng_context_type_perf_counter;
 const char * const mi_lttng_context_type_perf_cpu_counter;
@@ -383,6 +403,10 @@ const char *mi_lttng_event_contexttype_string(enum lttng_event_context_type val)
                return config_event_context_need_reschedule;
        case LTTNG_EVENT_CONTEXT_MIGRATABLE:
                return config_event_context_migratable;
+       case LTTNG_EVENT_CONTEXT_CALLSTACK_USER:
+               return config_event_context_callstack_user;
+       case LTTNG_EVENT_CONTEXT_CALLSTACK_KERNEL:
+               return config_event_context_callstack_kernel;
        default:
                return NULL;
        }
@@ -1819,3 +1843,108 @@ int mi_lttng_snapshot_record(struct mi_writer *writer,
 end:
        return ret;
 }
+
+LTTNG_HIDDEN
+int mi_lttng_rotation_schedule(struct mi_writer *writer,
+               const struct lttng_rotation_schedule *schedule)
+{
+       int ret = 0;
+       enum lttng_rotation_status status;
+       uint64_t value;
+       const char *element_name;
+       const char *value_name;
+       bool empty_schedule = false;
+
+       switch (lttng_rotation_schedule_get_type(schedule)) {
+       case LTTNG_ROTATION_SCHEDULE_TYPE_PERIODIC:
+               status = lttng_rotation_schedule_periodic_get_period(schedule,
+                               &value);
+               element_name = mi_lttng_element_rotation_schedule_periodic;
+               value_name = mi_lttng_element_rotation_schedule_periodic_time_us;
+               break;
+       case LTTNG_ROTATION_SCHEDULE_TYPE_SIZE_THRESHOLD:
+               status = lttng_rotation_schedule_size_threshold_get_threshold(
+                               schedule, &value);
+               element_name = mi_lttng_element_rotation_schedule_size_threshold;
+               value_name = mi_lttng_element_rotation_schedule_size_threshold_bytes;
+               break;
+       default:
+               ret = -1;
+               goto end;
+       }
+
+       if (status != LTTNG_ROTATION_STATUS_OK) {
+               if (status == LTTNG_ROTATION_STATUS_UNAVAILABLE) {
+                       empty_schedule = true;
+               } else {
+                       ret = -1;
+                       goto end;
+               }
+       }
+
+       ret = mi_lttng_writer_open_element(writer, element_name);
+       if (ret) {
+               goto end;
+       }
+
+       if (!empty_schedule) {
+               ret = mi_lttng_writer_write_element_unsigned_int(writer,
+                               value_name, value);
+               if (ret) {
+                       goto end;
+               }
+       }
+
+       /* Close schedule descriptor element. */
+       ret = mi_lttng_writer_close_element(writer);
+       if (ret) {
+               goto end;
+       }
+end:
+       return ret;
+}
+
+LTTNG_HIDDEN
+int mi_lttng_rotation_schedule_result(struct mi_writer *writer,
+               const struct lttng_rotation_schedule *schedule,
+               bool success)
+{
+       int ret = 0;
+
+       ret = mi_lttng_writer_open_element(writer,
+                       mi_lttng_element_rotation_schedule_result);
+       if (ret) {
+               goto end;
+       }
+
+       ret = mi_lttng_writer_open_element(writer,
+                       mi_lttng_element_rotation_schedule);
+       if (ret) {
+               goto end;
+       }
+
+       ret = mi_lttng_rotation_schedule(writer, schedule);
+       if (ret) {
+               goto end;
+       }
+
+       /* Close rotation_schedule element */
+       ret = mi_lttng_writer_close_element(writer);
+       if (ret) {
+               goto end;
+       }
+
+       ret = mi_lttng_writer_write_element_bool(writer,
+                       mi_lttng_element_command_success, success);
+       if (ret) {
+               goto end;
+       }
+
+       /* Close rotation_schedule_result element */
+        ret = mi_lttng_writer_close_element(writer);
+       if (ret) {
+               goto end;
+       }
+end:
+       return ret;
+}
This page took 0.026229 seconds and 5 git commands to generate.