From 016e051db6848f68e3de1f5a9ab26c759d3e8524 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 18 Apr 2023 16:43:46 +0200 Subject: [PATCH] Add timestamp to pipeline runs (#91599) * Add timestamp to pipeline runs * Include the timestamp in the list --- .../components/assist_pipeline/pipeline.py | 17 ++++++++++++++--- .../components/assist_pipeline/websocket_api.py | 12 ++++++++++-- .../assist_pipeline/test_websocket.py | 2 +- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/assist_pipeline/pipeline.py b/homeassistant/components/assist_pipeline/pipeline.py index 85bd92563db..30cf52ea69c 100644 --- a/homeassistant/components/assist_pipeline/pipeline.py +++ b/homeassistant/components/assist_pipeline/pipeline.py @@ -191,7 +191,7 @@ class PipelineRun: pipeline_data.pipeline_runs[self.pipeline.id] = LimitedSizeDict( size_limit=STORED_PIPELINE_RUNS ) - pipeline_data.pipeline_runs[self.pipeline.id][self.id] = [] + pipeline_data.pipeline_runs[self.pipeline.id][self.id] = PipelineRunDebug() @callback def process_event(self, event: PipelineEvent) -> None: @@ -201,7 +201,7 @@ class PipelineRun: if self.id not in pipeline_data.pipeline_runs[self.pipeline.id]: # This run has been evicted from the logged pipeline runs already return - pipeline_data.pipeline_runs[self.pipeline.id][self.id].append(event) + pipeline_data.pipeline_runs[self.pipeline.id][self.id].events.append(event) def start(self) -> None: """Emit run start event.""" @@ -717,10 +717,21 @@ class PipelineStorageCollectionWebsocket( class PipelineData: """Store and debug data stored in hass.data.""" - pipeline_runs: dict[str, LimitedSizeDict[str, list[PipelineEvent]]] + pipeline_runs: dict[str, LimitedSizeDict[str, PipelineRunDebug]] pipeline_store: PipelineStorageCollection +@dataclass +class PipelineRunDebug: + """Debug data for a pipelinerun.""" + + events: list[PipelineEvent] = field(default_factory=list, init=False) + timestamp: str = field( + default_factory=lambda: dt_util.utcnow().isoformat(), + init=False, + ) + + async def async_setup_pipeline_store(hass: HomeAssistant) -> None: """Set up the pipeline storage collection.""" pipeline_store = PipelineStorageCollection( diff --git a/homeassistant/components/assist_pipeline/websocket_api.py b/homeassistant/components/assist_pipeline/websocket_api.py index c99e92a1993..f4841659535 100644 --- a/homeassistant/components/assist_pipeline/websocket_api.py +++ b/homeassistant/components/assist_pipeline/websocket_api.py @@ -232,7 +232,15 @@ def websocket_list_runs( pipeline_runs = pipeline_data.pipeline_runs[pipeline_id] - connection.send_result(msg["id"], {"pipeline_runs": list(pipeline_runs)}) + connection.send_result( + msg["id"], + { + "pipeline_runs": [ + {"pipeline_run_id": id, "timestamp": pipeline_run.timestamp} + for id, pipeline_run in pipeline_runs.items() + ] + }, + ) @callback @@ -274,5 +282,5 @@ def websocket_get_run( connection.send_result( msg["id"], - {"events": pipeline_runs[pipeline_run_id]}, + {"events": pipeline_runs[pipeline_run_id].events}, ) diff --git a/tests/components/assist_pipeline/test_websocket.py b/tests/components/assist_pipeline/test_websocket.py index 4a61901c14e..0560b585eff 100644 --- a/tests/components/assist_pipeline/test_websocket.py +++ b/tests/components/assist_pipeline/test_websocket.py @@ -1022,7 +1022,7 @@ async def test_audio_pipeline_debug( assert msg["success"] assert msg["result"] == {"pipeline_runs": [ANY]} - pipeline_run_id = msg["result"]["pipeline_runs"][0] + pipeline_run_id = msg["result"]["pipeline_runs"][0]["pipeline_run_id"] await client.send_json_auto_id( {