From: Mathieu Desnoyers Date: Wed, 4 Jul 2018 20:13:43 +0000 (-0400) Subject: Backport: trackers: update MI to new xsd schema X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=commitdiff_plain;h=7f1c1f8fbc1dfa95ee5d4306d5321eaa419ef881 Backport: trackers: update MI to new xsd schema Signed-off-by: Mathieu Desnoyers --- diff --git a/src/common/mi-lttng-3.0.xsd b/src/common/mi-lttng-3.0.xsd index 668b0d267..1a957e17d 100644 --- a/src/common/mi-lttng-3.0.xsd +++ b/src/common/mi-lttng-3.0.xsd @@ -280,6 +280,14 @@ THE SOFTWARE. + + + + + + + + @@ -287,43 +295,232 @@ THE SOFTWARE. - - - - - + + + + + + + - - - - - + - + - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + @@ -562,7 +759,7 @@ THE SOFTWARE. - + diff --git a/src/common/mi-lttng.c b/src/common/mi-lttng.c index 1dcdefba9..e761bb112 100644 --- a/src/common/mi-lttng.c +++ b/src/common/mi-lttng.c @@ -1252,13 +1252,59 @@ int mi_lttng_trackers_open(struct mi_writer *writer) return mi_lttng_writer_open_element(writer, config_element_trackers); } +static +int get_tracker_elements(enum lttng_tracker_type tracker_type, + const char **element_id_tracker, + const char **element_target_id) +{ + int ret = 0; + + switch (tracker_type) { + case LTTNG_TRACKER_PID: + *element_id_tracker = config_element_pid_tracker; + *element_target_id = config_element_target_pid; + break; + case LTTNG_TRACKER_VPID: + *element_id_tracker = config_element_vpid_tracker; + *element_target_id = config_element_target_vpid; + break; + case LTTNG_TRACKER_UID: + *element_id_tracker = config_element_uid_tracker; + *element_target_id = config_element_target_uid; + break; + case LTTNG_TRACKER_VUID: + *element_id_tracker = config_element_vuid_tracker; + *element_target_id = config_element_target_vuid; + break; + case LTTNG_TRACKER_GID: + *element_id_tracker = config_element_gid_tracker; + *element_target_id = config_element_target_gid; + break; + case LTTNG_TRACKER_VGID: + *element_id_tracker = config_element_vgid_tracker; + *element_target_id = config_element_target_vgid; + break; + default: + ret = LTTNG_ERR_SAVE_IO_FAIL; + } + return ret; +} + LTTNG_HIDDEN -int mi_lttng_pid_tracker_open(struct mi_writer *writer) +int mi_lttng_id_tracker_open(struct mi_writer *writer, + enum lttng_tracker_type tracker_type) { int ret; + const char *element_id_tracker, *element_target_id; + + ret = get_tracker_elements(tracker_type, &element_id_tracker, + &element_target_id); + if (ret) { + return ret; + } - /* Open element pid_tracker */ - ret = mi_lttng_writer_open_element(writer, config_element_pid_tracker); + /* Open element $id_tracker */ + ret = mi_lttng_writer_open_element(writer, element_id_tracker); if (ret) { goto end; } @@ -1280,7 +1326,7 @@ int mi_lttng_pids_open(struct mi_writer *writer) * mi api bump. The use of process element break the mi api. */ LTTNG_HIDDEN -int mi_lttng_pid(struct mi_writer *writer, pid_t pid , const char *name, +int mi_lttng_pid(struct mi_writer *writer, pid_t pid, const char *name, int is_open) { int ret; @@ -1324,27 +1370,79 @@ int mi_lttng_targets_open(struct mi_writer *writer) } LTTNG_HIDDEN -int mi_lttng_pid_target(struct mi_writer *writer, pid_t pid, int is_open) +int mi_lttng_id_target(struct mi_writer *writer, + enum lttng_tracker_type tracker_type, + struct lttng_tracker_id *id, int is_open) { int ret; + const char *element_id_tracker, *element_target_id; - ret = mi_lttng_writer_open_element(writer, - config_element_target_pid); + ret = get_tracker_elements(tracker_type, &element_id_tracker, + &element_target_id); if (ret) { - goto end; + return ret; } - /* Writing pid number - * Special case for element all on track untrack command - * All pid is represented as wildcard * - */ - if ((int) pid == -1) { - ret = mi_lttng_writer_write_element_string(writer, - config_element_pid, - mi_lttng_element_track_untrack_all_wildcard); - } else { + switch (id->type) { + case LTTNG_ID_ALL: + ret = mi_lttng_writer_open_element(writer, element_target_id); + if (ret) { + goto end; + } + ret = mi_lttng_writer_open_element(writer, config_element_type); + if (ret) { + goto end; + } + ret = mi_lttng_writer_write_element_bool(writer, config_element_all, 1); + if (ret) { + goto end; + } + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto end; + } + break; + case LTTNG_ID_VALUE: + ret = mi_lttng_writer_open_element(writer, element_target_id); + if (ret) { + goto end; + } + ret = mi_lttng_writer_open_element(writer, config_element_type); + if (ret) { + goto end; + } ret = mi_lttng_writer_write_element_signed_int(writer, - config_element_pid, (int) pid); + config_element_id, id->value); + if (ret) { + goto end; + } + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto end; + } + break; + case LTTNG_ID_STRING: + ret = mi_lttng_writer_open_element(writer, element_target_id); + if (ret) { + goto end; + } + ret = mi_lttng_writer_open_element(writer, config_element_type); + if (ret) { + goto end; + } + ret = mi_lttng_writer_write_element_string(writer, + config_element_name, id->string); + if (ret) { + goto end; + } + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto end; + } + break; + case LTTNG_ID_UNKNOWN: + ret = -LTTNG_ERR_INVALID; + goto end; } if (ret) { goto end; diff --git a/src/common/mi-lttng.h b/src/common/mi-lttng.h index e7cf8af92..7a86b15c9 100644 --- a/src/common/mi-lttng.h +++ b/src/common/mi-lttng.h @@ -563,7 +563,7 @@ int mi_lttng_event_fields_open(struct mi_writer *writer); int mi_lttng_trackers_open(struct mi_writer *writer); /* - * Machine interface: open a pid_tracker element. + * Machine interface: open a id tracker element. * * writer An instance of a machine interface writer. * @@ -572,7 +572,8 @@ int mi_lttng_trackers_open(struct mi_writer *writer); * * Note: A targets element is also opened for each tracker definition */ -int mi_lttng_pid_tracker_open(struct mi_writer *writer); +int mi_lttng_id_tracker_open(struct mi_writer *writer, + enum lttng_tracker_type tracker_type); /* * Machine interface: open a PIDs element. @@ -641,14 +642,16 @@ int mi_lttng_pid(struct mi_writer *writer, pid_t pid , const char *name, int mi_lttng_targets_open(struct mi_writer *writer); /* - * Machine interface for track/untrack a pid_target + * Machine interface for track/untrack an id_target * * writer An instance of a machine interface writer. * * Returns zero if the element's value could be written. * Negative values indicate an error. */ -int mi_lttng_pid_target(struct mi_writer *writer, pid_t pid, int is_open); +int mi_lttng_id_target(struct mi_writer *writer, + enum lttng_tracker_type tracker_type, + struct lttng_tracker_id *id, int is_open); /* * Machine interface of a context.