X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=extras%2Fbindings%2Fswig%2Fpython%2Flttng.i.in;h=b6b6f960eba7720955611e3adbeceaa3679195e2;hp=c947ce3dd499d45b4dfe37546536b9e2a9f112a4;hb=refs%2Fheads%2Fsow-2019-0002-rev1;hpb=9c2fd06dc38a3bc69911b6a4b0ba37cc00918882 diff --git a/extras/bindings/swig/python/lttng.i.in b/extras/bindings/swig/python/lttng.i.in index c947ce3dd..b6b6f960e 100644 --- a/extras/bindings/swig/python/lttng.i.in +++ b/extras/bindings/swig/python/lttng.i.in @@ -1,3 +1,10 @@ +/* + * Copyright (C) 2012 Danny Serres + * + * SPDX-License-Identifier: GPL-2.0-only + * + */ + %define DOCSTRING "LTTNG_VERSION_STR @@ -9,6 +16,7 @@ multiple concurrent processes and threads. Tracing across multiple systems is al %module(docstring=DOCSTRING) lttng %include "typemaps.i" +%include "stdint.i" %include "pyabc.i" %{ #define SWIG_FILE_WITH_INIT @@ -21,6 +29,9 @@ multiple concurrent processes and threads. Tracing across multiple systems is al // 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); %} typedef unsigned int uint32_t; @@ -43,6 +54,15 @@ enum lttng_domain_type { 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; @@ -120,6 +140,15 @@ enum lttng_event_output { %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, @@ -132,12 +161,17 @@ enum lttng_event_context_type { 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, -}; @@ -159,12 +193,10 @@ enum lttng_calibrate_type { 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; @@ -184,18 +216,20 @@ enum lttng_calibrate_type { int i; for(i=0; i 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); @@ -469,10 +508,11 @@ def list_domains(session_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) @@ -688,20 +728,6 @@ def disable_channel(handle, name): 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") %} @@ -768,13 +794,13 @@ class Handle: %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 { @@ -786,17 +812,39 @@ struct lttng_domain{ %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(temp, "lttng.Domain; type(%i)", $self->type); + 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(buffer_type, "buf_type(%i)", $self->buf_type); + break; + } + + sprintf(temp, "lttng.Domain; %s, %s", + domain_type, + buffer_type + ); return &temp[0]; } } @@ -848,6 +896,33 @@ struct lttng_event_context { 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; @@ -946,26 +1021,6 @@ struct lttng_event { } }; -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; @@ -992,8 +1047,8 @@ struct lttng_channel_attr { 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, @@ -1012,7 +1067,7 @@ struct lttng_channel { %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]; } @@ -1023,12 +1078,17 @@ struct lttng_session { 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];