import os
from common_func.db_name_constant import DBNameConstant
from common_func.info_conf_reader import InfoConfReader
from common_func.path_manager import PathManager
from common_func.trace_view_header_constant import TraceViewHeaderConstant
from common_func.trace_view_manager import TraceViewManager
from msmodel.stars.fusion_task_model import FusionTaskModel
class FusionTaskViewer:
"""
class used to get fusion task timeline and summary data
"""
def __init__(self: any, configs: dict, params: dict = None) -> None:
self.configs = configs
self.params = params or {}
self.result_dir = configs.get('result_dir', self.params.get('result_dir', ''))
self._model = FusionTaskModel(
self.result_dir, DBNameConstant.DB_FUSION_TASK, [DBNameConstant.TABLE_FUSION_TASK]
)
@staticmethod
def get_timeline_header() -> list:
pid = InfoConfReader().get_json_pid_data()
return [
["process_name", pid, InfoConfReader().get_json_tid_data(), TraceViewHeaderConstant.PROCESS_FUSION_TASK]
]
@staticmethod
def get_trace_timeline(data_list: list) -> list:
"""
get time timeline
"""
result = []
pid = InfoConfReader().get_json_pid_data()
for data in data_list:
start_time = InfoConfReader().trans_into_local_time(data[4])
end_time = InfoConfReader().trans_into_local_time(data[5])
task_dur = float(end_time) - float(start_time)
task_name = "Fusion {}".format(data[7])
is_ccu = data[7] == 'CCU'
args = {
"STREAM ID": data[0],
"TASK ID": data[1],
"ACC ID": data[2],
"TASK TYPE": data[3],
"FUSION TASK TYPE": data[7],
}
if is_ccu:
args["MISSION ID"] = data[8]
if data[9] is not None:
args["CCU DIE ID"] = data[9]
result.append([task_name, pid, data[0], start_time, task_dur, args])
_trace = TraceViewManager.time_graph_trace(TraceViewHeaderConstant.TOP_DOWN_TIME_GRAPH_HEAD, result)
meta = TraceViewManager.metadata_event(FusionTaskViewer.get_timeline_header())
meta.extend(_trace)
return meta
def get_timeline_data(self: any) -> list:
"""
get fusion task timeline data
"""
db_path = PathManager.get_db_path(self.result_dir, DBNameConstant.DB_FUSION_TASK)
if not os.path.exists(db_path):
return []
with self._model as _model:
data_list = _model.get_timeline_data()
if not data_list:
return []
return self.get_trace_timeline(data_list)