Babeltrace python binding
[babeltrace.git] / bindings / python / examples / example-api-test.py
CommitLineData
24a3136a
DS
1# example_api_test.py
2#
3# Babeltrace example script based on the Babeltrace API test script
4#
5# Copyright 2012 EfficiOS Inc.
6#
7# Author: Danny Serres <danny.serres@efficios.com>
8#
9# Permission is hereby granted, free of charge, to any person obtaining a copy
10# of this software and associated documentation files (the "Software"), to deal
11# in the Software without restriction, including without limitation the rights
12# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13# copies of the Software, and to permit persons to whom the Software is
14# furnished to do so, subject to the following conditions:
15#
16# The above copyright notice and this permission notice shall be included in
17# all copies or substantial portions of the Software.
18
19# This example uses the babeltrace python module
20# to partially test the api.
21
22import sys
23from babeltrace import *
24
25# Check for path arg:
26if len(sys.argv) < 2:
27 raise TypeError("Usage: python example-api-test.py path/to/file")
28
29# Create context and add trace:
30ctx = Context()
31trace_handle = ctx.add_trace(sys.argv[1], "ctf")
32if trace_handle is None:
33 raise IOError("Error adding trace")
34
35# Listing events
36lst = ctf.get_event_decl_list(trace_handle, ctx)
37print("--- Event list ---")
38for item in lst:
39 print("event : {}".format(item.get_name()))
40print("--- Done ---")
41
42# Iter trace
43bp = IterPos(SEEK_BEGIN)
44ctf_it = ctf.Iterator(ctx,bp)
45event = ctf_it.read_event()
46
47while(event is not None):
48 print("TS: {}, {} : {}".format(event.get_timestamp(),
49 event.get_cycles(), event.get_name()))
50
51 if event.get_name() == "sched_switch":
52 sco = event.get_top_level_scope(ctf.scope.EVENT_FIELDS)
53 prev_field = event.get_field(sco, "_prev_comm")
54 prev_comm = prev_field.get_char_array()
55
56 if ctf.field_error():
57 print("ERROR: Missing prev_comm context info")
58 else:
59 print("sched_switch prev_comm: {}".format(prev_comm))
60
61 if event.get_name() == "exit_syscall":
62 sco = event.get_top_level_scope(ctf.scope.EVENT_FIELDS)
63 ret_field = event.get_field(sco, "_ret")
64 ret_code = ret_field.get_int64()
65
66 if ctf.field_error():
67 print("ERROR: Unable to extract ret")
68 else:
69 print("exit_syscall ret: {}".format(ret_code))
70
71 ret = ctf_it.next()
72 if ret < 0:
73 break
74 else:
75 event = ctf_it.read_event()
76
77del ctf_it
This page took 0.024965 seconds and 4 git commands to generate.