From dc219e6fceb43b853f1b0bd41ae1daddb1ca343d Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Fri, 22 Nov 2024 17:14:24 +0000 Subject: [PATCH 1/2] fix: deduplicate agent script timings --- .../WorkspaceTiming/WorkspaceTimings.stories.tsx | 14 ++++++++++++++ .../WorkspaceTiming/WorkspaceTimings.tsx | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx index 5e3ccb86151d0..b52189100927d 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx @@ -104,3 +104,17 @@ export const NavigateToStartStage: Story = { await canvas.findByText("Startup Script"); }, }; + +// Test case for https://github.com/coder/coder/issues/15413 +export const DuplicatedScriptTiming: Story = { + args: { + agentScriptTimings: [ + WorkspaceTimingsResponse.agent_script_timings[0], + { + ...WorkspaceTimingsResponse.agent_script_timings[0], + started_at: "2021-09-01T00:00:00Z", + ended_at: "2021-09-01T00:00:00Z", + }, + ], + }, +} diff --git a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx index 9fe12b122a35c..fc1ed9e43dd4d 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx @@ -19,6 +19,8 @@ import { agentStages, provisioningStages, } from "./StagesChart"; +import sortBy from "lodash/sortBy"; +import uniqBy from "lodash/uniqBy"; type TimingView = | { name: "default" } @@ -42,11 +44,20 @@ export const WorkspaceTimings: FC = ({ defaultIsOpen = false, }) => { const [view, setView] = useState({ name: "default" }); + // This is a workaround to deal with the BE returning multiple timings for a + // single agent script when it should return only one. Reference: + // https://github.com/coder/coder/issues/15413#issuecomment-2493663571 + const uniqScriptTimings = uniqBy( + sortBy(agentScriptTimings, (t) => new Date(t.started_at).getTime() * -1), + (t) => t.display_name, + ) const timings = [ ...provisionerTimings, - ...agentScriptTimings, + ...uniqScriptTimings, ...agentConnectionTimings, - ]; + ].sort((a, b) => { + return new Date(a.started_at).getTime() - new Date(b.started_at).getTime(); + }); const [isOpen, setIsOpen] = useState(defaultIsOpen); const isLoading = timings.length === 0; From 3b39fba6ebbf46d2928e2570c9a5768d2258f2b7 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Fri, 22 Nov 2024 17:17:13 +0000 Subject: [PATCH 2/2] Fix fmt --- .../workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx | 2 +- .../modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx index b52189100927d..02a544ea9a718 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx @@ -117,4 +117,4 @@ export const DuplicatedScriptTiming: Story = { }, ], }, -} +}; diff --git a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx index fc1ed9e43dd4d..47873f8aaaede 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx @@ -9,6 +9,8 @@ import type { AgentScriptTiming, ProvisionerTiming, } from "api/typesGenerated"; +import sortBy from "lodash/sortBy"; +import uniqBy from "lodash/uniqBy"; import { type FC, useState } from "react"; import { type TimeRange, calcDuration, mergeTimeRanges } from "./Chart/utils"; import { ResourcesChart, isCoderResource } from "./ResourcesChart"; @@ -19,8 +21,6 @@ import { agentStages, provisioningStages, } from "./StagesChart"; -import sortBy from "lodash/sortBy"; -import uniqBy from "lodash/uniqBy"; type TimingView = | { name: "default" } @@ -50,7 +50,7 @@ export const WorkspaceTimings: FC = ({ const uniqScriptTimings = uniqBy( sortBy(agentScriptTimings, (t) => new Date(t.started_at).getTime() * -1), (t) => t.display_name, - ) + ); const timings = [ ...provisionerTimings, ...uniqScriptTimings,