def update_data()

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()