Babeltrace python binding
[babeltrace.git] / bindings / python / examples / example-api-test.py
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
22 import sys
23 from babeltrace import *
24
25 # Check for path arg:
26 if len(sys.argv) < 2:
27 raise TypeError("Usage: python example-api-test.py path/to/file")
28
29 # Create context and add trace:
30 ctx = Context()
31 trace_handle = ctx.add_trace(sys.argv[1], "ctf")
32 if trace_handle is None:
33 raise IOError("Error adding trace")
34
35 # Listing events
36 lst = ctf.get_event_decl_list(trace_handle, ctx)
37 print("--- Event list ---")
38 for item in lst:
39 print("event : {}".format(item.get_name()))
40 print("--- Done ---")
41
42 # Iter trace
43 bp = IterPos(SEEK_BEGIN)
44 ctf_it = ctf.Iterator(ctx,bp)
45 event = ctf_it.read_event()
46
47 while(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
77 del ctf_it
This page took 0.029874 seconds and 4 git commands to generate.