From f9521ba31e664cf394780a03eb862189ba33a3e5 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Fri, 31 Mar 2023 22:24:28 +0000 Subject: [PATCH 1/3] feat: tolerate disconnects in agent metadata frontend --- .../components/Resources/AgentMetadata.tsx | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/site/src/components/Resources/AgentMetadata.tsx b/site/src/components/Resources/AgentMetadata.tsx index 0fecc908a65ae..e521763adc4e3 100644 --- a/site/src/components/Resources/AgentMetadata.tsx +++ b/site/src/components/Resources/AgentMetadata.tsx @@ -241,18 +241,29 @@ 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() + const connect = (): (() => void) => { + const source = watchAgentMetadata(agent.id) + + source.onerror = (e) => { + console.error("received error in watch stream", e) + setMetadata(undefined) + source.close() + + setTimeout(() => { + connect() + }, 3000) + } + + source.addEventListener("data", (e) => { + const data = JSON.parse(e.data) + setMetadata(data) + }) + return () => { + source.close() + } } + return connect() }, [agent.id, watchAgentMetadata, storybookMetadata]) if (metadata === undefined) { From d44e9190f89277b31842aae434455dbba8251001 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sat, 1 Apr 2023 18:55:38 +0000 Subject: [PATCH 2/3] fixup! feat: tolerate disconnects in agent metadata frontend --- site/src/components/Resources/AgentMetadata.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/site/src/components/Resources/AgentMetadata.tsx b/site/src/components/Resources/AgentMetadata.tsx index e521763adc4e3..877f4db1b88c6 100644 --- a/site/src/components/Resources/AgentMetadata.tsx +++ b/site/src/components/Resources/AgentMetadata.tsx @@ -242,6 +242,8 @@ export const AgentMetadata: FC<{ return } + var timeout: NodeJS.Timeout | undefined = undefined + const connect = (): (() => void) => { const source = watchAgentMetadata(agent.id) @@ -250,7 +252,7 @@ export const AgentMetadata: FC<{ setMetadata(undefined) source.close() - setTimeout(() => { + timeout = setTimeout(() => { connect() }, 3000) } @@ -260,6 +262,9 @@ export const AgentMetadata: FC<{ setMetadata(data) }) return () => { + if (timeout !== undefined) { + clearTimeout(timeout) + } source.close() } } From 9eae6283b6e7cf8c3e591a96993266cc97f8d7bf Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sat, 1 Apr 2023 21:21:36 +0000 Subject: [PATCH 3/3] fixup! feat: tolerate disconnects in agent metadata frontend --- site/src/components/Resources/AgentMetadata.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/components/Resources/AgentMetadata.tsx b/site/src/components/Resources/AgentMetadata.tsx index 877f4db1b88c6..3825608b4bff3 100644 --- a/site/src/components/Resources/AgentMetadata.tsx +++ b/site/src/components/Resources/AgentMetadata.tsx @@ -242,7 +242,7 @@ export const AgentMetadata: FC<{ return } - var timeout: NodeJS.Timeout | undefined = undefined + let timeout: NodeJS.Timeout | undefined = undefined const connect = (): (() => void) => { const source = watchAgentMetadata(agent.id)