[lttng-dev] [babeltrace PATCH] Python: Fix some examples for Python 3

Danny Serres serres at live.ca
Thu Nov 7 15:51:39 EST 2013


New pprint_table module for outputting tables
without using print as statement

Signed-off-by: Danny Serres <danny.serres at efficios.com>

---
 bindings/python/examples/eventcount.py             |   85 +++++++++++++++++
 bindings/python/examples/events_per_cpu.py         |  100 ++++++++++++++++++++
 .../examples/output_format_modules/pprint_table.py |   58 ++++++++++++
 bindings/python/examples/python2/eventcount.py     |   85 -----------------
 bindings/python/examples/python2/events_per_cpu.py |  100 --------------------
 .../python2/output_format_modules/pprint_table.py  |   69 +++++++++-----
 .../python/examples/python2/syscalls_by_pid.py     |   85 -----------------
 bindings/python/examples/syscalls_by_pid.py        |   85 +++++++++++++++++
 8 files changed, 373 insertions(+), 294 deletions(-)
 create mode 100644 bindings/python/examples/eventcount.py
 create mode 100644 bindings/python/examples/events_per_cpu.py
 create mode 100644 bindings/python/examples/output_format_modules/__init__.py
 create mode 100644 bindings/python/examples/output_format_modules/pprint_table.py
 delete mode 100644 bindings/python/examples/python2/eventcount.py
 delete mode 100644 bindings/python/examples/python2/events_per_cpu.py
 delete mode 100644 bindings/python/examples/python2/syscalls_by_pid.py
 create mode 100644 bindings/python/examples/syscalls_by_pid.py

