Babeltrace python binding
[babeltrace.git] / bindings / python / examples / babeltrace_and_lttng.py
diff --git a/bindings/python/examples/babeltrace_and_lttng.py b/bindings/python/examples/babeltrace_and_lttng.py
new file mode 100644 (file)
index 0000000..cb44796
--- /dev/null
@@ -0,0 +1,126 @@
+# babeltrace_and_lttng.py
+# 
+# Babeltrace and LTTng example script
+# 
+# Copyright 2012 EfficiOS Inc.
+# 
+# Author: Danny Serres <danny.serres@efficios.com>
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+
+# This script uses both lttng-tools and babeltrace
+# python modules.  It creates a session, enables
+# events, starts tracing for 2 seconds, stops tracing,
+# destroys the session and outputs the trace in the
+# specified output file.
+#
+# WARNING: will destroy any existing trace having
+#          the same name as ses_name
+
+
+# ------------------------------------------------------
+ses_name =     "babeltrace-lttng-test"
+trace_path =   "/lttng-traces/babeltrace-lttng-trace/"
+out_file =     "babeltrace-lttng-trace-text-output.txt"
+# ------------------------------------------------------
+
+
+import time
+try:
+       import babeltrace, lttng
+except ImportError:
+       raise ImportError(      "both babeltrace and lttng-tools "
+                               "python modules must be installed" )
+
+
+# Errors to raise if something goes wrong
+class LTTngError(Exception):
+       pass
+class BabeltraceError(Exception):
+       pass
+
+
+# LTTNG-TOOLS
+
+# Making sure session does not already exist
+lttng.destroy(ses_name)
+
+# Creating a new session and handle
+ret = lttng.create(ses_name,trace_path)
+if ret < 0:
+       raise LTTngError(lttng.strerror(ret))
+
+han = None
+han = lttng.Handle(ses_name, lttng.Domain())
+if han is None:
+       raise LTTngError("Handle not created")
+
+
+# Enabling all events
+ret = lttng.enable_event(han, lttng.Event(), None)
+if ret < 0:
+       raise LTTngError(lttng.strerror(ret))
+
+
+# Start, wait, stop
+ret = lttng.start(ses_name)
+if ret < 0:
+       raise LTTngError(lttng.strerror(ret))
+print("Tracing...")
+time.sleep(2)
+print("Stopped.")
+ret = lttng.stop(ses_name)
+if ret < 0:
+       raise LTTngError(lttng.strerror(ret))
+
+
+# Destroying tracing session
+ret = lttng.destroy(ses_name)
+if ret < 0:
+       raise LTTngError(lttng.strerror(ret))
+
+
+# BABELTRACE
+
+# Create context and add trace:
+ctx = babeltrace.Context()
+ret = ctx.add_trace(trace_path + "/kernel", "ctf")
+if ret is None:
+       raise BabeltraceError("Error adding trace")
+
+# Iterator setup
+bp = babeltrace.IterPos(babeltrace.SEEK_BEGIN)
+ctf_it = babeltrace.ctf.Iterator(ctx,bp)
+
+# Reading events from trace
+# and outputting timestamps and event names
+# in out_file
+print("Writing trace file...")
+output = open(out_file, "wt")
+
+event = ctf_it.read_event()
+while(event is not None):
+       output.write("TS: {}, {} : {}\n".format(event.get_timestamp(),
+               event.get_cycles(), event.get_name()))
+
+       # Next event
+       ret = ctf_it.next()
+       if ret < 0:
+               break
+       event = ctf_it.read_event()
+
+# Closing file
+output.close()
+
+# Destroying dynamic elements
+del ctf_it, han
+print("Done.")
This page took 0.023554 seconds and 4 git commands to generate.