LTTNG_HIDDEN int mi_lttng_session(struct mi_writer *writer, struct lttng_session *session, int is_open) { int ret; assert(session); /* Open sessions element */ ret = mi_lttng_writer_open_element(writer, config_element_session); if (ret) { goto end; } /* Name of the session */ ret = mi_lttng_writer_write_element_string(writer, config_element_name, session->name); if (ret) { goto end; } /* Path */ ret = mi_lttng_writer_write_element_string(writer, config_element_path, session->path); if (ret) { goto end; } /* Enabled ? */ ret = mi_lttng_writer_write_element_bool(writer, config_element_enabled, session->enabled); if (ret) { goto end; } /* Snapshot mode */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_snapshot_mode, session->snapshot_mode); if (ret) { goto end; } /* Live timer interval in usec */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_live_timer_interval, session->live_timer_interval); if (ret) { goto end; } if (!is_open) { /* Closing session element */ ret = mi_lttng_writer_close_element(writer); } end: return ret; }
LTTNG_HIDDEN int mi_lttng_snapshot_add_output(struct mi_writer *writer, const char *current_session_name, const char *n_ptr, struct lttng_snapshot_output *output) { int ret; /* Open element snapshot */ ret = mi_lttng_writer_open_element(writer, mi_lttng_element_command_snapshot); if (ret) { goto end; } /* Snapshot output id */ ret = mi_lttng_writer_write_element_unsigned_int(writer, mi_lttng_element_id, output->id); if (ret) { goto end; } /* Snapshot output names */ ret = mi_lttng_writer_write_element_string(writer, config_element_name, n_ptr); if (ret) { goto end; } /* Destination of the output (ctrl_url)*/ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_snapshot_ctrl_url, output->ctrl_url); if (ret) { goto end; } /* Snapshot added for session "current_session_name"*/ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_snapshot_session_name, current_session_name); if (ret) { goto end; } /* total size of all stream combined */ ret = mi_lttng_writer_write_element_unsigned_int(writer, mi_lttng_element_snapshot_max_size, output->max_size); if (ret) { goto end; } /* Close snapshot element */ ret = mi_lttng_writer_close_element(writer); end: return ret; }
LTTNG_HIDDEN int mi_lttng_snapshot_list_output(struct mi_writer *writer, struct lttng_snapshot_output *output) { int ret; /* Open element snapshot output */ ret = mi_lttng_writer_open_element(writer, mi_lttng_element_command_snapshot); if (ret) { goto end; } /* ID of the snapshot output */ ret = mi_lttng_writer_write_element_unsigned_int(writer, mi_lttng_element_id, output->id); if (ret) { goto end; } /* Name of the output */ ret = mi_lttng_writer_write_element_string(writer, config_element_name, output->name); if (ret) { goto end; } /* Destination of the output (ctrl_url)*/ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_snapshot_ctrl_url, output->ctrl_url); if (ret) { goto end; } /* Destination of the output (data_url) */ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_snapshot_data_url, output->data_url); if (ret) { goto end; } /* total size of all stream combined */ ret = mi_lttng_writer_write_element_unsigned_int(writer, mi_lttng_element_snapshot_max_size, output->max_size); if (ret) { goto end; } /* Close snapshot output element */ ret = mi_lttng_writer_close_element(writer); end: return ret; }
LTTNG_HIDDEN int mi_lttng_event_function_probe(struct mi_writer *writer, struct lttng_event *event) { int ret; ret = mi_lttng_writer_open_element(writer, config_element_attributes); if (ret) { goto end; } ret = mi_lttng_writer_open_element(writer, config_element_probe_attributes); if (ret) { goto end; } if (event->attr.probe.addr != 0) { /* event probe address */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_address, event->attr.probe.addr); if (ret) { goto end; } } else { /* event probe offset */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_offset, event->attr.probe.offset); if (ret) { goto end; } /* event probe symbol_name */ ret = mi_lttng_writer_write_element_string(writer, config_element_symbol_name, event->attr.probe.symbol_name); if (ret) { goto end; } } /* Close probe_attributes and attributes */ ret = mi_lttng_close_multi_element(writer, 2); end: return ret; }
LTTNG_HIDDEN int mi_lttng_perf_counter_context(struct mi_writer *writer, struct lttng_event_perf_counter_ctx *perf_context) { int ret; /* Open perf_counter_context */ ret = mi_lttng_writer_open_element(writer, mi_lttng_element_perf_counter_context); if (ret) { goto end; } /* Type */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_type, perf_context->type); if (ret) { goto end; } /* Config */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_config, perf_context->config); if (ret) { goto end; } /* Name of the perf counter */ ret = mi_lttng_writer_write_element_string(writer, config_element_name, perf_context->name); if (ret) { goto end; } /* Close perf_counter_context */ ret = mi_lttng_writer_close_element(writer); end: return ret; }
LTTNG_HIDDEN int mi_lttng_snapshot_del_output(struct mi_writer *writer, int id, const char *name, const char *current_session_name) { int ret; /* Open element del_snapshot */ ret = mi_lttng_writer_open_element(writer, mi_lttng_element_command_snapshot); if (ret) { goto end; } if (id != UINT32_MAX) { /* "Snapshot output "id" successfully deleted * for "current_session_name" * ID of the snapshot output */ ret = mi_lttng_writer_write_element_unsigned_int(writer, mi_lttng_element_id, id); if (ret) { goto end; } } else { /* "Snapshot output "name" successfully deleted * for session "current_session_name" * Name of the output */ ret = mi_lttng_writer_write_element_string(writer, config_element_name, name); if (ret) { goto end; } } /* Snapshot was deleted for session "current_session_name"*/ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_snapshot_session_name, current_session_name); if (ret) { goto end; } /* Close snapshot element */ ret = mi_lttng_writer_close_element(writer); end: return ret; }
LTTNG_HIDDEN int mi_lttng_channel_attr(struct mi_writer *writer, struct lttng_channel_attr *attr) { int ret = 0; struct lttng_channel *chan = caa_container_of(attr, struct lttng_channel, attr); uint64_t discarded_events, lost_packets, monitor_timer_interval; int64_t blocking_timeout; assert(attr); ret = lttng_channel_get_discarded_event_count(chan, &discarded_events); if (ret) { goto end; } ret = lttng_channel_get_lost_packet_count(chan, &lost_packets); if (ret) { goto end; } ret = lttng_channel_get_monitor_timer_interval(chan, &monitor_timer_interval); if (ret) { goto end; } ret = lttng_channel_get_blocking_timeout(chan, &blocking_timeout); if (ret) { goto end; } /* Opening Attributes */ ret = mi_lttng_writer_open_element(writer, config_element_attributes); if (ret) { goto end; } /* Overwrite */ ret = mi_lttng_writer_write_element_string(writer, config_element_overwrite_mode, attr->overwrite ? config_overwrite_mode_overwrite : config_overwrite_mode_discard); if (ret) { goto end; } /* Sub buffer size in byte */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_subbuf_size, attr->subbuf_size); if (ret) { goto end; } /* Number of subbuffer (power of two) */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_num_subbuf, attr->num_subbuf); if (ret) { goto end; } /* Switch timer interval in usec */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_switch_timer_interval, attr->switch_timer_interval); if (ret) { goto end; } /* Read timer interval in usec */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_read_timer_interval, attr->read_timer_interval); if (ret) { goto end; } /* Monitor timer interval in usec */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_monitor_timer_interval, monitor_timer_interval); if (ret) { goto end; } /* Retry timeout in usec */ ret = mi_lttng_writer_write_element_signed_int(writer, config_element_blocking_timeout, blocking_timeout); if (ret) { goto end; } /* Event output */ ret = mi_lttng_writer_write_element_string(writer, config_element_output_type, attr->output == LTTNG_EVENT_SPLICE ? config_output_type_splice : config_output_type_mmap); if (ret) { goto end; } /* Tracefile size in bytes */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_tracefile_size, attr->tracefile_size); if (ret) { goto end; } /* Count of tracefiles */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_tracefile_count, attr->tracefile_count); if (ret) { goto end; } /* Live timer interval in usec*/ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_live_timer_interval, attr->live_timer_interval); if (ret) { goto end; } /* Discarded events */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_discarded_events, discarded_events); if (ret) { goto end; } /* Lost packets */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_lost_packets, lost_packets); if (ret) { goto end; } /* Closing attributes */ ret = mi_lttng_writer_close_element(writer); if (ret) { goto end; } end: return ret; }
LTTNG_HIDDEN int mi_lttng_version(struct mi_writer *writer, struct mi_lttng_version *version, const char *lttng_description, const char *lttng_license) { int ret; /* Open version */ ret = mi_lttng_writer_open_element(writer, mi_lttng_element_version); if (ret) { goto end; } /* Version string (contain info like rc etc.) */ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_version_str, version->version); if (ret) { goto end; } /* Major version number */ ret = mi_lttng_writer_write_element_unsigned_int(writer, mi_lttng_element_version_major, version->version_major); if (ret) { goto end; } /* Minor version number */ ret = mi_lttng_writer_write_element_unsigned_int(writer, mi_lttng_element_version_minor, version->version_minor); if (ret) { goto end; } /* Commit version number */ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_version_commit, version->version_commit); if (ret) { goto end; } /* Patch number */ ret = mi_lttng_writer_write_element_unsigned_int(writer, mi_lttng_element_version_patch_level, version->version_patchlevel); if (ret) { goto end; } /* Name of the version */ ret = mi_lttng_writer_write_element_string(writer, config_element_name, version->version_name); if (ret) { goto end; } /* Description mostly related to beer... */ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_version_description, lttng_description); if (ret) { goto end; } /* url */ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_version_web, version->package_url); if (ret) { goto end; } /* License: free as in free beer...no...*speech* */ ret = mi_lttng_writer_write_element_string(writer, mi_lttng_element_version_license, lttng_license); if (ret) { goto end; } /* Close version element */ ret = mi_lttng_writer_close_element(writer); end: return ret; }
LTTNG_HIDDEN int mi_lttng_channel_attr(struct mi_writer *writer, struct lttng_channel_attr *attr) { int ret = 0; assert(attr); /* Opening Attributes */ ret = mi_lttng_writer_open_element(writer, config_element_attributes); if (ret) { goto end; } /* Overwrite */ ret = mi_lttng_writer_write_element_string(writer, config_element_overwrite_mode, attr->overwrite ? config_overwrite_mode_overwrite : config_overwrite_mode_discard); if (ret) { goto end; } /* Sub buffer size in byte */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_subbuf_size, attr->subbuf_size); if (ret) { goto end; } /* Number of subbuffer (power of two) */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_num_subbuf, attr->num_subbuf); if (ret) { goto end; } /* Switch timer interval in usec */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_switch_timer_interval, attr->switch_timer_interval); if (ret) { goto end; } /* Read timer interval in usec */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_read_timer_interval, attr->read_timer_interval); if (ret) { goto end; } /* Event output */ ret = mi_lttng_writer_write_element_string(writer, config_element_output_type, attr->output == LTTNG_EVENT_SPLICE ? config_output_type_splice : config_output_type_mmap); if (ret) { goto end; } /* Tracefile size in bytes */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_tracefile_size, attr->tracefile_size); if (ret) { goto end; } /* Count of tracefiles */ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_tracefile_count, attr->tracefile_count); if (ret) { goto end; } /* Live timer interval in usec*/ ret = mi_lttng_writer_write_element_unsigned_int(writer, config_element_live_timer_interval, attr->live_timer_interval); if (ret) { goto end; } /* Closing attributes */ ret = mi_lttng_writer_close_element(writer); if (ret) { goto end; } end: return ret; }