+/*
+ * Copyright (C) 2012 Danny Serres <danny.serres@efficios.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ */
+
%define DOCSTRING
"LTTNG_VERSION_STR
%module(docstring=DOCSTRING) lttng
%include "typemaps.i"
+%include "stdint.i"
%include "pyabc.i"
%{
#define SWIG_FILE_WITH_INIT
// This makes the typemap code useable with both Python 2 and 3.
#define PyInt_AsSsize_t PyLong_AsSsize_t
#endif
+
+// Avoid -Wmissing-declarations warning.
+PyObject *SWIG_init(void);
+
+// Avoid -Wmissing-prototypes warning with SWIG 3.0.10.
+#if SWIG_VERSION < 0x30012
+static size_t SWIG_strnlen(const char* s, size_t maxlen);
+#endif
%}
typedef unsigned int uint32_t;
LTTNG_DOMAIN_UST = 2,
};
+%rename("BUFFER_PER_PID") LTTNG_BUFFER_PER_PID;
+%rename("BUFFER_PER_UID") LTTNG_BUFFER_PER_UID;
+%rename("BUFFER_GLOBAL") LTTNG_BUFFER_GLOBAL;
+enum lttng_buffer_type {
+ LTTNG_BUFFER_PER_PID,
+ LTTNG_BUFFER_PER_UID,
+ LTTNG_BUFFER_GLOBAL,
+};
+
%rename("EVENT_ALL") LTTNG_EVENT_ALL;
%rename("EVENT_TRACEPOINT") LTTNG_EVENT_TRACEPOINT;
%rename("EVENT_PROBE") LTTNG_EVENT_PROBE;
%rename("EVENT_CONTEXT_PPID") LTTNG_EVENT_CONTEXT_PPID;
%rename("EVENT_CONTEXT_VPPID") LTTNG_EVENT_CONTEXT_VPPID;
%rename("EVENT_CONTEXT_PTHREAD_ID") LTTNG_EVENT_CONTEXT_PTHREAD_ID;
+%rename("EVENT_CONTEXT_HOSTNAME") LTTNG_EVENT_CONTEXT_HOSTNAME;
+%rename("EVENT_CONTEXT_IP") LTTNG_EVENT_CONTEXT_IP;
+%rename("EVENT_CONTEXT_PERF_CPU_COUNTER") LTTNG_EVENT_CONTEXT_PERF_CPU_COUNTER;
+%rename("EVENT_CONTEXT_PERF_THREAD_COUNTER") LTTNG_EVENT_CONTEXT_PERF_THREAD_COUNTER;
+%rename("EVENT_CONTEXT_APP_CONTEXT") LTTNG_EVENT_CONTEXT_APP_CONTEXT;
+%rename("EVENT_CONTEXT_INTERRUPTIBLE") LTTNG_EVENT_CONTEXT_INTERRUPTIBLE;
+%rename("EVENT_CONTEXT_PREEMPTIBLE") LTTNG_EVENT_CONTEXT_PREEMPTIBLE;
+%rename("EVENT_CONTEXT_NEED_RESCHEDULE") LTTNG_EVENT_CONTEXT_NEED_RESCHEDULE;
+%rename("EVENT_CONTEXT_MIGRATABLE") LTTNG_EVENT_CONTEXT_MIGRATABLE;
enum lttng_event_context_type {
LTTNG_EVENT_CONTEXT_PID = 0,
LTTNG_EVENT_CONTEXT_PERF_COUNTER = 1,
LTTNG_EVENT_CONTEXT_PPID = 8,
LTTNG_EVENT_CONTEXT_VPPID = 9,
LTTNG_EVENT_CONTEXT_PTHREAD_ID = 10,
+ LTTNG_EVENT_CONTEXT_HOSTNAME = 11,
+ LTTNG_EVENT_CONTEXT_IP = 12,
+ LTTNG_EVENT_CONTEXT_PERF_CPU_COUNTER = 13,
+ LTTNG_EVENT_CONTEXT_PERF_THREAD_COUNTER = 14,
+ LTTNG_EVENT_CONTEXT_APP_CONTEXT = 15,
+ LTTNG_EVENT_CONTEXT_INTERRUPTIBLE = 16,
+ LTTNG_EVENT_CONTEXT_PREEMPTIBLE = 17,
+ LTTNG_EVENT_CONTEXT_NEED_RESCHEDULE = 18,
+ LTTNG_EVENT_CONTEXT_MIGRATABLE = 19,
};
-%rename("CALIBRATE_FUNCTION") LTTNG_CALIBRATE_FUNCTION;
-enum lttng_calibrate_type {
- LTTNG_CALIBRATE_FUNCTION = 0,
-};
PyObject *name = PyString_FromString((*$1)[i].name);
PyObject *path = PyString_FromString((*$1)[i].path);
PyObject *enabled = PyInt_FromSize_t((*$1)[i].enabled);
- PyObject *padding = PyString_FromString((*$1)[i].padding);
PyTuple_SetItem(tmp, 0, name);
PyTuple_SetItem(tmp, 1, path);
PyTuple_SetItem(tmp, 2, enabled);
- PyTuple_SetItem(tmp, 3, padding);
PyList_Append(sessions, tmp);
}
$result = sessions;
int i;
for(i=0; i<l; i++)
{
- PyObject *tmp = PyTuple_New(5);
+ PyObject *tmp = PyTuple_New(6);
PyObject *type = PyInt_FromSize_t((*$1)[i].type);
+ PyObject *buf_type = PyInt_FromSize_t((*$1)[i].buf_type);
PyObject *execname = PyString_FromString((*$1)[i].attr.exec_name);
PyObject *pid = PyInt_FromSize_t((*$1)[i].attr.pid);
PyObject *padding = PyString_FromString((*$1)[i].padding);
PyObject *attrpadding = PyString_FromString((*$1)[i].attr.padding);
PyTuple_SetItem(tmp, 0, type);
- PyTuple_SetItem(tmp, 1, padding);
- PyTuple_SetItem(tmp, 2, pid);
- PyTuple_SetItem(tmp, 3, execname);
- PyTuple_SetItem(tmp, 4, attrpadding);
+ PyTuple_SetItem(tmp, 1, buf_type);
+ PyTuple_SetItem(tmp, 2, padding);
+ PyTuple_SetItem(tmp, 3, pid);
+ PyTuple_SetItem(tmp, 4, execname);
+ PyTuple_SetItem(tmp, 5, attrpadding);
PyList_Append(dom, tmp);
}
$result = dom;
// =============================================
%rename("create") lttng_create_session(const char *name, const char *path);
+%rename("create_snapshot") lttng_create_session_snapshot(const char *name, const char *snapshot_url);
%rename("destroy") lttng_destroy_session(const char *name);
%rename("_lttng_create_handle") lttng_create_handle(const char *session_name, struct lttng_domain *domain);
%rename("_lttng_destroy_handle") lttng_destroy_handle(struct lttng_handle *handle);
%rename("_lttng_enable_channel") lttng_enable_channel(struct lttng_handle *handle, struct lttng_channel *chan);
%rename("_lttng_disable_event") lttng_disable_event(struct lttng_handle *handle, const char *name, const char *channel_name);
%rename("_lttng_disable_channel") lttng_disable_channel(struct lttng_handle *handle, const char *name);
-%rename("_lttng_calibrate") lttng_calibrate(struct lttng_handle *handle, struct lttng_calibrate *calibrate);
%rename("channel_set_default_attr") lttng_channel_set_default_attr(struct lttng_domain *domain, struct lttng_channel_attr *attr);
//Redefined functions
int lttng_disable_event(struct lttng_handle *handle,
const char *name, const char *channel_name);
int lttng_disable_channel(struct lttng_handle *handle, const char *name);
-int lttng_calibrate(struct lttng_handle *handle, struct lttng_calibrate *calibrate);
int lttng_register_consumer(struct lttng_handle *handle, const char *socket_path);
int lttng_list_sessions(struct lttng_session **sessions);
int lttng_list_domains(const char *session_name, struct lttng_domain **domains);
%feature("docstring")"create(str name, str path) -> int
Create a new tracing session using name and path.
-Returns size of returned session payload data or a negative error code."
+Returns 0 on success or a negative error code."
int lttng_create_session(const char *name, const char *path);
+%feature("docstring")"create_snapshot(str name, str snapshot_url) -> int
+
+Create a new tracing session using name and snapshot_url in snapshot
+mode (flight recorder).
+Returns 0 on success or a negative error code."
+int lttng_create_session_snapshot(const char *name, const char *path);
%feature("docstring")"destroy(str name) -> int
Tear down tracing session using name.
-Returns size of returned session payload data or a negative error code."
+Returns 0 on success or a negative error code."
int lttng_destroy_session(const char *name);
for dom_elements in dom_list:
dom = Domain()
dom.type = dom_elements[0]
- dom.paddinf = dom_elements[1]
- dom.attr.pid = dom_elements[2]
- dom.attr.exec_name = dom_elements[3]
- dom.attr.padding = dom_elements[4]
+ dom.buf_type = dom_elements[1]
+ dom.paddinf = dom_elements[2]
+ dom.attr.pid = dom_elements[3]
+ dom.attr.exec_name = dom_elements[4]
+ dom.attr.padding = dom_elements[5]
domains.append(dom)
return _lttng_disable_channel(handle._h, name)
except AttributeError:
raise TypeError("in method 'disable_channel', argument 1 must be a Handle instance")
-
-
-def calibrate(handle, calibrate):
- """
- calibrate(Handle handle, Calibrate calibrate) -> int
-
- Quantify LTTng overhead.
- Returns size of returned session payload data or a negative error code.
- """
-
- try:
- return _lttng_calibrate(handle._h, calibrate)
- except AttributeError:
- raise TypeError("in method 'calibrate', argument 1 must be a Handle instance")
%}
%rename("Domain") lttng_domain;
%rename("EventContext") lttng_event_context;
%rename("Event") lttng_event;
-%rename("Calibrate") lttng_calibrate;
%rename("ChannelAttr") lttng_channel_attr;
%rename("Channel") lttng_channel;
%rename("Session") lttng_session;
struct lttng_domain{
enum lttng_domain_type type;
+ enum lttng_buffer_type buf_type;
char padding[LTTNG_DOMAIN_PADDING1];
union {
%extend {
char *__repr__() {
static char temp[256];
+ static char domain_type[25];
+ static char buffer_type[25];
switch ( $self->type ) {
case 1:
- sprintf(temp, "lttng.Domain; type(DOMAIN_KERNEL)");
+ sprintf(domain_type, "type(DOMAIN_KERNEL)");
break;
case 2:
- sprintf(temp, "lttng.Domain; type(DOMAIN_UST)");
+ sprintf(domain_type, "type(DOMAIN_UST)");
+ break;
+ default:
+ sprintf(domain_type, "type(%i)", $self->type);
+ break;
+ }
+
+ switch ( $self->buf_type ) {
+ case LTTNG_BUFFER_PER_UID:
+ sprintf(buffer_type, "buf_type(BUFFER_PER_UID)");
+ break;
+ case LTTNG_BUFFER_PER_PID:
+ sprintf(buffer_type, "buf_type(BUFFER_PER_PID)");
+ break;
+ case LTTNG_BUFFER_GLOBAL:
+ sprintf(buffer_type, "buf_type(BUFFER_GLOBAL)");
break;
default:
- sprintf(temp, "lttng.Domain; type(%i)", $self->type);
+ sprintf(buffer_type, "buf_type(%i)", $self->buf_type);
break;
}
+
+ sprintf(temp, "lttng.Domain; %s, %s",
+ domain_type,
+ buffer_type
+ );
return &temp[0];
}
}
case 10:
sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PTHREAD_ID)");
break;
+ case 11:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_HOSTNAME)");
+ break;
+ case 12:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_IP)");
+ break;
+ case 13:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PERF_CPU_COUNTER)");
+ break;
+ case 14:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PERF_THREAD_COUNTER)");
+ break;
+ case 15:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_APP_CONTEXT)");
+ break;
+ case 16:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_INTERRUPTIBLE)");
+ break;
+ case 17:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PREEMPTIBLE)");
+ break;
+ case 18:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_NEED_RESCHEDULE)");
+ break;
+ case 19:
+ sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_MIGRATABLE)");
+ break;
default:
sprintf(temp, "lttng.EventContext; type(%i)", $self->ctx);
break;
}
};
-struct lttng_calibrate {
- enum lttng_calibrate_type type;
- char padding[LTTNG_CALIBRATE_PADDING1];
-
- %extend {
- char *__repr__() {
- static char temp[256];
- switch ( $self->type ) {
- case 0:
- sprintf(temp, "lttng.Calibrate; type(CALIBRATE_FUNCTION)");
- break;
- default:
- sprintf(temp, "lttng.Calibrate; type(%i)", $self->type);
- break;
- }
- return &temp[0];
- }
- }
-};
-
struct lttng_channel_attr {
int overwrite;
uint64_t subbuf_size;
sprintf(evout, "%i", $self->output);
break;
}
- sprintf(temp, "lttng.ChannelAttr; overwrite(%i), subbuf_size(%lu), "
- "num_subbuf(%lu), switch_timer_interval(%u), "
+ sprintf(temp, "lttng.ChannelAttr; overwrite(%i), subbuf_size(%"PRIu64"), "
+ "num_subbuf(%"PRIu64"), switch_timer_interval(%u), "
"read_timer_interval(%u), output(%s)",
$self->overwrite, $self->subbuf_size, $self->num_subbuf,
$self->switch_timer_interval, $self->read_timer_interval,
%extend {
char *__repr__() {
static char temp[512];
- sprintf(temp, "lttng.Channel; name('%s'), enabled(%s)",
+ snprintf(temp, sizeof(temp), "lttng.Channel; name('%s'), enabled(%s)",
$self->name, $self->enabled ? "True" : "False");
return &temp[0];
}
char name[NAME_MAX];
char path[PATH_MAX];
uint32_t enabled;
- char padding[LTTNG_SESSION_PADDING1];
+ uint32_t snapshot_mode;
+ unsigned int live_timer_interval;
+ union {
+ char padding[LTTNG_SESSION_PADDING1];
+ void *ptr;
+ } extended;
%extend {
char *__repr__() {
- static char temp[512];
- sprintf(temp, "lttng.Session; name('%s'), path('%s'), enabled(%s)",
+ static char temp[PATH_MAX + NAME_MAX + 512];
+ snprintf(temp, sizeof(temp), "lttng.Session; name('%s'), path('%s'), enabled(%s)",
$self->name, $self->path,
$self->enabled ? "True" : "False");
return &temp[0];