fix: deduplicate agent script timings (#15631)

Related to https://github.com/coder/coder/issues/15413
This commit is contained in:
Bruno Quaresma
2024-11-22 14:29:31 -03:00
committed by GitHub
parent e87b0bb455
commit f3e1dd8d1c
2 changed files with 27 additions and 2 deletions
@@ -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",
},
],
},
};
@@ -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";
@@ -42,11 +44,20 @@ export const WorkspaceTimings: FC<WorkspaceTimingsProps> = ({
defaultIsOpen = false,
}) => {
const [view, setView] = useState<TimingView>({ 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;