From dd85ea8977b93fcd118758a4ee5a2b7307e9e2a3 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Thu, 6 Apr 2023 19:51:52 -0500 Subject: [PATCH] feat: tolerate disconnects in agent metadata frontend (#6939) --- .../components/Resources/AgentMetadata.tsx | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/site/src/components/Resources/AgentMetadata.tsx b/site/src/components/Resources/AgentMetadata.tsx index 0fecc908a6..3825608b4b 100644 --- a/site/src/components/Resources/AgentMetadata.tsx +++ b/site/src/components/Resources/AgentMetadata.tsx @@ -241,18 +241,34 @@ export const AgentMetadata: FC<{ setMetadata(storybookMetadata) return } - const source = watchAgentMetadata(agent.id) - source.onerror = (e) => { - console.error("received error in watch stream", e) - } - source.addEventListener("data", (e) => { - const data = JSON.parse(e.data) - setMetadata(data) - }) - return () => { - source.close() + let timeout: NodeJS.Timeout | undefined = undefined + + const connect = (): (() => void) => { + const source = watchAgentMetadata(agent.id) + + source.onerror = (e) => { + console.error("received error in watch stream", e) + setMetadata(undefined) + source.close() + + timeout = setTimeout(() => { + connect() + }, 3000) + } + + source.addEventListener("data", (e) => { + const data = JSON.parse(e.data) + setMetadata(data) + }) + return () => { + if (timeout !== undefined) { + clearTimeout(timeout) + } + source.close() + } } + return connect() }, [agent.id, watchAgentMetadata, storybookMetadata]) if (metadata === undefined) {