diff --git a/bindings/python/examples/eventcount.py b/bindings/python/examples/eventcount.py
new file mode 100644
index 0000000..c088508
--- /dev/null
+++ b/bindings/python/examples/eventcount.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python3
+# eventcount.py
+#
+# Babeltrace event count example script
+#
+# Copyright 2012 EfficiOS Inc.
+#
+# Author: Danny Serres <danny.serres at 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.
+
+# The script prints a count of specified events and
+# their related tid's in a given trace.
+# The trace needs TID context (lttng add-context -k -t tid)
+
+import sys
+from babeltrace import *
+from output_format_modules.pprint_table import pprint_table as pprint
+
+if len(sys.argv) < 3:
+	raise TypeError("Usage: python eventcount.py event1 [event2 ...] path/to/trace")
+
+ctx = Context()
+ret = ctx.add_trace(sys.argv[len(sys.argv)-1], "ctf")
+if ret is None:
+	raise IOError("Error adding trace")
+
+counts = {}
+
+# Setting iterator
+bp = IterPos(SEEK_BEGIN)
+ctf_it = ctf.Iterator(ctx, bp)
+
+# Reading events
+event = ctf_it.read_event()
+while(event is not None):
+	for event_type in sys.argv[1:len(sys.argv)-1]:
+		if event_type == event.get_name():
+
+			# Getting scope definition
+			sco = event.get_top_level_scope(ctf.scope.STREAM_EVENT_CONTEXT)
+			if sco is None:
+				print("ERROR: Cannot get definition scope for {}".format(
+					event.get_name()))
+				continue
+
+			# Getting TID
+			tid_field = event.get_field(sco, "_tid")
+			tid = tid_field.get_int64()
+
+			if ctf.field_error():
+				print("ERROR: Missing TID info for {}".format(
+					event.get_name()))
+				continue
+
+			tmp = (tid, event.get_name())
+
+			if tmp in counts:
+				counts[tmp] += 1
+			else:
+				counts[tmp] = 1
+
+	# Next event
+	ret = ctf_it.next()
+	if ret < 0:
+		break
+	event = ctf_it.read_event()
+
+del ctf_it
+
+# Appending data to table for output
+table = []
+for item in counts:
+	table.append([item[0], item[1], counts[item]])
+table = sorted(table)
+table.insert(0,["TID", "EVENT", "COUNT"])
+pprint(table, 2)
diff --git a/bindings/python/examples/events_per_cpu.py b/bindings/python/examples/events_per_cpu.py
new file mode 100644
index 0000000..fa0417c
--- /dev/null
+++ b/bindings/python/examples/events_per_cpu.py
@@ -0,0 +1,100 @@
+#!/usr/bin/env python3
+# events_per_cpu.py
+#
+# Babeltrace events per cpu example script
+#
+# Copyright 2012 EfficiOS Inc.
+#
+# Author: Danny Serres <danny.serres at 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.
+
+# The script opens a trace and prints out CPU statistics
+# for the given trace (event count per CPU, total active
+# time and % of time processing events).
+# It also outputs a .txt file showing each time interval
+# (since the beginning of the trace) in which each CPU
+# was active and the corresponding event.
+
+import sys, multiprocessing
+from output_format_modules.pprint_table import pprint_table as pprint
+from babeltrace import *
+
+if len(sys.argv) < 2:
+	raise TypeError("Usage: python events_per_cpu.py path/to/trace")
+
+# Adding trace
+ctx = Context()
+ret = ctx.add_trace(sys.argv[1], "ctf")
+if ret is None:
+	raise IOError("Error adding trace")
+
+cpu_usage = []
+nbEvents = 0
+i = 0
+while i < multiprocessing.cpu_count():
+	cpu_usage.append([])
+	i += 1
+
+# Setting iterator
+bp = IterPos(SEEK_BEGIN)
+ctf_it = ctf.Iterator(ctx, bp)
+
+# Reading events
+event = ctf_it.read_event()
+start_time = event.get_timestamp()
+
+while(event is not None):
+
+	event_name = event.get_name()
+	ts = event.get_timestamp()
+
+	# Getting cpu_id
+	scope = event.get_top_level_scope(ctf.scope.STREAM_PACKET_CONTEXT)
+	field = event.get_field(scope, "cpu_id")
+	cpu_id = field.get_uint64()
+	if ctf.field_error():
+		print("ERROR: Missing cpu_id info for {}".format(event.get_name()))
+	else:
+		cpu_usage[cpu_id].append( (int(ts), event_name) )
+		nbEvents += 1
+
+	# Next Event
+	ret = ctf_it.next()
+	if ret < 0:
+		break
+	event = ctf_it.read_event()
+
+
+# Outputting
+table = []
+output = open("events_per_cpu.txt", "wt")
+output.write("(timestamp, event)\n")
+
+for cpu in range(len(cpu_usage)):
+	# Setting table
+	event_str = str(100.0 * len(cpu_usage[cpu]) / nbEvents) + '000'
+	# % is printed with 2 decimals
+	table.append([cpu, len(cpu_usage[cpu]), event_str[0:event_str.find('.') + 3] + ' %'])
+
+	# Writing to file
+	output.write("\n\n\n----------------------\n")
+	output.write("CPU {}\n\n".format(cpu))
+	for event in cpu_usage[cpu]:
+		output.write(str(event) + '\n')
+
+# Printing table
+table.insert(0, ["CPU ID", "EVENT COUNT", "TRACE EVENT %"])
+pprint(table)
+print("Total event count: {}".format(nbEvents))
+print("Total trace time: {} ns".format(ts - start_time))
+
+output.close()
diff --git a/bindings/python/examples/output_format_modules/__init__.py b/bindings/python/examples/output_format_modules/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/bindings/python/examples/output_format_modules/pprint_table.py b/bindings/python/examples/output_format_modules/pprint_table.py
new file mode 100644
index 0000000..495a217
--- /dev/null
+++ b/bindings/python/examples/output_format_modules/pprint_table.py
@@ -0,0 +1,58 @@
+# pprint_table.py
+#
+# This module is used to pretty-print a table
+#
+# Copyright 2013 EfficiOS Inc.
+#
+# Author: Danny Serres <danny.serres at 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.
+
+import sys
+
+def pprint_table(table, nbLeft=1, out=sys.stdout):
+	"""
+	Prints a nice table of data.
+	table is the table to print.  It must be a list of lists of equal lenghts.
+	nbLeft is the number of columns aligned left.
+	out is the output stream (a file-like object).
+	Returns None.
+	"""
+
+	# Returns the largest entry in column col of the table
+	max_width = lambda tbl, col : max([len(str(line[col])) for line in tbl])
+
+	col_widths = []
+	nbColumns = len(table[0])
+
+	# For each column, get its max width
+	i = 0
+	while i < nbColumns :
+		col_widths.append(max_width(table, i))
+		i += 1
+
+	out_string = ""
+
+	for line in table:
+		# For columns aligned left
+		for i in range(nbLeft):
+			out_string += str(line[i]).ljust(col_widths[i] + 1)
+		# For other columns (aligned right)
+		for i in range(nbLeft, nbColumns):
+			out_string += str(line[i]).rjust(col_widths[i] + 2)
+
+		# Print line
+		out.write(out_string + '\n')
+
+		# Clear string
+		out_string = ""
+
+	return None
diff --git a/bindings/python/examples/python2/eventcount.py b/bindings/python/examples/python2/eventcount.py
deleted file mode 100644
index 079633c..0000000
--- a/bindings/python/examples/python2/eventcount.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python2
-# eventcount.py
-#
-# Babeltrace event count example script
-#
-# Copyright 2012 EfficiOS Inc.
-#
-# Author: Danny Serres <danny.serres at 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.
-
-# The script prints a count of specified events and
-# their related tid's in a given trace.
-# The trace needs TID context (lttng add-context -k -t tid)
-
-import sys
-from babeltrace import *
-from output_format_modules.pprint_table import pprint_table as pprint
-
-if len(sys.argv) < 3:
-	raise TypeError("Usage: python eventcount.py event1 [event2 ...] path/to/trace")
-
-ctx = Context()
-ret = ctx.add_trace(sys.argv[len(sys.argv)-1], "ctf")
-if ret is None:
-	raise IOError("Error adding trace")
-
-counts = {}
-
-# Setting iterator
-bp = IterPos(SEEK_BEGIN)
-ctf_it = ctf.Iterator(ctx, bp)
-
-# Reading events
-event = ctf_it.read_event()
-while(event is not None):
-	for event_type in sys.argv[1:len(sys.argv)-1]:
-		if event_type == event.get_name():
-
-			# Getting scope definition
-			sco = event.get_top_level_scope(ctf.scope.STREAM_EVENT_CONTEXT)
-			if sco is None:
-				print("ERROR: Cannot get definition scope for {}".format(
-					event.get_name()))
-				continue
-
-			# Getting TID
-			tid_field = event.get_field(sco, "_tid")
-			tid = tid_field.get_int64()
-
-			if ctf.field_error():
-				print("ERROR: Missing TID info for {}".format(
-					event.get_name()))
-				continue
-
-			tmp = (tid, event.get_name())
-
-			if tmp in counts:
-				counts[tmp] += 1
-			else:
-				counts[tmp] = 1
-
-	# Next event
-	ret = ctf_it.next()
-	if ret < 0:
-		break
-	event = ctf_it.read_event()
-
-del ctf_it
-
-# Appending data to table for output
-table = []
-for item in counts:
-	table.append([item[0], item[1], counts[item]])
-table = sorted(table)
-table.insert(0,["TID", "EVENT", "COUNT"])
-pprint(table, 2)
diff --git a/bindings/python/examples/python2/events_per_cpu.py b/bindings/python/examples/python2/events_per_cpu.py
deleted file mode 100644
index 6425b2d..0000000
--- a/bindings/python/examples/python2/events_per_cpu.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env python2
-# events_per_cpu.py
-#
-# Babeltrace events per cpu example script
-#
-# Copyright 2012 EfficiOS Inc.
-#
-# Author: Danny Serres <danny.serres at 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.
-
-# The script opens a trace and prints out CPU statistics
-# for the given trace (event count per CPU, total active
-# time and % of time processing events).
-# It also outputs a .txt file showing each time interval
-# (since the beginning of the trace) in which each CPU
-# was active and the corresponding event.
-
-import sys, multiprocessing
-from output_format_modules.pprint_table import pprint_table as pprint
-from babeltrace import *
-
-if len(sys.argv) < 2:
-	raise TypeError("Usage: python events_per_cpu.py path/to/trace")
-
-# Adding trace
-ctx = Context()
-ret = ctx.add_trace(sys.argv[1], "ctf")
-if ret is None:
-	raise IOError("Error adding trace")
-
-cpu_usage = []
-nbEvents = 0
-i = 0
-while i < multiprocessing.cpu_count():
-	cpu_usage.append([])
-	i += 1
-
-# Setting iterator
-bp = IterPos(SEEK_BEGIN)
-ctf_it = ctf.Iterator(ctx, bp)
-
-# Reading events
-event = ctf_it.read_event()
-start_time = event.get_timestamp()
-
-while(event is not None):
-
-	event_name = event.get_name()
-	ts = event.get_timestamp()
-
-	# Getting cpu_id
-	scope = event.get_top_level_scope(ctf.scope.STREAM_PACKET_CONTEXT)
-	field = event.get_field(scope, "cpu_id")
-	cpu_id = field.get_uint64()
-	if ctf.field_error():
-		print("ERROR: Missing cpu_id info for {}".format(event.get_name()))
-	else:
-		cpu_usage[cpu_id].append( (int(ts), event_name) )
-		nbEvents += 1
-
-	# Next Event
-	ret = ctf_it.next()
-	if ret < 0:
-		break
-	event = ctf_it.read_event()
-
-
-# Outputting
-table = []
-output = open("events_per_cpu.txt", "wt")
-output.write("(timestamp, event)\n")
-
-for cpu in range(len(cpu_usage)):
-	# Setting table
-	event_str = str(100.0 * len(cpu_usage[cpu]) / nbEvents) + '000'
-	# % is printed with 2 decimals
-	table.append([cpu, len(cpu_usage[cpu]), event_str[0:event_str.find('.') + 3] + ' %'])
-
-	# Writing to file
-	output.write("\n\n\n----------------------\n")
-	output.write("CPU {}\n\n".format(cpu))
-	for event in cpu_usage[cpu]:
-		output.write(str(event) + '\n')
-
-# Printing table
-table.insert(0, ["CPU ID", "EVENT COUNT", "TRACE EVENT %"])
-pprint(table)
-print("Total event count: {}".format(nbEvents))
-print("Total trace time: {} ns".format(ts - start_time))
-
-output.close()
diff --git a/bindings/python/examples/python2/output_format_modules/pprint_table.py b/bindings/python/examples/python2/output_format_modules/pprint_table.py
index 3a63d62..495a217 100644
--- a/bindings/python/examples/python2/output_format_modules/pprint_table.py
+++ b/bindings/python/examples/python2/output_format_modules/pprint_table.py
@@ -1,37 +1,58 @@
 # pprint_table.py
 #
 # This module is used to pretty-print a table
