in smdebug/profiler/analysis/notebook_utils/timeline_charts.py [0:0]
def update_data(self, current_timestamp):
# get all events from last to current timestamp
events = self.system_metrics_reader.get_events(
self.last_timestamp_system_metrics, current_timestamp
)
print(
f"Found {len(events)} new system metrics events from timestamp_in_us:{self.last_timestamp_system_metrics} to timestamp_in_us:{current_timestamp}"
)
if len(events) > 0:
new_system_metrics = self.preprocess_system_metrics(events, system_metrics={})
# append numpy arrays to previous numpy arrays
for dimension in self.filtered_dimensions:
for event in self.filtered_events:
if event in self.system_metrics[dimension]:
new_system_metrics[dimension][event] = new_system_metrics[dimension][event][
new_system_metrics[dimension][event][:, 0].argsort()
]
self.system_metrics[dimension][event] = np.vstack(
[
self.system_metrics[dimension][event],
new_system_metrics[dimension][event],
]
)
self.system_metrics[dimension][event] = self.system_metrics[dimension][
event
][self.system_metrics[dimension][event][:, 0].argsort()]
max_width = 0
cpu_util = None
for key in self.system_metrics.keys():
if key.startswith("CPUUtilization"):
width = self.system_metrics[key]["total"].shape[0]
if cpu_util is None or width >= max_width:
max_width = width
cpu_util = self.system_metrics[key]
self.width = max_width - 1
if self.width > 1000:
min_value = cpu_util["total"][-1000, 0]
else:
min_value = cpu_util["total"][-self.width, 0]
max_value = cpu_util["total"][-1, 0]
for figure in self.figures:
figure.x_range.start = int(min_value)
figure.x_range.end = int(max_value)
# update line charts with system metrics
for dimension in self.filtered_dimensions:
for event in self.filtered_events:
if event in self.system_metrics[dimension]:
values = np.array(self.system_metrics[dimension][event])
self.sources[dimension][event].data["x"] = values[:, 0]
self.sources[dimension][event].data["y"] = values[:, 1]
self.last_timestamp_system_metrics = current_timestamp
push_notebook()