[lttng-dev] [PATCH babeltrace] Use a unique name to get a field's value

Xiaona Han xiaonahappy13 at 163.com
Fri Jul 26 06:32:36 EDT 2013


Use get_value to get a field's value. Currently it does not support
compound types. Also it does not support floating point, since getting
a float's value is not implemented in babeltrace now.

Signed-off-by: Xiaona Han <xiaonahappy13 at 163.com>
---
 bindings/python/babeltrace.i.in              |   19 ++++++++++++++
 bindings/python/examples/example-api-test.py |   10 ++++---
 bindings/python/examples/sched_switch.py     |   34 ++++++++++++-------------
 3 files changed, 41 insertions(+), 22 deletions(-)

diff --git a/bindings/python/babeltrace.i.in b/bindings/python/babeltrace.i.in
index d307fdb..98eea9b 100644
--- a/bindings/python/babeltrace.i.in
+++ b/bindings/python/babeltrace.i.in
@@ -979,6 +979,25 @@ class ctf:
 			"""
 			return _bt_ctf_get_string(self._d)
 
+		def get_value(self):
+			"""
+			Return the value associated with the field according to its type.
+			Return None on error.
+			"""
+			id = self.field_type()
+			if id == ctf.type_id.STRING:
+				return self.get_str()
+			if id == ctf.type_id.ARRAY:
+				return self.get_char_array()
+			if id == ctf.type_id.INTEGER:
+				if self.get_int_signedness == 0:
+					return self.get_uint64()
+				else:
+					return self.get_int64()
+			if id == ctf.type_id.ENUM:
+				return self.get_enum_str()
+			return None
+
 		def get_scope(self):
 			"""Return the scope of a field or None on error."""
 			return self._s
diff --git a/bindings/python/examples/example-api-test.py b/bindings/python/examples/example-api-test.py
index 66754ba..d6b48ff 100644
--- a/bindings/python/examples/example-api-test.py
+++ b/bindings/python/examples/example-api-test.py
@@ -54,16 +54,18 @@ while(event is not None):
 		if prev_field is None:
 			print("ERROR: Missing prev_comm context info")
 		else:
-			prev_comm = prev_field[0].get_char_array()
-			print("sched_switch prev_comm: {}".format(prev_comm))
+			prev_comm = prev_field[0].get_value()
+			if prev_comm is not None:
+				print("sched_switch prev_comm: {}".format(prev_comm))
 
 	if event.get_name() == "exit_syscall":
 		ret_field = event.get_field("ret")
 		if ret_field is None:
 			print("ERROR: Unable to extract ret")
 		else:
-			ret_code = ret_field[0].get_int64()
-			print("exit_syscall ret: {}".format(ret_code))
+			ret_code = ret_field[0].get_value()
+			if ret_code is not None:
+				print("exit_syscall ret: {}".format(ret_code))
 
 	ret = ctf_it.next()
 	if ret < 0:
diff --git a/bindings/python/examples/sched_switch.py b/bindings/python/examples/sched_switch.py
index 6196e48..9ab2b10 100644
--- a/bindings/python/examples/sched_switch.py
+++ b/bindings/python/examples/sched_switch.py
@@ -58,12 +58,10 @@ while event is not None:
 
 			# Getting PID
 			pid_field = event.get_field_with_scope(sco, "pid")
-			pid = pid_field.get_int64()
-
-			if ctf.field_error():
+			if pid_field is None:
 				print("ERROR: Missing PID info for sched_switch")
 				break # Next event
-
+			pid = pid_field.get_value()
 			if usePID and (pid != long(sys.argv[1])):
 				break # Next event
 
@@ -71,45 +69,45 @@ while event is not None:
 
 			# prev_comm
 			field = event.get_field_with_scope(sco, "prev_comm")
-			prev_comm = field.get_char_array()
-			if ctf.field_error():
+			if field is None:
 				print("ERROR: Missing prev_comm context info")
+			prev_comm = field.get_value()
 
 			# prev_tid
 			field = event.get_field_with_scope(sco, "prev_tid")
-			prev_tid = field.get_int64()
-			if ctf.field_error():
+			if field is None:
 				print("ERROR: Missing prev_tid context info")
+			prev_tid = field.get_value()
 
 			# prev_prio
 			field = event.get_field_with_scope(sco, "prev_prio")
-			prev_prio = field.get_int64()
-			if ctf.field_error():
+			if field is None:
 				print("ERROR: Missing prev_prio context info")
+			prev_prio = field.get_value()
 
 			# prev_state
 			field = event.get_field_with_scope(sco, "prev_state")
-			prev_state = field.get_int64()
-			if ctf.field_error():
+			if field is None:
 				print("ERROR: Missing prev_state context info")
+			prev_state = field.get_value()
 
 			# next_comm
 			field = event.get_field_with_scope(sco, "next_comm")
-			next_comm = field.get_char_array()
-			if ctf.field_error():
+			if field is None:
 				print("ERROR: Missing next_comm context info")
+			next_comm = field.get_value()
 
 			# next_tid
 			field = event.get_field_with_scope(sco, "next_tid")
-			next_tid = field.get_int64()
-			if ctf.field_error():
+			if field is None:
 				print("ERROR: Missing next_tid context info")
+			next_tid = field.get_value()
 
 			# next_prio
 			field = event.get_field_with_scope(sco, "next_prio")
-			next_prio = field.get_int64()
-			if ctf.field_error():
+			if field is None:
 				print("ERROR: Missing next_prio context info")
+			next_prio = field.get_value()
 
 			# Output
 			print("sched_switch, pid = {}, TS = {}, prev_comm = {},\n\t"
-- 
1.7.1




More information about the lttng-dev mailing list