Make UST-related context fields optional

This commit is contained in:
Christophe Bedard 2019-07-30 11:19:42 +02:00
parent 6a6e2c6eed
commit 5e5bbe1564

View file

@ -25,18 +25,44 @@ from tracetools_read.utils import get_field
class EventMetadata(): class EventMetadata():
"""Container for event metadata.""" """Container for event metadata."""
def __init__(self, event_name, pid, tid, timestamp, procname, cpu_id) -> None: def __init__(
self,
event_name,
timestamp,
cpu_id,
procname = None,
pid = None,
tid = None,
) -> None:
"""
Constructor.
Parameters with a default value of `None` are not mandatory,
since they are not always present.
"""
self._event_name = event_name self._event_name = event_name
self._timestamp = timestamp
self._cpu_id = cpu_id
self._procname = procname
self._pid = pid self._pid = pid
self._tid = tid self._tid = tid
self._timestamp = timestamp
self._procname = procname
self._cpu_id = cpu_id
@property @property
def event_name(self): def event_name(self):
return self._event_name return self._event_name
@property
def timestamp(self):
return self._timestamp
@property
def cpu_id(self):
return self._cpu_id
@property
def procname(self):
return self._procname
@property @property
def pid(self): def pid(self):
return self._pid return self._pid
@ -45,18 +71,6 @@ class EventMetadata():
def tid(self): def tid(self):
return self._tid return self._tid
@property
def timestamp(self):
return self._timestamp
@property
def procname(self):
return self._procname
@property
def cpu_id(self):
return self._cpu_id
class EventHandler(): class EventHandler():
"""Base event handling class.""" """Base event handling class."""
@ -83,24 +97,29 @@ class EventHandler():
event_name = get_event_name(event) event_name = get_event_name(event)
handler_function = self._handler_map.get(event_name, None) handler_function = self._handler_map.get(event_name, None)
if handler_function is not None: if handler_function is not None:
timestamp = get_field(event, '_timestamp')
cpu_id = get_field(event, 'cpu_id')
# TODO perhaps validate fields depending on the type of event,
# i.e. all UST events should have procname, (v)pid and (v)tid
# context info, since analyses might not work otherwise
procname = get_field(event, 'procname', raise_if_not_found=False)
pid = get_field( pid = get_field(
event, event,
'vpid', 'vpid',
default=get_field( default=get_field(
event, event,
'pid', 'pid',
raise_if_not_found=False)) raise_if_not_found=False),
raise_if_not_found=False)
tid = get_field( tid = get_field(
event, event,
'vtid', 'vtid',
default=get_field( default=get_field(
event, event,
'tid', 'tid',
raise_if_not_found=False)) raise_if_not_found=False),
timestamp = get_field(event, '_timestamp') raise_if_not_found=False)
procname = get_field(event, 'procname') metadata = EventMetadata(event_name, timestamp, cpu_id, procname, pid, tid)
cpu_id = get_field(event, 'cpu_id')
metadata = EventMetadata(event_name, pid, tid, timestamp, procname, cpu_id)
handler_function(event, metadata) handler_function(event, metadata)
@classmethod @classmethod