#define _LGPL_SOURCE
#include <common/config/session-config.h>
+#include <common/defaults.h>
#include <lttng/snapshot-internal.h>
+#include <lttng/channel.h>
#include "mi-lttng.h"
#include <assert.h>
/* Machine interface namespace URI */
const char * const mi_lttng_xmlns = "xmlns";
-const char * const mi_lttng_ns_uri = "http://lttng.org/xml/ns/lttng-mi";
const char * const mi_lttng_xmlns_xsi = "xmlns:xsi";
const char * const mi_lttng_w3_schema_uri = "http://www.w3.org/2001/XMLSchema-instance";
const char * const mi_lttng_schema_location = "xsi:schemaLocation";
const char * const mi_lttng_schema_location_uri =
- "http://lttng.org/xml/ns/lttng-mi" " "
+ DEFAULT_LTTNG_MI_NAMESPACE " "
"http://lttng.org/xml/schemas/lttng-mi/" XSTR(MI_SCHEMA_MAJOR_VERSION)
"/lttng-mi-" XSTR(MI_SCHEMA_MAJOR_VERSION) "."
XSTR(MI_SCHEMA_MINOR_VERSION) ".xsd";
}
ret = config_writer_write_attribute(writer->writer,
- mi_lttng_xmlns, mi_lttng_ns_uri);
+ mi_lttng_xmlns, DEFAULT_LTTNG_MI_NAMESPACE);
if (ret) {
goto end;
}
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;
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;
+ }
+
/* Opening Attributes */
ret = mi_lttng_writer_open_element(writer, config_element_attributes);
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) {
return ret;
}
+static int write_event_exclusions(struct mi_writer *writer,
+ struct lttng_event *event)
+{
+ int i;
+ int ret;
+ int exclusion_count;
+
+ /* Open event exclusions */
+ ret = mi_lttng_writer_open_element(writer, config_element_exclusions);
+ if (ret) {
+ goto end;
+ }
+
+ exclusion_count = lttng_event_get_exclusion_name_count(event);
+ if (exclusion_count < 0) {
+ ret = exclusion_count;
+ goto end;
+ }
+
+ for (i = 0; i < exclusion_count; i++) {
+ const char *name;
+
+ ret = lttng_event_get_exclusion_name(event, i, &name);
+ if (ret) {
+ /* Close exclusions */
+ mi_lttng_writer_close_element(writer);
+ goto end;
+ }
+
+ ret = mi_lttng_writer_write_element_string(writer,
+ config_element_exclusion, name);
+ if (ret) {
+ /* Close exclusions */
+ mi_lttng_writer_close_element(writer);
+ goto end;
+ }
+ }
+
+ /* Close exclusions */
+ ret = mi_lttng_writer_close_element(writer);
+
+end:
+ return ret;
+}
+
LTTNG_HIDDEN
int mi_lttng_event_tracepoint_loglevel(struct mi_writer *writer,
struct lttng_event *event, enum lttng_domain_type domain)
goto end;
}
- /* event exclusion filter */
- ret = mi_lttng_writer_write_element_bool(writer,
- config_element_exclusion, event->exclusion);
- if (ret) {
- goto end;
- }
+ /* Event exclusions */
+ ret = write_event_exclusions(writer, event);
end:
return ret;
struct lttng_event *event)
{
/* event exclusion filter */
- return mi_lttng_writer_write_element_bool(writer,
- config_element_exclusion, event->exclusion);
+ return write_event_exclusions(writer, event);
}
LTTNG_HIDDEN