const char * const mi_lttng_element_command_start = "start";
const char * const mi_lttng_element_command_stop = "stop";
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";
/* Strings related to version command */
const char * const mi_lttng_element_perf_counter_context = "perf_counter_context";
/* Strings related to pid */
-const char * const mi_lttng_element_pids = "pids";
-const char * const mi_lttng_element_pid = "pid";
-const char * const mi_lttng_element_pid_id = "id";
+const char * const mi_lttng_element_processes = "processes";
+const char * const mi_lttng_element_process = "process";
/* Strings related to save command */
const char * const mi_lttng_element_save = "save";
const char * const mi_lttng_element_snapshot_session_name = "session_name";
const char * const mi_lttng_element_snapshots = "snapshots";
+/* String related to track/untrack command */
+const char * const mi_lttng_element_track_untrack_all_wildcard = "*";
+
+
/* This is a merge of jul loglevel and regular loglevel
* Those should never overlap by definition
* (see struct lttng_event loglevel)
return config_domain_type_jul;
case LTTNG_DOMAIN_LOG4J:
return config_domain_type_log4j;
+ case LTTNG_DOMAIN_PYTHON:
+ return config_domain_type_python;
default:
/* Should not have an unknown domain */
assert(0);
return ret;
}
+LTTNG_HIDDEN
+int mi_lttng_trackers_open(struct mi_writer *writer)
+{
+ return mi_lttng_writer_open_element(writer, config_element_trackers);
+}
+
+LTTNG_HIDDEN
+int mi_lttng_pid_tracker_open(struct mi_writer *writer)
+{
+ int ret;
+
+ /* Open element pid_tracker */
+ ret = mi_lttng_writer_open_element(writer, config_element_pid_tracker);
+ if (ret) {
+ goto end;
+ }
+
+ /* Open targets element */
+ ret = mi_lttng_targets_open(writer);
+end:
+ return ret;
+}
+
LTTNG_HIDDEN
int mi_lttng_pids_open(struct mi_writer *writer)
{
- return mi_lttng_writer_open_element(writer, mi_lttng_element_pids);
+ return mi_lttng_writer_open_element(writer, config_element_pids);
+}
+
+LTTNG_HIDDEN
+int mi_lttng_processes_open(struct mi_writer *writer)
+{
+ return mi_lttng_writer_open_element(writer, mi_lttng_element_processes);
}
LTTNG_HIDDEN
-int mi_lttng_pid(struct mi_writer *writer, pid_t pid , const char *cmdline,
+int mi_lttng_process(struct mi_writer *writer, pid_t pid , const char *name,
int is_open)
{
int ret;
- /* Open element pid */
- ret = mi_lttng_writer_open_element(writer, mi_lttng_element_pid);
+ /* Open element process */
+ ret = mi_lttng_writer_open_element(writer, mi_lttng_element_process);
if (ret) {
goto end;
}
/* Writing pid number */
ret = mi_lttng_writer_write_element_signed_int(writer,
- mi_lttng_element_pid_id, (int)pid);
+ config_element_pid, (int)pid);
if (ret) {
goto end;
}
/* Writing name of the process */
- ret = mi_lttng_writer_write_element_string(writer, config_element_name,
- cmdline);
+ if (name) {
+ ret = mi_lttng_writer_write_element_string(writer, config_element_name,
+ name);
+ if (ret) {
+ goto end;
+ }
+ }
+
+ if (!is_open) {
+ /* Closing Pid */
+ ret = mi_lttng_writer_close_element(writer);
+ }
+
+end:
+ return ret;
+}
+
+LTTNG_HIDDEN
+int mi_lttng_targets_open(struct mi_writer *writer)
+{
+ return mi_lttng_writer_open_element(writer,
+ config_element_targets);
+}
+
+LTTNG_HIDDEN
+int mi_lttng_pid_target(struct mi_writer *writer, pid_t pid, int is_open)
+{
+ int ret;
+
+ ret = mi_lttng_writer_open_element(writer,
+ config_element_target_pid);
+ if (ret) {
+ goto end;
+ }
+
+ /* 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 {
+ ret = mi_lttng_writer_write_element_signed_int(writer,
+ config_element_pid, (int) pid);
+ }
if (ret) {
goto end;
}
if (!is_open) {
- /* Closing Pid */
ret = mi_lttng_writer_close_element(writer);
+ if (ret) {
+ goto end;
+ }
}
end:
end:
return ret;
}
+
LTTNG_HIDDEN
int mi_lttng_context(struct mi_writer *writer,
struct lttng_event_context *context, int is_open)
/* Snapshot output list for current session name */
ret = mi_lttng_writer_write_element_string(writer, config_element_name,
session_name);
+ if (ret) {
+ goto end;
+ }
/* Open element snapshots (sequence one snapshot) */
ret = mi_lttng_writer_open_element(writer, mi_lttng_element_snapshots);