Skip to content

Commit f3e1dd8

Browse files
fix: deduplicate agent script timings (#15631)
Related to #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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy