X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fmi-lttng.c;h=ef98687d868108ef6e37e604b9c5e6c577f1cf00;hp=c21ed5a6311491cd875d246c6d4244fb8dda26f9;hb=7b4aa11d71edf81f1e5a81a447b4e6b788551594;hpb=970d848b0e1e8e81bc7be0fb43e1fcdcd5a84da7 diff --git a/src/common/mi-lttng.c b/src/common/mi-lttng.c index c21ed5a63..ef98687d8 100644 --- a/src/common/mi-lttng.c +++ b/src/common/mi-lttng.c @@ -16,9 +16,8 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ - -#include -#include +#define _LGPL_SOURCE +#include #include #include "mi-lttng.h" @@ -49,6 +48,8 @@ const char * const mi_lttng_element_command_snapshot_record = "record_snapshot"; 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 */ @@ -75,8 +76,6 @@ const char * const mi_lttng_context_type_perf_thread_counter = "PERF_THREAD_COUN 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"; /* Strings related to save command */ @@ -135,6 +134,14 @@ const char * const mi_lttng_loglevel_str_log4j_debug = "LOG4J_DEBUG"; const char * const mi_lttng_loglevel_str_log4j_trace = "LOG4J_TRACE"; const char * const mi_lttng_loglevel_str_log4j_all = "LOG4J_ALL"; +/* String related to loglevel Python */ +const char * const mi_lttng_loglevel_str_python_critical = "PYTHON_CRITICAL"; +const char * const mi_lttng_loglevel_str_python_error = "PYTHON_ERROR"; +const char * const mi_lttng_loglevel_str_python_warning = "PYTHON_WARNING"; +const char * const mi_lttng_loglevel_str_python_info = "PYTHON_INFO"; +const char * const mi_lttng_loglevel_str_python_debug = "PYTHON_DEBUG"; +const char * const mi_lttng_loglevel_str_python_notset = "PYTHON_NOTSET"; + /* String related to loglevel type */ const char * const mi_lttng_loglevel_type_all = "ALL"; const char * const mi_lttng_loglevel_type_range = "RANGE"; @@ -153,6 +160,10 @@ const char * const mi_lttng_element_snapshot_n_ptr = "n_ptr"; 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) @@ -250,6 +261,24 @@ const char *mi_lttng_loglevel_string(int value, enum lttng_domain_type domain) return mi_lttng_loglevel_str_unknown; } break; + case LTTNG_DOMAIN_PYTHON: + switch (value) { + case LTTNG_LOGLEVEL_PYTHON_CRITICAL: + return mi_lttng_loglevel_str_python_critical; + case LTTNG_LOGLEVEL_PYTHON_ERROR: + return mi_lttng_loglevel_str_python_error; + case LTTNG_LOGLEVEL_PYTHON_WARNING: + return mi_lttng_loglevel_str_python_warning; + case LTTNG_LOGLEVEL_PYTHON_INFO: + return mi_lttng_loglevel_str_python_info; + case LTTNG_LOGLEVEL_PYTHON_DEBUG: + return mi_lttng_loglevel_str_python_debug; + case LTTNG_LOGLEVEL_PYTHON_NOTSET: + return mi_lttng_loglevel_str_python_notset; + default: + return mi_lttng_loglevel_str_unknown; + } + break; } /* Reaching this means the domain is unknown. */ @@ -363,9 +392,12 @@ const char *mi_lttng_domaintype_string(enum lttng_domain_type value) 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 NULL; } } @@ -382,6 +414,7 @@ const char *mi_lttng_buffertype_string(enum lttng_buffer_type value) default: /* Should not have an unknow buffer type */ assert(0); + return NULL; } } @@ -889,6 +922,7 @@ int mi_lttng_event_common_attributes(struct mi_writer *writer, struct lttng_event *event) { int ret; + const char *filter_expression; /* Open event element */ ret = mi_lttng_writer_open_element(writer, config_element_event); @@ -921,6 +955,23 @@ int mi_lttng_event_common_attributes(struct mi_writer *writer, ret = mi_lttng_writer_write_element_bool(writer, config_element_filter, event->filter); + /* Event filter expression */ + ret = lttng_event_get_filter_string(event, &filter_expression); + + if (ret) { + goto end; + } + + if (filter_expression) { + ret = mi_lttng_writer_write_element_string(writer, + config_element_filter_expression, + filter_expression); + + if (ret) { + goto end; + } + } + end: return ret; } @@ -1090,20 +1141,47 @@ end: 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); } +/* + * TODO: move the listing of pid for user agent to process semantic on + * 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 *cmdline, +int mi_lttng_pid(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 pid process */ + ret = mi_lttng_writer_open_element(writer, config_element_pid); if (ret) { goto end; } @@ -1116,15 +1194,62 @@ int mi_lttng_pid(struct mi_writer *writer, pid_t pid , const char *cmdline, } /* 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: @@ -1211,6 +1336,7 @@ int mi_lttng_calibrate(struct mi_writer *writer, end: return ret; } + LTTNG_HIDDEN int mi_lttng_context(struct mi_writer *writer, struct lttng_event_context *context, int is_open) @@ -1314,6 +1440,9 @@ int mi_lttng_snapshot_output_session_name(struct mi_writer *writer, /* 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);