--- /dev/null
+# 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.")