Update python bindings for session and trace format descriptor
[lttng-tools.git] / extras / bindings / swig / python / lttng.i.in
CommitLineData
ab5be9fa
MJ
1/*
2 * Copyright (C) 2012 Danny Serres <danny.serres@efficios.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 */
7
36907cb5
DS
8%define DOCSTRING
9"LTTNG_VERSION_STR
10
11The LTTng project aims at providing highly efficient tracing tools for Linux.
12It's tracers help tracking down performance issues and debugging problems involving
13multiple concurrent processes and threads. Tracing across multiple systems is also possible."
14%enddef
15
16%module(docstring=DOCSTRING) lttng
17
18%include "typemaps.i"
bc3bdada 19%include "stdint.i"
36907cb5 20%include "pyabc.i"
d0c7c839 21%include "cstring.i"
36907cb5
DS
22%{
23#define SWIG_FILE_WITH_INIT
24#include <lttng/lttng.h>
25%}
26
6c7ee73e
JG
27%{
28#if PY_MAJOR_VERSION >= 3
29// The PyInt and PyLong types were unified as of Python 3
30// This makes the typemap code useable with both Python 2 and 3.
31#define PyInt_AsSsize_t PyLong_AsSsize_t
32#endif
f12eb9c1
SM
33
34// Avoid -Wmissing-declarations warning.
35PyObject *SWIG_init(void);
862e3908
SM
36
37// Avoid -Wmissing-prototypes warning with SWIG 3.0.10.
38#if SWIG_VERSION < 0x30012
39static size_t SWIG_strnlen(const char* s, size_t maxlen);
40#endif
6c7ee73e
JG
41%}
42
36907cb5
DS
43typedef unsigned int uint32_t;
44typedef int int32_t;
45typedef unsigned long long uint64_t;
46typedef long pid_t;
47
48
49// =============================================
50// ENUMS
51// These are directly taken from lttng.h.
52// Any change to these enums must also be
53// made here.
54// =============================================
55
56%rename("DOMAIN_KERNEL") LTTNG_DOMAIN_KERNEL;
57%rename("DOMAIN_UST") LTTNG_DOMAIN_UST;
58enum lttng_domain_type {
59 LTTNG_DOMAIN_KERNEL = 1,
60 LTTNG_DOMAIN_UST = 2,
61};
62
dd5f427a
JR
63%rename("BUFFER_PER_PID") LTTNG_BUFFER_PER_PID;
64%rename("BUFFER_PER_UID") LTTNG_BUFFER_PER_UID;
65%rename("BUFFER_GLOBAL") LTTNG_BUFFER_GLOBAL;
66enum lttng_buffer_type {
67 LTTNG_BUFFER_PER_PID,
68 LTTNG_BUFFER_PER_UID,
69 LTTNG_BUFFER_GLOBAL,
70};
71
36907cb5
DS
72%rename("EVENT_ALL") LTTNG_EVENT_ALL;
73%rename("EVENT_TRACEPOINT") LTTNG_EVENT_TRACEPOINT;
74%rename("EVENT_PROBE") LTTNG_EVENT_PROBE;
75%rename("EVENT_FUNCTION")LTTNG_EVENT_FUNCTION;
76%rename("EVENT_FUNCTION_ENTRY") LTTNG_EVENT_FUNCTION_ENTRY;
77%rename("EVENT_NOOP") LTTNG_EVENT_NOOP;
78%rename("EVENT_SYSCALL") LTTNG_EVENT_SYSCALL;
79enum lttng_event_type {
80 LTTNG_EVENT_ALL = -1,
81 LTTNG_EVENT_TRACEPOINT = 0,
82 LTTNG_EVENT_PROBE = 1,
83 LTTNG_EVENT_FUNCTION = 2,
84 LTTNG_EVENT_FUNCTION_ENTRY = 3,
85 LTTNG_EVENT_NOOP = 4,
86 LTTNG_EVENT_SYSCALL = 5,
87};
88
89%rename("EVENT_LOGLEVEL_ALL") LTTNG_EVENT_LOGLEVEL_ALL;
90%rename("EVENT_LOGLEVEL_RANGE") LTTNG_EVENT_LOGLEVEL_RANGE;
91%rename("EVENT_LOGLEVEL_SINGLE") LTTNG_EVENT_LOGLEVEL_SINGLE;
92enum lttng_loglevel_type {
93 LTTNG_EVENT_LOGLEVEL_ALL = 0,
94 LTTNG_EVENT_LOGLEVEL_RANGE = 1,
95 LTTNG_EVENT_LOGLEVEL_SINGLE = 2,
96};
97
98%rename("LOGLEVEL_EMERG") LTTNG_LOGLEVEL_EMERG;
99%rename("LOGLEVEL_ALERT") LTTNG_LOGLEVEL_ALERT;
100%rename("LOGLEVEL_CRIT") LTTNG_LOGLEVEL_CRIT;
101%rename("LOGLEVEL_ERR") LTTNG_LOGLEVEL_ERR;
102%rename("LOGLEVEL_WARNING") LTTNG_LOGLEVEL_WARNING;
103%rename("LOGLEVEL_NOTICE") LTTNG_LOGLEVEL_NOTICE;
104%rename("LOGLEVEL_INFO") LTTNG_LOGLEVEL_INFO;
105%rename("LOGLEVEL_DEBUG_SYSTEM") LTTNG_LOGLEVEL_DEBUG_SYSTEM;
106%rename("LOGLEVEL_DEBUG_PROGRAM") LTTNG_LOGLEVEL_DEBUG_PROGRAM;
107%rename("LOGLEVEL_DEBUG_PROCESS") LTTNG_LOGLEVEL_DEBUG_PROCESS;
108%rename("LOGLEVEL_DEBUG_MODULE") LTTNG_LOGLEVEL_DEBUG_MODULE;
109%rename("LOGLEVEL_DEBUG_UNIT") LTTNG_LOGLEVEL_DEBUG_UNIT;
110%rename("LOGLEVEL_DEBUG_FUNCTION") LTTNG_LOGLEVEL_DEBUG_FUNCTION;
111%rename("LOGLEVEL_DEBUG_LINE") LTTNG_LOGLEVEL_DEBUG_LINE;
112%rename("LOGLEVEL_DEBUG") LTTNG_LOGLEVEL_DEBUG;
113enum lttng_loglevel {
114 LTTNG_LOGLEVEL_EMERG = 0,
115 LTTNG_LOGLEVEL_ALERT = 1,
116 LTTNG_LOGLEVEL_CRIT = 2,
117 LTTNG_LOGLEVEL_ERR = 3,
118 LTTNG_LOGLEVEL_WARNING = 4,
119 LTTNG_LOGLEVEL_NOTICE = 5,
120 LTTNG_LOGLEVEL_INFO = 6,
121 LTTNG_LOGLEVEL_DEBUG_SYSTEM = 7,
122 LTTNG_LOGLEVEL_DEBUG_PROGRAM = 8,
123 LTTNG_LOGLEVEL_DEBUG_PROCESS = 9,
124 LTTNG_LOGLEVEL_DEBUG_MODULE = 10,
125 LTTNG_LOGLEVEL_DEBUG_UNIT = 11,
126 LTTNG_LOGLEVEL_DEBUG_FUNCTION = 12,
127 LTTNG_LOGLEVEL_DEBUG_LINE = 13,
128 LTTNG_LOGLEVEL_DEBUG = 14,
129};
130
131%rename("EVENT_SPLICE") LTTNG_EVENT_SPLICE;
132%rename("EVENT_MMAP") LTTNG_EVENT_MMAP;
133enum lttng_event_output {
134 LTTNG_EVENT_SPLICE = 0,
135 LTTNG_EVENT_MMAP = 1,
136};
137
138%rename("EVENT_CONTEXT_PID") LTTNG_EVENT_CONTEXT_PID;
139%rename("EVENT_CONTEXT_PERF_COUNTER") LTTNG_EVENT_CONTEXT_PERF_COUNTER;
140%rename("EVENT_CONTEXT_PROCNAME") LTTNG_EVENT_CONTEXT_PROCNAME;
141%rename("EVENT_CONTEXT_PRIO") LTTNG_EVENT_CONTEXT_PRIO;
142%rename("EVENT_CONTEXT_NICE") LTTNG_EVENT_CONTEXT_NICE;
143%rename("EVENT_CONTEXT_VPID") LTTNG_EVENT_CONTEXT_VPID;
144%rename("EVENT_CONTEXT_TID") LTTNG_EVENT_CONTEXT_TID;
145%rename("EVENT_CONTEXT_VTID") LTTNG_EVENT_CONTEXT_VTID;
146%rename("EVENT_CONTEXT_PPID") LTTNG_EVENT_CONTEXT_PPID;
147%rename("EVENT_CONTEXT_VPPID") LTTNG_EVENT_CONTEXT_VPPID;
148%rename("EVENT_CONTEXT_PTHREAD_ID") LTTNG_EVENT_CONTEXT_PTHREAD_ID;
a593ba5a
CB
149%rename("EVENT_CONTEXT_HOSTNAME") LTTNG_EVENT_CONTEXT_HOSTNAME;
150%rename("EVENT_CONTEXT_IP") LTTNG_EVENT_CONTEXT_IP;
151%rename("EVENT_CONTEXT_PERF_CPU_COUNTER") LTTNG_EVENT_CONTEXT_PERF_CPU_COUNTER;
152%rename("EVENT_CONTEXT_PERF_THREAD_COUNTER") LTTNG_EVENT_CONTEXT_PERF_THREAD_COUNTER;
153%rename("EVENT_CONTEXT_APP_CONTEXT") LTTNG_EVENT_CONTEXT_APP_CONTEXT;
154%rename("EVENT_CONTEXT_INTERRUPTIBLE") LTTNG_EVENT_CONTEXT_INTERRUPTIBLE;
155%rename("EVENT_CONTEXT_PREEMPTIBLE") LTTNG_EVENT_CONTEXT_PREEMPTIBLE;
156%rename("EVENT_CONTEXT_NEED_RESCHEDULE") LTTNG_EVENT_CONTEXT_NEED_RESCHEDULE;
157%rename("EVENT_CONTEXT_MIGRATABLE") LTTNG_EVENT_CONTEXT_MIGRATABLE;
36907cb5
DS
158enum lttng_event_context_type {
159 LTTNG_EVENT_CONTEXT_PID = 0,
160 LTTNG_EVENT_CONTEXT_PERF_COUNTER = 1,
161 LTTNG_EVENT_CONTEXT_PROCNAME = 2,
162 LTTNG_EVENT_CONTEXT_PRIO = 3,
163 LTTNG_EVENT_CONTEXT_NICE = 4,
164 LTTNG_EVENT_CONTEXT_VPID = 5,
165 LTTNG_EVENT_CONTEXT_TID = 6,
166 LTTNG_EVENT_CONTEXT_VTID = 7,
167 LTTNG_EVENT_CONTEXT_PPID = 8,
168 LTTNG_EVENT_CONTEXT_VPPID = 9,
169 LTTNG_EVENT_CONTEXT_PTHREAD_ID = 10,
a593ba5a
CB
170 LTTNG_EVENT_CONTEXT_HOSTNAME = 11,
171 LTTNG_EVENT_CONTEXT_IP = 12,
172 LTTNG_EVENT_CONTEXT_PERF_CPU_COUNTER = 13,
173 LTTNG_EVENT_CONTEXT_PERF_THREAD_COUNTER = 14,
174 LTTNG_EVENT_CONTEXT_APP_CONTEXT = 15,
175 LTTNG_EVENT_CONTEXT_INTERRUPTIBLE = 16,
176 LTTNG_EVENT_CONTEXT_PREEMPTIBLE = 17,
177 LTTNG_EVENT_CONTEXT_NEED_RESCHEDULE = 18,
178 LTTNG_EVENT_CONTEXT_MIGRATABLE = 19,
36907cb5
DS
179};
180
36907cb5 181
d0c7c839
JR
182%rename("SESSION_DESCRIPTOR_STATUS_INVALID") LTTNG_SESSION_DESCRIPTOR_STATUS_INVALID;
183%rename("SESSION_DESCRIPTOR_STATUS_OK") LTTNG_SESSION_DESCRIPTOR_STATUS_OK;
184%rename("SESSION_DESCRIPTOR_STATUS_UNSET") LTTNG_SESSION_DESCRIPTOR_STATUS_UNSET;
185enum lttng_session_descriptor_status {
186 /* Invalid session descriptor parameter. */
187 LTTNG_SESSION_DESCRIPTOR_STATUS_INVALID = -1,
188 LTTNG_SESSION_DESCRIPTOR_STATUS_OK = 0,
189 /* Session descriptor parameter is unset. */
190 LTTNG_SESSION_DESCRIPTOR_STATUS_UNSET = 1,
191};
192
193// Opaque objects
194%nodefaultctor lttng_trace_format_descriptor;
195%extend lttng_trace_format_descriptor {
196 ~lttng_trace_format_descriptor() {
197 lttng_trace_format_descriptor_destroy(self);
198 }
199}
200%ignore lttng_trace_format_descriptor_destroy;
201
202struct lttng_trace_format_descriptor{};
203
204%nodefaultctor lttng_session_descriptor;
205%extend lttng_session_descriptor {
206 ~lttng_session_descriptor() {
207 lttng_session_descriptor_destroy(self);
208 }
209}
210%ignore lttng_session_descriptor_destroy;
211
212struct lttng_session_descriptor{};
36907cb5
DS
213
214
215// =============================================
216// TYPEMAPS
217// =============================================
218
219//list_sessions
220%typemap(argout) struct lttng_session **sessions{
221
222 int l = PyInt_AsSsize_t($result);
223 if (l >= 0)
224 {
225 PyObject *sessions = PyList_New(0);
226 int i;
227 for(i=0; i<l; i++)
228 {
229 PyObject *tmp = PyTuple_New(4);
230 PyObject *name = PyString_FromString((*$1)[i].name);
231 PyObject *path = PyString_FromString((*$1)[i].path);
232 PyObject *enabled = PyInt_FromSize_t((*$1)[i].enabled);
36907cb5
DS
233
234 PyTuple_SetItem(tmp, 0, name);
235 PyTuple_SetItem(tmp, 1, path);
236 PyTuple_SetItem(tmp, 2, enabled);
36907cb5
DS
237 PyList_Append(sessions, tmp);
238 }
239 $result = sessions;
240 }
241}
242%typemap(in,numinputs=0) struct lttng_session **sessions (struct lttng_session *temp){
243 $1=&temp;
244}
245
246//list_domains
247%typemap(argout) struct lttng_domain **domains{
248
249 int l = PyInt_AsSsize_t($result);
250 if (l >= 0)
251 {
252 PyObject *dom = PyList_New(0);
253 int i;
254 for(i=0; i<l; i++)
255 {
dd5f427a 256 PyObject *tmp = PyTuple_New(6);
36907cb5 257 PyObject *type = PyInt_FromSize_t((*$1)[i].type);
dd5f427a 258 PyObject *buf_type = PyInt_FromSize_t((*$1)[i].buf_type);
36907cb5
DS
259 PyObject *execname = PyString_FromString((*$1)[i].attr.exec_name);
260 PyObject *pid = PyInt_FromSize_t((*$1)[i].attr.pid);
261 PyObject *padding = PyString_FromString((*$1)[i].padding);
262 PyObject *attrpadding = PyString_FromString((*$1)[i].attr.padding);
263
264 PyTuple_SetItem(tmp, 0, type);
dd5f427a
JR
265 PyTuple_SetItem(tmp, 1, buf_type);
266 PyTuple_SetItem(tmp, 2, padding);
267 PyTuple_SetItem(tmp, 3, pid);
268 PyTuple_SetItem(tmp, 4, execname);
269 PyTuple_SetItem(tmp, 5, attrpadding);
36907cb5
DS
270 PyList_Append(dom, tmp);
271 }
272 $result = dom;
273 }
274}
275%typemap(in,numinputs=0) struct lttng_domain **domains (struct lttng_domain *temp){
276 $1=&temp;
277}
278
279//list_channels
280%typemap(argout) struct lttng_channel **channels{
281
282 int l = PyInt_AsSsize_t($result);
283 if (l >= 0)
284 {
285 PyObject *chan = PyList_New(0);
286 int i;
287 for(i=0; i<l; i++)
288 {
289 PyObject *tmp = PyTuple_New(4);
290 PyObject *name = PyString_FromString((*$1)[i].name);
291 PyObject *enabled = PyInt_FromSize_t((*$1)[i].enabled);
292 PyObject *padding = PyString_FromString((*$1)[i].padding);
293
294 PyObject *attrtmp = PyTuple_New(7);
295 PyObject *overwrite = PyInt_FromLong((*$1)[i].attr.overwrite);
296 PyObject *subbuf = PyInt_FromSize_t((*$1)[i].attr.subbuf_size);
297 PyObject *num = PyInt_FromSize_t((*$1)[i].attr.num_subbuf);
298 PyObject *switchtimer = PyInt_FromSize_t((*$1)[i].attr.switch_timer_interval);
299 PyObject *readtimer = PyInt_FromSize_t((*$1)[i].attr.read_timer_interval);
300 PyObject *output = PyInt_FromSize_t((*$1)[i].attr.output);
301 PyObject *attrpad = PyString_FromString((*$1)[i].attr.padding);
302
303 PyTuple_SetItem(attrtmp, 0, overwrite);
304 PyTuple_SetItem(attrtmp, 1, subbuf);
305 PyTuple_SetItem(attrtmp, 2, num);
306 PyTuple_SetItem(attrtmp, 3, switchtimer);
307 PyTuple_SetItem(attrtmp, 4, readtimer);
308 PyTuple_SetItem(attrtmp, 5, output);
309 PyTuple_SetItem(attrtmp, 6, attrpad);
310
311 PyTuple_SetItem(tmp, 0, name);
312 PyTuple_SetItem(tmp, 1, enabled);
313 PyTuple_SetItem(tmp, 2, padding);
314 PyTuple_SetItem(tmp, 3, attrtmp);
315 PyList_Append(chan, tmp);
316 }
317 $result = chan;
318 }
319}
320%typemap(in,numinputs=0) struct lttng_channel **channels (struct lttng_channel *temp){
321 $1=&temp;
322}
323
324//list_events & list_tracepoints
325%typemap(argout) struct lttng_event **events{
326
327 int l = PyInt_AsSsize_t($result);
328 if (l >= 0)
329 {
330 PyObject *events = PyList_New(0);
331 int i;
332 for(i=0; i<l; i++)
333 {
334 PyObject *tmp = PyTuple_New(10);
335 PyObject *name = PyString_FromString((*$1)[i].name);
336 PyObject *type = PyInt_FromSize_t((*$1)[i].type);
337 PyObject *logleveltype = PyInt_FromSize_t((*$1)[i].loglevel_type);
338 PyObject *loglevel = PyInt_FromLong((*$1)[i].loglevel);
339 PyObject *enabled = PyInt_FromLong((*$1)[i].enabled);
340 PyObject *pid = PyInt_FromSize_t((*$1)[i].pid);
341 PyObject *padding = PyString_FromString((*$1)[i].padding);
342 PyObject *attrpadding = PyString_FromString((*$1)[i].attr.padding);
343
344 PyObject *probe = PyTuple_New(4);
345 PyObject *addr = PyInt_FromSize_t((*$1)[i].attr.probe.addr);
346 PyObject *offset = PyInt_FromSize_t((*$1)[i].attr.probe.offset);
347 PyObject *symbolname = PyString_FromString((*$1)[i].attr.probe.symbol_name);
348 PyObject *probepad = PyString_FromString((*$1)[i].attr.probe.padding);
349
350 PyObject *function = PyTuple_New(2);
351 PyObject *f_symbolname = PyString_FromString((*$1)[i].attr.ftrace.symbol_name);
352 PyObject *f_pad = PyString_FromString((*$1)[i].attr.ftrace.padding);
353
354 PyTuple_SetItem(function, 0, f_symbolname);
355 PyTuple_SetItem(function, 1, f_pad);
356
357 PyTuple_SetItem(probe, 0, addr);
358 PyTuple_SetItem(probe, 1, offset);
359 PyTuple_SetItem(probe, 2, symbolname);
360 PyTuple_SetItem(probe, 3, probepad);
361
362 PyTuple_SetItem(tmp, 0, name);
363 PyTuple_SetItem(tmp, 1, type);
364 PyTuple_SetItem(tmp, 2, logleveltype);
365 PyTuple_SetItem(tmp, 3, loglevel);
366 PyTuple_SetItem(tmp, 4, enabled);
367 PyTuple_SetItem(tmp, 5, pid);
368 PyTuple_SetItem(tmp, 6, padding);
369 PyTuple_SetItem(tmp, 7, probe);
370 PyTuple_SetItem(tmp, 8, function);
371 PyTuple_SetItem(tmp, 9, attrpadding);
372 PyList_Append(events, tmp);
373 }
374 $result = events;
375 }
376}
377%typemap(in,numinputs=0) struct lttng_event **events (struct lttng_event *temp){
378 $1=&temp;
379}
380
381
382
383// =============================================
384// FUNCTIONS
385// =============================================
386
387%rename("create") lttng_create_session(const char *name, const char *path);
9e52b0d8 388%rename("create_snapshot") lttng_create_session_snapshot(const char *name, const char *snapshot_url);
36907cb5
DS
389%rename("destroy") lttng_destroy_session(const char *name);
390%rename("_lttng_create_handle") lttng_create_handle(const char *session_name, struct lttng_domain *domain);
391%rename("_lttng_destroy_handle") lttng_destroy_handle(struct lttng_handle *handle);
392%rename("_lttng_list_sessions") lttng_list_sessions(struct lttng_session **sessions);
393%rename("_lttng_list_domains") lttng_list_domains(const char *session_name, struct lttng_domain **domains);
394%rename("_lttng_list_channels") lttng_list_channels(struct lttng_handle *handle,struct lttng_channel **channels);
395%rename("_lttng_list_events") lttng_list_events(struct lttng_handle *handle, const char *channel_name, struct lttng_event **events);
396%rename("_lttng_list_tracepoints") lttng_list_tracepoints(struct lttng_handle *handle, struct lttng_event **events);
397%rename("session_daemon_alive") lttng_session_daemon_alive(void);
398%rename("set_tracing_group") lttng_set_tracing_group(const char *name);
399%rename("strerror") lttng_strerror(int code);
400%rename("_lttng_register_consumer") lttng_register_consumer(struct lttng_handle *handle, const char *socket_path);
401%rename("start") lttng_start_tracing(const char *session_name);
402%rename("stop") lttng_stop_tracing(const char *session_name);
403%rename("_lttng_add_context") lttng_add_context(struct lttng_handle *handle, struct lttng_event_context *ctx, const char *event_name, const char *channel_name);
404%rename("_lttng_enable_event") lttng_enable_event(struct lttng_handle *handle, struct lttng_event *ev, const char *channel_name);
405%rename("_lttng_enable_channel") lttng_enable_channel(struct lttng_handle *handle, struct lttng_channel *chan);
406%rename("_lttng_disable_event") lttng_disable_event(struct lttng_handle *handle, const char *name, const char *channel_name);
407%rename("_lttng_disable_channel") lttng_disable_channel(struct lttng_handle *handle, const char *name);
36907cb5
DS
408%rename("channel_set_default_attr") lttng_channel_set_default_attr(struct lttng_domain *domain, struct lttng_channel_attr *attr);
409
410//Redefined functions
411struct lttng_handle *lttng_create_handle(const char *session_name,
412 struct lttng_domain *domain);
413void lttng_destroy_handle(struct lttng_handle *handle);
414int lttng_list_channels(struct lttng_handle *handle,struct lttng_channel **channels);
415int lttng_list_events(struct lttng_handle *handle,
416 const char *channel_name, struct lttng_event **events);
417int lttng_list_tracepoints(struct lttng_handle *handle, struct lttng_event **events);
418int lttng_add_context(struct lttng_handle *handle, struct lttng_event_context *ctx,
419 const char *event_name, const char *channel_name);
420int lttng_enable_event(struct lttng_handle *handle,
421 struct lttng_event *ev, const char *channel_name);
422int lttng_enable_channel(struct lttng_handle *handle, struct lttng_channel *chan);
423int lttng_disable_event(struct lttng_handle *handle,
424 const char *name, const char *channel_name);
425int lttng_disable_channel(struct lttng_handle *handle, const char *name);
36907cb5
DS
426int lttng_register_consumer(struct lttng_handle *handle, const char *socket_path);
427int lttng_list_sessions(struct lttng_session **sessions);
428int lttng_list_domains(const char *session_name, struct lttng_domain **domains);
429
430//Functions not needing redefinition
431%feature("docstring")"create(str name, str path) -> int
432
e9711845 433Create a new recording session using name and path.
9e52b0d8 434Returns 0 on success or a negative error code."
36907cb5
DS
435int lttng_create_session(const char *name, const char *path);
436
9e52b0d8
MD
437%feature("docstring")"create_snapshot(str name, str snapshot_url) -> int
438
e9711845 439Create a new recording session using name and snapshot_url in snapshot
9e52b0d8
MD
440mode (flight recorder).
441Returns 0 on success or a negative error code."
442int lttng_create_session_snapshot(const char *name, const char *path);
36907cb5
DS
443
444%feature("docstring")"destroy(str name) -> int
445
e9711845 446Tear down recording session using name.
9e52b0d8 447Returns 0 on success or a negative error code."
36907cb5
DS
448int lttng_destroy_session(const char *name);
449
450
451%feature("docstring")"session_daemon_alive() -> int
452
453Check if session daemon is alive.
454Return 1 if alive or 0 if not.
455On error returns a negative value."
456int lttng_session_daemon_alive(void);
457
458
459%feature("docstring")"set_tracing_group(str name) -> int
460
461Sets the tracing_group variable with name.
462This function allocates memory pointed to by tracing_group.
463On success, returns 0, on error, returns -1 (null name) or -ENOMEM."
464int lttng_set_tracing_group(const char *name);
465
466
467%feature("docstring")"strerror(int code) -> char
468
469Returns a human readable string describing
470the error code (a negative value)."
471const char *lttng_strerror(int code);
472
473
474%feature("docstring")"start(str session_name) -> int
475
476Start tracing for all traces of the session.
477Returns size of returned session payload data or a negative error code."
478int lttng_start_tracing(const char *session_name);
479
480
481%feature("docstring")"stop(str session_name) -> int
482
483Stop tracing for all traces of the session.
484Returns size of returned session payload data or a negative error code."
485int lttng_stop_tracing(const char *session_name);
486
487
488%feature("docstring")"channel_set_default_attr(Domain domain, ChannelAttr attr)
489
490Set default channel attributes.
491If either or both of the arguments are null, attr content is zeroe'd."
492void lttng_channel_set_default_attr(struct lttng_domain *domain, struct lttng_channel_attr *attr);
493
494
d0c7c839
JR
495%feature("docstring")"session_descriptor_create(str name)
496
497Create a session descriptor in no-output mode.
498
499The 'name' parameter can be left NULL to auto-generate a session name.
500
501Returns an lttng_session_descriptor instance on success, NULL on error."
502
503%newobject lttng_session_descriptor_create;
504struct lttng_session_descriptor * lttng_session_descriptor_create(const char *name);
505
506%feature("docstring")"session_descriptor_local_create(str name, str path)
507
508Create a session descriptor with a local output destination.
509
510The 'name' parameter can be left NULL to auto-generate a session name.
511
512The 'path' must either be an absolute path or it can be left NULL to
513use the default local output destination.
514
515Returns an lttng_session_descriptor instance on success, NULL on error."
516
517%newobject lttng_session_descriptor_local_create;
518struct lttng_session_descriptor * lttng_session_descriptor_local_create(const char *name, const char *path);
519
520%feature("docstring")"session_descriptor_network_create(str name, str control_url, str data_url)
521
522Create a session descriptor with a remote output destination.
523
524The 'name' parameter can be left NULL to auto-generate a session name.
525
526The 'control_url' and 'data_url' must conform to the URL format
527described above or can be left NULL to use the default network output.
528
529Returns an lttng_session_descriptor instance on success, NULL on error. "
530%newobject lttng_session_descriptor_network_create;
531struct lttng_session_descriptor * lttng_session_descriptor_network_create(const char *name, const char *control_url, const char *data_url);
532
533%feature("docstring")"session_descriptor_snapshot_create(str name)
534
535Create a snapshot session descriptor without a default output.
536
537The 'name' parameter can be left NULL to auto-generate a session name.
538
539Returns an lttng_session_descriptor instance on success, NULL on error."
540%newobject lttng_session_descriptor_snapshot_create;
541struct lttng_session_descriptor * lttng_session_descriptor_snapshot_create(const char *name);
542
543%feature("docstring")"session_descriptor_snapshot_local_create(str name)
544
545Create a snapshot session descriptor with a local output destination.
546
547The 'name' parameter can be left NULL to auto-generate a session name.
548
549The 'path' must either be an absolute path or it can be left NULL to
550use the default local output destination as the default snapshot output.
551
552Returns an lttng_session_descriptor instance on success, NULL on error."
553
554%newobject lttng_session_descriptor_snapshot_local_create;
555struct lttng_session_descriptor * lttng_session_descriptor_snapshot_local_create(const char *name, const char *path);
556
557%feature("docstring")"session_descriptor_snapshot_network_create(str name, str control_url, str data_url)
558
559Create a snapshot session descriptor with a remote output destination.
560
561The 'name' parameter can be left NULL to auto-generate a session name.
562
563The 'control_url' and 'data_url' must conform to the URL format
564described above or can be left NULL to use the default network output as
565the default snapshot output.
566
567Returns an lttng_session_descriptor instance on success, NULL on error."
568%newobject lttng_session_descriptor_snapshot_network_create;
569struct lttng_session_descriptor * lttng_session_descriptor_snapshot_network_create(const char *name, const char *control_url, const char *data_url);
570
571%feature("docstring")"session_descriptor_live_create(str name)
572
573Create a live session descriptor without an output.
574
575The 'name' parameter can be left NULL to auto-generate a session name.
576
577The 'live_timer_interval_us' parameter is the live timer's period, specified
578in microseconds.
579
580This parameter can't be 0. There is no default value defined for a live
581timer's period.
582
583Returns an lttng_session_descriptor instance on success, NULL on error. "
584%newobject lttng_session_descriptor_live_create;
585struct lttng_session_descriptor * lttng_session_descriptor_live_create( const char *name, unsigned long long live_timer_interval_us);
586
587%feature("docstring")"session_descriptor_live_network_create(str name, str
588%control_uri, str data_url, int live_timer_interval_us)
589
590Create a live session descriptor with a remote output destination.
591
592The 'name' parameter can be left NULL to auto-generate a session name.
593
594The 'control_url' and 'data_url' must conform to the URL format
595described above or can be left NULL to use the default network output.
596
597The 'live_timer_interval_us' parameter is the live timer's period, specified
598in microseconds.
599
600This parameter can't be 0. There is no default value defined for a live
601timer's period.
602
603Returns an lttng_session_descriptor instance on success, NULL on error."
604%newobject lttng_session_descriptor_live_network_create;
605struct lttng_session_descriptor * lttng_session_descriptor_live_network_create( const char *name, const char *control_url, const char *data_url, unsigned long long live_timer_interval_us);
606
607%delobject lttng_session_descriptor_destroy;
608void lttng_session_descriptor_destroy(struct lttng_session_descriptor *descriptor);
609
610%feature("docstring")"session_descriptor_get_name(str name, str
611/*
612 * Get a session descriptor's session name.
613 *
614 * The 'name' parameter is used as an output parameter and will point to
615 * the session descriptor's session name on success
616 * (LTTNG_SESSION_DESCRIPTOR_STATUS_OK). Its content of is left unspecified
617 * for other return codes. The pointer returned through 'name' is only
618 * guaranteed to remain valid until the next method call on the session
619 * descriptor.
620 *
621 * Returns LTTNG_SESSION_DESCRIPTOR_STATUS_OK on success,
622 * LTTNG_SESSION_DESCRIPTOR_STATUS_INVALID if 'descriptor' or 'name' are
623 * NULL, and LTTNG_SESSION_DESCRIPTOR_STATUS_UNSET if the descriptor's
624 * name parameter is unset.
625 */
626 "
627// name must not be freed
628%cstring_output_allocate(char **name,);
629enum lttng_session_descriptor_status lttng_session_descriptor_get_session_name( const struct lttng_session_descriptor *descriptor, const char **name);
630
631enum lttng_session_descriptor_status lttng_session_descriptor_set_trace_format_descriptor(struct lttng_session_descriptor *session_descriptor, const struct lttng_trace_format_descriptor *trace_format_descriptor);
632
633%newobject lttng_trace_format_ctf_1_descriptor_create;
634struct lttng_trace_format_descriptor *lttng_trace_format_ctf_1_descriptor_create(void);
635
636%newobject lttng_trace_format_ctf_2_descriptor_create;
637struct lttng_trace_format_descriptor *lttng_trace_format_ctf_2_descriptor_create(void);
638
639%delobject lttng_trace_format_descriptor_destroy;
640void lttng_trace_format_descriptor_destroy(struct lttng_trace_format_descriptor *descriptor);
641
642enum lttng_error_code lttng_create_session_ext(struct lttng_session_descriptor *session_descriptor);
643
644
36907cb5
DS
645// =============================================
646// Python redefinition of some functions
647// (List and Handle-related)
648// =============================================
649
650%feature("docstring")""
651%pythoncode %{
652
653def list_sessions():
654 """
655 list_sessions() -> dict
656
657 Ask the session daemon for all available sessions.
658 Returns a dict of Session instances, the key is the name;
659 on error, returns a negative value.
660 """
661
662 ses_list = _lttng_list_sessions()
663 if type(ses_list) is int:
664 return ses_list
665
666 sessions = {}
667
668 for ses_elements in ses_list:
669 ses = Session()
670 ses.name = ses_elements[0]
671 ses.path = ses_elements[1]
672 ses.enabled = ses_elements[2]
673 ses.padding = ses_elements[3]
674
675 sessions[ses.name] = ses
676
677 return sessions
678
679
680def list_domains(session_name):
681 """
682 list_domains(str session_name) -> list
683
684 Ask the session daemon for all available domains of a session.
685 Returns a list of Domain instances;
686 on error, returns a negative value.
687 """
688
689 dom_list = _lttng_list_domains(session_name)
690 if type(dom_list) is int:
691 return dom_list
692
693 domains = []
694
695 for dom_elements in dom_list:
696 dom = Domain()
697 dom.type = dom_elements[0]
dd5f427a
JR
698 dom.buf_type = dom_elements[1]
699 dom.paddinf = dom_elements[2]
700 dom.attr.pid = dom_elements[3]
701 dom.attr.exec_name = dom_elements[4]
702 dom.attr.padding = dom_elements[5]
36907cb5
DS
703
704 domains.append(dom)
705
706 return domains
707
708
709def list_channels(handle):
710 """
711 list_channels(Handle handle) -> dict
712
713 Ask the session daemon for all available channels of a session.
714 Returns a dict of Channel instances, the key is the name;
715 on error, returns a negative value.
716 """
717
718 try:
719 chan_list = _lttng_list_channels(handle._h)
720 except AttributeError:
721 raise TypeError("in method 'list_channels', argument 1 must be a Handle instance")
722
723 if type(chan_list) is int:
724 return chan_list
725
726 channels = {}
727
728 for channel_elements in chan_list:
729 chan = Channel()
730 chan.name = channel_elements[0]
731 chan.enabled = channel_elements[1]
732 chan.padding = channel_elements[2]
733 chan.attr.overwrite = channel_elements[3][0]
734 chan.attr.subbuf_size = channel_elements[3][1]
735 chan.attr.num_subbuf = channel_elements[3][2]
736 chan.attr.switch_timer_interval = channel_elements[3][3]
737 chan.attr.read_timer_interval = channel_elements[3][4]
738 chan.attr.output = channel_elements[3][5]
739 chan.attr.padding = channel_elements[3][6]
740
741 channels[chan.name] = chan
742
743 return channels
744
745
746def list_events(handle, channel_name):
747 """
748 list_events(Handle handle, str channel_name) -> dict
749
750 Ask the session daemon for all available events of a session channel.
751 Returns a dict of Event instances, the key is the name;
752 on error, returns a negative value.
753 """
754
755 try:
756 ev_list = _lttng_list_events(handle._h, channel_name)
757 except AttributeError:
758 raise TypeError("in method 'list_events', argument 1 must be a Handle instance")
759
760 if type(ev_list) is int:
761 return ev_list
762
763 events = {}
764
765 for ev_elements in ev_list:
766 ev = Event()
767 ev.name = ev_elements[0]
768 ev.type = ev_elements[1]
769 ev.loglevel_type = ev_elements[2]
770 ev.loglevel = ev_elements[3]
771 ev.enabled = ev_elements[4]
772 ev.pid = ev_elements[5]
773 ev.attr.padding = ev_elements[6]
774 ev.attr.probe.addr = ev_elements[7][0]
775 ev.attr.probe.offset = ev_elements[7][1]
776 ev.attr.probe.symbol_name = ev_elements[7][2]
777 ev.attr.probe.padding = ev_elements[7][3]
778 ev.attr.ftrace.symbol_name = ev_elements[8][0]
779 ev.attr.ftrace.padding = ev_elements[8][1]
780 ev.attr.padding = ev_elements[9]
781
782 events[ev.name] = ev
783
784 return events
785
786
787def list_tracepoints(handle):
788 """
789 list_tracepoints(Handle handle) -> dict
790
791 Returns a dict of Event instances, the key is the name;
792 on error, returns a negative value.
793 """
794
795 try:
796 ev_list = _lttng_list_tracepoints(handle._h)
797 except AttributeError:
798 raise TypeError("in method 'list_tracepoints', argument 1 must be a Handle instance")
799
800 if type(ev_list) is int:
801 return ev_list
802
803 events = {}
804
805 for ev_elements in ev_list:
806 ev = Event()
807 ev.name = ev_elements[0]
808 ev.type = ev_elements[1]
809 ev.loglevel_type = ev_elements[2]
810 ev.loglevel = ev_elements[3]
811 ev.enabled = ev_elements[4]
812 ev.pid = ev_elements[5]
813 ev.attr.padding = ev_elements[6]
814 ev.attr.probe.addr = ev_elements[7][0]
815 ev.attr.probe.offset = ev_elements[7][1]
816 ev.attr.probe.symbol_name = ev_elements[7][2]
817 ev.attr.probe.padding = ev_elements[7][3]
818 ev.attr.ftrace.symbol_name = ev_elements[8][0]
819 ev.attr.ftrace.padding = ev_elements[8][1]
820 ev.attr.padding = ev_elements[9]
821
822 events[ev.name] = ev
823
824 return events
825
826
827def register_consumer(handle, socket_path):
828 """
829 register_consumer(Handle handle, str socket_path) -> int
830
831 Register an outside consumer.
832 Returns size of returned session payload data or a negative error code.
833 """
834
835 try:
836 return _lttng_register_consumer(handle._h, socket_path)
837 except AttributeError:
838 raise TypeError("in method 'register_consumer', argument 1 must be a Handle instance")
839
840
841def add_context(handle, event_context, event_name, channel_name):
842 """
843 add_context(Handle handle, EventContext ctx,
844 str event_name, str channel_name) -> int
845
846 Add context to event and/or channel.
847 If event_name is None, the context is applied to all events of the channel.
848 If channel_name is None, a lookup of the event's channel is done.
849 If both are None, the context is applied to all events of all channels.
850 Returns the size of the returned payload data or a negative error code.
851 """
852
853 try:
854 return _lttng_add_context(handle._h, event_context, event_name, channel_name)
855 except AttributeError:
856 raise TypeError("in method 'add_context', argument 1 must be a Handle instance")
857
858
859def enable_event(handle, event, channel_name):
860 """
861 enable_event(Handle handle, Event event,
862 str channel_name) -> int
863
864 Enable event(s) for a channel.
865 If no event name is specified, all events are enabled.
866 If no channel name is specified, the default 'channel0' is used.
867 Returns size of returned session payload data or a negative error code.
868 """
869
870 try:
871 return _lttng_enable_event(handle._h, event, channel_name)
872 except AttributeError:
873 raise TypeError("in method 'enable_event', argument 1 must be a Handle instance")
874
875
876def enable_channel(handle, channel):
877 """
878 enable_channel(Handle handle, Channel channel -> int
879
880 Enable channel per domain
881 Returns size of returned session payload data or a negative error code.
882 """
883
884 try:
885 return _lttng_enable_channel(handle._h, channel)
886 except AttributeError:
887 raise TypeError("in method 'enable_channel', argument 1 must be a Handle instance")
888
889
890def disable_event(handle, name, channel_name):
891 """
892 disable_event(Handle handle, str name, str channel_name) -> int
893
894 Disable event(s) of a channel and domain.
895 If no event name is specified, all events are disabled.
896 If no channel name is specified, the default 'channel0' is used.
897 Returns size of returned session payload data or a negative error code
898 """
899
900 try:
901 return _lttng_disable_event(handle._h, name, channel_name)
902 except AttributeError:
903 raise TypeError("in method 'disable_event', argument 1 must be a Handle instance")
904
905
906def disable_channel(handle, name):
907 """
908 disable_channel(Handle handle, str name) -> int
909
910 All tracing will be stopped for registered events of the channel.
911 Returns size of returned session payload data or a negative error code.
912 """
913
914 try:
915 return _lttng_disable_channel(handle._h, name)
916 except AttributeError:
917 raise TypeError("in method 'disable_channel', argument 1 must be a Handle instance")
36907cb5
DS
918%}
919
920
921// =============================================
922// Handle class
923// Used to prevent freeing unallocated memory
924// =============================================
925
926%feature("docstring")""
927%feature("autodoc", "1");
928
929%pythoncode %{
930class Handle:
9c2fd06d 931 """
36907cb5
DS
932 Manages a handle.
933 Takes two arguments: (str session_name, Domain domain)
934 """
935
936 __frozen = False
937
938 def __init__(self, session_name, domain):
939 if type(session_name) is not str:
940 raise TypeError("in method '__init__', argument 2 of type 'str'")
941 if type(domain) is not Domain and domain is not None:
942 raise TypeError("in method '__init__', argument 3 of type 'lttng.Domain'")
943
944 self._sname = session_name
945 if domain is None:
946 self._domtype = None
947 else:
948 self._domtype = domain.type
949 self._h = _lttng_create_handle(session_name, domain)
950 self.__frozen = True
951
952 def __del__(self):
953 _lttng_destroy_handle(self._h)
954
955 def __repr__(self):
956 if self._domtype == 1:
957 domstr = "DOMAIN_KERNEL"
958 elif self._domtype == 2:
959 domstr = "DOMAIN_UST"
960 else:
961 domstr = self._domtype
962
963 return "lttng.Handle; session('{}'), domain.type({})".format(
964 self._sname, domstr)
965
966 def __setattr__(self, attr, val):
967 if self.__frozen:
968 raise NotImplementedError("cannot modify attributes")
969 else:
970 self.__dict__[attr] = val
971%}
972
973
974// =============================================
975// STRUCTURES
976// These are directly taken from lttng.h.
977// Any change to these structures must also be
978// made here.
979// =============================================
980
981%rename("Domain") lttng_domain;
982%rename("EventContext") lttng_event_context;
983%rename("Event") lttng_event;
36907cb5
DS
984%rename("ChannelAttr") lttng_channel_attr;
985%rename("Channel") lttng_channel;
986%rename("Session") lttng_session;
987
988struct lttng_domain{
989 enum lttng_domain_type type;
dd5f427a 990 enum lttng_buffer_type buf_type;
36907cb5
DS
991 char padding[LTTNG_DOMAIN_PADDING1];
992
993 union {
994 pid_t pid;
995 char exec_name[NAME_MAX];
996 char padding[LTTNG_DOMAIN_PADDING2];
997 } attr;
998
999 %extend {
1000 char *__repr__() {
1001 static char temp[256];
dd5f427a
JR
1002 static char domain_type[25];
1003 static char buffer_type[25];
36907cb5
DS
1004 switch ( $self->type ) {
1005 case 1:
dd5f427a 1006 sprintf(domain_type, "type(DOMAIN_KERNEL)");
36907cb5
DS
1007 break;
1008 case 2:
dd5f427a 1009 sprintf(domain_type, "type(DOMAIN_UST)");
36907cb5
DS
1010 break;
1011 default:
dd5f427a 1012 sprintf(domain_type, "type(%i)", $self->type);
36907cb5
DS
1013 break;
1014 }
dd5f427a
JR
1015
1016 switch ( $self->buf_type ) {
1017 case LTTNG_BUFFER_PER_UID:
1018 sprintf(buffer_type, "buf_type(BUFFER_PER_UID)");
1019 break;
1020 case LTTNG_BUFFER_PER_PID:
1021 sprintf(buffer_type, "buf_type(BUFFER_PER_PID)");
1022 break;
1023 case LTTNG_BUFFER_GLOBAL:
1024 sprintf(buffer_type, "buf_type(BUFFER_GLOBAL)");
1025 break;
1026 default:
1027 sprintf(buffer_type, "buf_type(%i)", $self->buf_type);
1028 break;
1029 }
1030
1031 sprintf(temp, "lttng.Domain; %s, %s",
1032 domain_type,
1033 buffer_type
1034 );
36907cb5
DS
1035 return &temp[0];
1036 }
1037 }
1038};
1039
1040struct lttng_event_context {
1041 enum lttng_event_context_type ctx;
1042 char padding[LTTNG_EVENT_CONTEXT_PADDING1];
1043
1044 union {
1045 struct lttng_event_perf_counter_ctx perf_counter;
1046 char padding[LTTNG_EVENT_CONTEXT_PADDING2];
1047 } u;
1048
1049 %extend {
1050 char *__repr__() {
1051 static char temp[256];
1052 switch ( $self->ctx ) {
1053 case 0:
1054 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PID)");
1055 break;
1056 case 1:
1057 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PERF_COUNTER)");
1058 break;
1059 case 2:
1060 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PROCNAME)");
1061 break;
1062 case 3:
1063 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PRIO)");
1064 break;
1065 case 4:
1066 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_NICE)");
1067 break;
1068 case 5:
1069 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_VPID)");
1070 break;
1071 case 6:
1072 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_TID)");
1073 break;
1074 case 7:
1075 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_VTID)");
1076 break;
1077 case 8:
1078 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PPID)");
1079 break;
1080 case 9:
1081 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_VPPID)");
1082 break;
1083 case 10:
1084 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PTHREAD_ID)");
1085 break;
a593ba5a
CB
1086 case 11:
1087 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_HOSTNAME)");
1088 break;
1089 case 12:
1090 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_IP)");
1091 break;
1092 case 13:
1093 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PERF_CPU_COUNTER)");
1094 break;
1095 case 14:
1096 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PERF_THREAD_COUNTER)");
1097 break;
1098 case 15:
1099 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_APP_CONTEXT)");
1100 break;
1101 case 16:
1102 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_INTERRUPTIBLE)");
1103 break;
1104 case 17:
1105 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_PREEMPTIBLE)");
1106 break;
1107 case 18:
1108 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_NEED_RESCHEDULE)");
1109 break;
1110 case 19:
1111 sprintf(temp, "lttng.EventContext; ctx(EVENT_CONTEXT_MIGRATABLE)");
1112 break;
36907cb5
DS
1113 default:
1114 sprintf(temp, "lttng.EventContext; type(%i)", $self->ctx);
1115 break;
1116 }
1117 return &temp[0];
1118 }
1119 }
1120};
1121
b6648478
JG
1122struct lttng_event_probe_attr {
1123 uint64_t addr;
1124 uint64_t offset;
1125 char symbol_name[LTTNG_SYMBOL_NAME_LEN];
1126 char padding[LTTNG_EVENT_PROBE_PADDING1];
1127};
36907cb5 1128
b6648478
JG
1129struct lttng_event_function_attr {
1130 char symbol_name[LTTNG_SYMBOL_NAME_LEN];
1131 char padding[LTTNG_EVENT_FUNCTION_PADDING1];
1132};
36907cb5 1133
b6648478
JG
1134struct lttng_event {
1135 enum lttng_event_type type;
1136 char name[LTTNG_SYMBOL_NAME_LEN];
36907cb5 1137
b6648478
JG
1138 enum lttng_loglevel_type loglevel_type;
1139 int loglevel;
1140
1141 int32_t enabled;
1142 pid_t pid;
1143
1144 char padding[LTTNG_EVENT_PADDING1];
1145
1146 union {
1147 struct lttng_event_probe_attr probe;
1148 struct lttng_event_function_attr ftrace;
1149
1150 char padding[LTTNG_EVENT_PADDING2];
1151 } attr;
1152
1153 %extend {
1154 char *__repr__() {
1155 static char temp[512];
1156 char evtype[50];
1157 char logtype[50];
1158
1159 switch ( $self->type ) {
1160 case -1:
1161 sprintf(evtype, "EVENT_ALL");
1162 break;
1163 case 0:
1164 sprintf(evtype, "EVENT_TRACEPOINT");
1165 break;
1166 case 1:
1167 sprintf(evtype, "EVENT_PROBE");
1168 break;
1169 case 2:
1170 sprintf(evtype, "EVENT_FUNCTION");
1171 break;
1172 case 3:
1173 sprintf(evtype, "EVENT_FUNCTION_ENTRY");
1174 break;
1175 case 4:
1176 sprintf(evtype, "EVENT_NOOP");
1177 break;
1178 case 5:
1179 sprintf(evtype, "EVENT_SYSCALL");
1180 break;
1181 default:
1182 sprintf(evtype, "%i", $self->type);
1183 break;
1184 }
1185
1186 switch ( $self->loglevel_type ) {
1187 case 0:
1188 sprintf(logtype, "EVENT_LOGLEVEL_ALL");
1189 break;
1190 case 1:
1191 sprintf(logtype, "EVENT_LOGLEVEL_RANGE");
1192 break;
1193 case 2:
1194 sprintf(logtype, "EVENT_LOGLEVEL_SINGLE");
1195 break;
1196 default:
1197 sprintf(logtype, "%i", $self->loglevel_type);
1198 break;
1199 }
1200
1201 sprintf(temp, "lttng.Event; name('%s'), type(%s), "
1202 "loglevel_type(%s), loglevel(%i), "
1203 "enabled(%s), pid(%i)",
1204 $self->name, evtype, logtype, $self->loglevel,
1205 $self->enabled ? "True" : "False", $self->pid);
1206 return &temp[0];
36907cb5
DS
1207 }
1208 }
b6648478
JG
1209};
1210
b6648478
JG
1211struct lttng_channel_attr {
1212 int overwrite;
1213 uint64_t subbuf_size;
1214 uint64_t num_subbuf;
1215 unsigned int switch_timer_interval;
1216 unsigned int read_timer_interval;
1217 enum lttng_event_output output;
1218
1219 char padding[LTTNG_CHANNEL_ATTR_PADDING1];
1220
1221 %extend {
1222 char *__repr__() {
1223 static char temp[256];
1224 char evout[25];
1225
1226 switch ( $self->output ) {
1227 case 0:
1228 sprintf(evout, "EVENT_SPLICE");
1229 break;
1230 case 1:
1231 sprintf(evout, "EVENT_MMAP");
1232 break;
1233 default:
1234 sprintf(evout, "%i", $self->output);
1235 break;
1236 }
bc3bdada
JG
1237 sprintf(temp, "lttng.ChannelAttr; overwrite(%i), subbuf_size(%"PRIu64"), "
1238 "num_subbuf(%"PRIu64"), switch_timer_interval(%u), "
b6648478
JG
1239 "read_timer_interval(%u), output(%s)",
1240 $self->overwrite, $self->subbuf_size, $self->num_subbuf,
1241 $self->switch_timer_interval, $self->read_timer_interval,
1242 evout);
1243 return &temp[0];
1244 }
dcac8046 1245 }
b6648478
JG
1246};
1247
1248struct lttng_channel {
1249 char name[LTTNG_SYMBOL_NAME_LEN];
1250 uint32_t enabled;
1251 struct lttng_channel_attr attr;
1252 char padding[LTTNG_CHANNEL_PADDING1];
36907cb5 1253
b6648478
JG
1254 %extend {
1255 char *__repr__() {
1256 static char temp[512];
25986cde 1257 snprintf(temp, sizeof(temp), "lttng.Channel; name('%s'), enabled(%s)",
b6648478
JG
1258 $self->name, $self->enabled ? "True" : "False");
1259 return &temp[0];
1260 }
36907cb5 1261 }
b6648478 1262};
dcac8046 1263
b6648478
JG
1264struct lttng_session {
1265 char name[NAME_MAX];
1266 char path[PATH_MAX];
1267 uint32_t enabled;
b178f53e
JG
1268 uint32_t snapshot_mode;
1269 unsigned int live_timer_interval;
1270 union {
1271 char padding[LTTNG_SESSION_PADDING1];
1272 void *ptr;
1273 } extended;
b6648478
JG
1274
1275 %extend {
1276 char *__repr__() {
25986cde
JG
1277 static char temp[PATH_MAX + NAME_MAX + 512];
1278 snprintf(temp, sizeof(temp), "lttng.Session; name('%s'), path('%s'), enabled(%s)",
b6648478
JG
1279 $self->name, $self->path,
1280 $self->enabled ? "True" : "False");
1281 return &temp[0];
1282 }
1283 }
1284};
This page took 0.135426 seconds and 5 git commands to generate.