-# Adapted from
-# http://ginstrom.com/scribbles/2007/09/04/pretty-printing-a-table-in-python/
+#
+# Copyright 2013 EfficiOS Inc.
+#
+# Author: Danny Serres <danny.serres at 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.
 
 import sys
 
-def get_max_width(table, index):
-	"""Get the maximum width of the given column index"""
-
-	return max([len(str(row[index])) for row in table])
-
-
 def pprint_table(table, nbLeft=1, out=sys.stdout):
 	"""
-	Prints out a table of data, padded for alignment
-	@param table: The table to print. A list of lists.
-	Each row must have the same number of columns.
-	@param nbLeft: The number of columns aligned left
-	@param out: Output stream (file-like object)
+	Prints a nice table of data.
+	table is the table to print.  It must be a list of lists of equal lenghts.
+	nbLeft is the number of columns aligned left.
+	out is the output stream (a file-like object).
+	Returns None.
 	"""

-	col_paddings = []
+	# Returns the largest entry in column col of the table
+	max_width = lambda tbl, col : max([len(str(line[col])) for line in tbl])
+
+	col_widths = []
+	nbColumns = len(table[0])
 
-	for i in range(len(table[0])):
-		col_paddings.append(get_max_width(table, i))
+	# For each column, get its max width
+	i = 0
+	while i < nbColumns :
+		col_widths.append(max_width(table, i))
+		i += 1
 
