Add option to simply give an EventHandler when creating a DataModelUtil

This commit is contained in:
Christophe Bedard 2020-01-01 12:48:12 -05:00
parent 3dcf1cd303
commit 2fee0ced26
5 changed files with 30 additions and 19 deletions

View file

@ -21,6 +21,7 @@ from typing import Union
from pandas import DataFrame
from ..data_model import DataModel
from ..processor import EventHandler
class DataModelUtil():
@ -32,17 +33,17 @@ class DataModelUtil():
def __init__(
self,
data_model: DataModel,
data_object: Union[DataModel, EventHandler, None],
) -> None:
"""
Create a DataModelUtil.
:param data_model: the data model
:param data_object: the data model or the event handler which has a data model
"""
self.__data = data_model
self.__data = data_object.data if isinstance(data_object, EventHandler) else data_object
@property
def data(self) -> DataModel:
def data(self) -> Union[DataModel, None]:
return self.__data
@staticmethod

View file

@ -14,10 +14,13 @@
"""Module for CPU time data model utils."""
from typing import Union
from pandas import DataFrame
from . import DataModelUtil
from ..data_model.cpu_time import CpuTimeDataModel
from ..processor.cpu_time import CpuTimeHandler
class CpuTimeDataModelUtil(DataModelUtil):
@ -25,14 +28,14 @@ class CpuTimeDataModelUtil(DataModelUtil):
def __init__(
self,
data_model: CpuTimeDataModel,
data_object: Union[CpuTimeDataModel, CpuTimeHandler],
) -> None:
"""
Create a CpuTimeDataModelUtil.
:param data_model: the data model object to use
:param data_object: the data model or the event handler which has a data model
"""
super().__init__(data_model)
super().__init__(data_object)
def get_time_per_thread(self) -> DataFrame:
"""Get a DataFrame of total duration for each thread."""

View file

@ -16,11 +16,14 @@
from collections import defaultdict
from typing import Dict
from typing import Union
from pandas import DataFrame
from . import DataModelUtil
from ..data_model.memory_usage import MemoryUsageDataModel
from ..processor.memory_usage import KernelMemoryUsageHandler
from ..processor.memory_usage import UserspaceMemoryUsageHandler
class MemoryUsageDataModelUtil(DataModelUtil):
@ -29,16 +32,16 @@ class MemoryUsageDataModelUtil(DataModelUtil):
def __init__(
self,
*,
userspace: MemoryUsageDataModel = None,
kernel: MemoryUsageDataModel = None,
userspace: Union[MemoryUsageDataModel, UserspaceMemoryUsageHandler, None] = None,
kernel: Union[MemoryUsageDataModel, KernelMemoryUsageHandler, None] = None,
) -> None:
"""
Create a MemoryUsageDataModelUtil.
At least one non-`None` `MemoryUsageDataModel` must be given.
:param userspace: the userspace data model object to use
:param kernel: the kernel data model object to use
:param userspace: the userspace data model object to use or the event handler
:param kernel: the kernel data model object to use or the event handler
"""
if userspace is None and kernel is None:
raise RuntimeError('must provide at least one (userspace or kernel) data model!')
@ -46,8 +49,10 @@ class MemoryUsageDataModelUtil(DataModelUtil):
# Not giving any model to the base class; we'll own them ourselves
super().__init__(None)
self.data_ust = userspace
self.data_kernel = kernel
self.data_ust = userspace.data \
if isinstance(userspace, UserspaceMemoryUsageHandler) else userspace
self.data_kernel = kernel.data \
if isinstance(kernel, KernelMemoryUsageHandler) else kernel
@staticmethod
def format_size(size: int, precision: int = 2):

View file

@ -24,6 +24,7 @@ from pandas import DataFrame
from . import DataModelUtil
from ..data_model.profile import ProfileDataModel
from ..processor.profile import ProfileHandler
class ProfileDataModelUtil(DataModelUtil):
@ -31,14 +32,14 @@ class ProfileDataModelUtil(DataModelUtil):
def __init__(
self,
data_model: ProfileDataModel,
data_object: Union[ProfileDataModel, ProfileHandler],
) -> None:
"""
Create a ProfileDataModelUtil.
:param data_model: the data model object to use
:param data_object: the data model or the event handler which has a data model
"""
super().__init__(data_model)
super().__init__(data_object)
def with_tid(
self,

View file

@ -24,6 +24,7 @@ from pandas import DataFrame
from . import DataModelUtil
from ..data_model.ros2 import Ros2DataModel
from ..processor.ros2 import Ros2Handler
class Ros2DataModelUtil(DataModelUtil):
@ -31,14 +32,14 @@ class Ros2DataModelUtil(DataModelUtil):
def __init__(
self,
data_model: Ros2DataModel,
data_object: Union[Ros2DataModel, Ros2Handler],
) -> None:
"""
Create a Ros2DataModelUtil.
:param data_model: the data model object to use
:param data_object: the data model or the event handler which has a data model
"""
super().__init__(data_model)
super().__init__(data_object)
def _prettify(
self,