Skip to content

Commit f3e1dd8

Browse files
fix: deduplicate agent script timings (coder#15631)
Related to coder#15413
1 parent e87b0bb commit f3e1dd8

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,17 @@ export const NavigateToStartStage: Story = {
104104
await canvas.findByText("Startup Script");
105105
},
106106
};
107+
108+
// Test case for https://github.com/coder/coder/issues/15413
109+
export const DuplicatedScriptTiming: Story = {
110+
args: {
111+
agentScriptTimings: [
112+
WorkspaceTimingsResponse.agent_script_timings[0],
113+
{
114+
...WorkspaceTimingsResponse.agent_script_timings[0],
115+
started_at: "2021-09-01T00:00:00Z",
116+
ended_at: "2021-09-01T00:00:00Z",
117+
},
118+
],
119+
},
120+
};

site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import type {
99
AgentScriptTiming,
1010
ProvisionerTiming,
1111
} from "api/typesGenerated";
12+
import sortBy from "lodash/sortBy";
13+
import uniqBy from "lodash/uniqBy";
1214
import { type FC, useState } from "react";
1315
import { type TimeRange, calcDuration, mergeTimeRanges } from "./Chart/utils";
1416
import { ResourcesChart, isCoderResource } from "./ResourcesChart";
@@ -42,11 +44,20 @@ export const WorkspaceTimings: FC<WorkspaceTimingsProps> = ({
4244
defaultIsOpen = false,
4345
}) => {
4446
const [view, setView] = useState<TimingView>({ name: "default" });
47+
// This is a workaround to deal with the BE returning multiple timings for a
48+
// single agent script when it should return only one. Reference:
49+
// https://github.com/coder/coder/issues/15413#issuecomment-2493663571
50+
const uniqScriptTimings = uniqBy(
51+
sortBy(agentScriptTimings, (t) => new Date(t.started_at).getTime() * -1),
52+
(t) => t.display_name,
53+
);
4554
const timings = [
4655
...provisionerTimings,
47-
...agentScriptTimings,
56+
...uniqScriptTimings,
4857
...agentConnectionTimings,
49-
];
58+
].sort((a, b) => {
59+
return new Date(a.started_at).getTime() - new Date(b.started_at).getTime();
60+
});
5061
const [isOpen, setIsOpen] = useState(defaultIsOpen);
5162
const isLoading = timings.length === 0;
5263

0 commit comments

Comments
 (0)