-	for row in table:
-		# left cols
+	out_string = ""
+
+	for line in table:
+		# For columns aligned left
 		for i in range(nbLeft):
-			print >> out, str(row[i]).ljust(col_paddings[i] + 1),
-		# rest of the cols
-		for i in range(nbLeft, len(row)):
-			col = str(row[i]).rjust(col_paddings[i] + 2)
-			print >> out, col,
-		print >> out
+			out_string += str(line[i]).ljust(col_widths[i] + 1)
+		# For other columns (aligned right)
+		for i in range(nbLeft, nbColumns):
+			out_string += str(line[i]).rjust(col_widths[i] + 2)
+
+		# Print line
+		out.write(out_string + '\n')
+
+		# Clear string
+		out_string = ""
+
+	return None
diff --git a/bindings/python/examples/python2/syscalls_by_pid.py b/bindings/python/examples/python2/syscalls_by_pid.py
deleted file mode 100644
index cf1d581..0000000
--- a/bindings/python/examples/python2/syscalls_by_pid.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python2
-# syscall_by_pid.py
-#
-# Babeltrace syscall by pid example script
-#
-# Copyright 2012 EfficiOS Inc.
-#
-# Author: Danny Serres <danny.serres at 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.
-
-# The script checks the number of events in the trace
-# and outputs a table and a .svg histogram for the specified
-# range (microseconds) or the total trace if no range specified.
-# The graph is generated using the cairoplot module.
-
-# The script checks all syscall in the trace and prints a list
-# showing the number of systemcalls executed by each PID
-# ordered from greatest to least number of syscalls.
-# The trace needs PID context (lttng add-context -k -t pid)
-
-import sys
-from babeltrace import *
-from output_format_modules.pprint_table import pprint_table as pprint
-
-if len(sys.argv) < 2 :
-	raise TypeError("Usage: python syscalls_by_pid.py path/to/trace")
-
-ctx = Context()
-ret = ctx.add_trace(sys.argv[1], "ctf")
-if ret is None:
-	raise IOError("Error adding trace")
-
-data = {}
-
-# Setting iterator
-bp = IterPos(SEEK_BEGIN)
-ctf_it = ctf.Iterator(ctx, bp)
-
-# Reading events
-event = ctf_it.read_event()
-while event is not None:
-	if event.get_name().find("sys") >= 0:
-		# Getting scope definition
-		sco = event.get_top_level_scope(ctf.scope.STREAM_EVENT_CONTEXT)
-		if sco is None:
-			print("ERROR: Cannot get definition scope for {}".format(
-				event.get_name()))
-		else:
-			# Getting PID
-			pid_field = event.get_field(sco, "_pid")
-			pid = pid_field.get_int64()
-
-			if ctf.field_error():
-				print("ERROR: Missing PID info for sched_switch".format(
-					event.get_name()))
-			elif pid in data:
-				data[pid] += 1
-			else:
-				data[pid] = 1
-	# Next event
-	ret = ctf_it.next()
-	if ret < 0:
-		break
-	event = ctf_it.read_event()
-
-del ctf_it
-
-# Setting table for output
-table = []
-for item in data:
-	table.append([data[item], item])  # [count, pid]
-table.sort(reverse = True)	# [big count first, pid]
-for i in range(len(table)):
-	table[i].reverse()	# [pid, big count first]
-table.insert(0, ["PID", "SYSCALL COUNT"])
-pprint(table)
diff --git a/bindings/python/examples/syscalls_by_pid.py b/bindings/python/examples/syscalls_by_pid.py
new file mode 100644
index 0000000..2d16ae2
--- /dev/null
+++ b/bindings/python/examples/syscalls_by_pid.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python3
+# syscall_by_pid.py
+#
+# Babeltrace syscall by pid example script
+#
+# Copyright 2012 EfficiOS Inc.
+#
+# Author: Danny Serres <danny.serres at 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.
+
+# The script checks the number of events in the trace
+# and outputs a table and a .svg histogram for the specified
+# range (microseconds) or the total trace if no range specified.
+# The graph is generated using the cairoplot module.
+
+# The script checks all syscall in the trace and prints a list
+# showing the number of systemcalls executed by each PID
+# ordered from greatest to least number of syscalls.
+# The trace needs PID context (lttng add-context -k -t pid)
+
+import sys
+from babeltrace import *
+from output_format_modules.pprint_table import pprint_table as pprint
+
+if len(sys.argv) < 2 :
+	raise TypeError("Usage: python syscalls_by_pid.py path/to/trace")
+
+ctx = Context()
+ret = ctx.add_trace(sys.argv[1], "ctf")
+if ret is None:
+	raise IOError("Error adding trace")
+
+data = {}
+
+# Setting iterator
+bp = IterPos(SEEK_BEGIN)
+ctf_it = ctf.Iterator(ctx, bp)
+
+# Reading events
+event = ctf_it.read_event()
+while event is not None:
+	if event.get_name().find("sys") >= 0:
+		# Getting scope definition
+		sco = event.get_top_level_scope(ctf.scope.STREAM_EVENT_CONTEXT)
+		if sco is None:
+			print("ERROR: Cannot get definition scope for {}".format(
+				event.get_name()))
+		else:
+			# Getting PID
+			pid_field = event.get_field(sco, "_pid")
+			pid = pid_field.get_int64()
+
+			if ctf.field_error():
+				print("ERROR: Missing PID info for sched_switch".format(
+					event.get_name()))
+			elif pid in data:
+				data[pid] += 1
+			else:
+				data[pid] = 1
+	# Next event
+	ret = ctf_it.next()
+	if ret < 0:
+		break
+	event = ctf_it.read_event()
+
+del ctf_it
+
+# Setting table for output
+table = []
+for item in data:
+	table.append([data[item], item])  # [count, pid]
+table.sort(reverse = True)	# [big count first, pid]
+for i in range(len(table)):
+	table[i].reverse()	# [pid, big count first]
+table.insert(0, ["PID", "SYSCALL COUNT"])
+pprint(table)
-- 
1.7.9.5




More information about the lttng-dev mailing list