Skip to content

Commit ec0c0ce

Browse files
authored
[HUD][TTS] Add granularity, time, etc to permalink (#6989)
Fixes #6939 Add time range, granularity, percentile to permalink (previously only had job names) Also fixes percentile picker to use value instead of default value so the values from the router will be used? Should have no visual changes Is there a better way to do retrieve the router info? This seems really annoying
1 parent 7b148a5 commit ec0c0ce

File tree

2 files changed

+71
-31
lines changed

2 files changed

+71
-31
lines changed

torchci/pages/metrics.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ export function TtsPercentilePicker({
322322
Percentile
323323
</InputLabel>
324324
<Select
325-
defaultValue={ttsPercentile}
325+
value={ttsPercentile}
326326
label="Percentile"
327327
labelId="tts-percentile-picker-select-label"
328328
onChange={handleChange}

torchci/pages/tts/[repoOwner]/[repoName]/[branch]/[[...page]].tsx

Lines changed: 70 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,6 @@ export default function Page() {
8484
const repoOwner: string = (router.query.repoOwner as string) ?? "pytorch";
8585
const repoName: string = (router.query.repoName as string) ?? "pytorch";
8686
const branch: string = (router.query.branch as string) ?? "main";
87-
const jobNamesCompressed: string =
88-
(router.query.jobNamesCompressed as string) ?? "";
8987
const [startTime, setStartTime] = useState(dayjs().subtract(1, "week"));
9088
const [stopTime, setStopTime] = useState(dayjs());
9189
const [granularity, setGranularity] = useState<Granularity>("day");
@@ -95,6 +93,58 @@ export default function Page() {
9593
[key: string]: boolean;
9694
}>({});
9795

96+
useEffect(() => {
97+
if (router.query.jobName) {
98+
setSelectedJobs((prev) => ({
99+
...prev,
100+
[router.query.jobName as string]: true,
101+
}));
102+
}
103+
if (router.query.startTime) {
104+
setStartTime(dayjs(router.query.startTime as string));
105+
}
106+
if (router.query.stopTime) {
107+
setStopTime(dayjs(router.query.stopTime as string));
108+
}
109+
if (router.query.granularity) {
110+
setGranularity(router.query.granularity as string as Granularity);
111+
}
112+
if (router.query.timeRange) {
113+
setTimeRange(parseInt(router.query.timeRange as string) || 7);
114+
}
115+
if (router.query.ttsPercentile) {
116+
setTtsPercentile(parseFloat(router.query.ttsPercentile as string) || 0.5);
117+
}
118+
119+
const jobNamesFromLink = JSON.parse(
120+
router.query.jobNamesCompressed
121+
? decompressFromEncodedURIComponent(
122+
router.query.jobNamesCompressed as string
123+
)
124+
: "[]"
125+
);
126+
127+
if (router.query.jobName) {
128+
jobNamesFromLink.push(router.query.jobName as string);
129+
}
130+
131+
if (tts_true_series.length > 0) {
132+
setSelectedJobs(
133+
tts_true_series.reduce((acc: any, item: any) => {
134+
acc[item.name] = jobNamesFromLink.includes(item.name);
135+
return acc;
136+
}, {} as any)
137+
);
138+
} else {
139+
setSelectedJobs(
140+
jobNamesFromLink.reduce((acc: any, item: any) => {
141+
acc[item] = true;
142+
return acc;
143+
}, {} as any)
144+
);
145+
}
146+
}, [router.query]);
147+
98148
const GRAPHS_HEIGHT = 800;
99149

100150
const queryParams: { [key: string]: any } = {
@@ -127,6 +177,19 @@ export default function Page() {
127177
fetcher
128178
);
129179

180+
useEffect(() => {
181+
if (data != undefined) {
182+
const jobNames = data.map((item) => item.full_name);
183+
setSelectedJobs((prev) => {
184+
const newJobs = jobNames.reduce((acc: any, jobName: string) => {
185+
acc[jobName] = false;
186+
return acc;
187+
}, {});
188+
return { ...newJobs, ...prev };
189+
});
190+
}
191+
}, [data]);
192+
130193
const timeFieldName = "granularity_bucket";
131194
const groupByFieldName = "full_name";
132195
const tts_true_series = seriesWithInterpolatedTimes(
@@ -155,34 +218,6 @@ export default function Page() {
155218
(item: any) => selectedJobs[item["name"]]
156219
);
157220

158-
useEffect(() => {
159-
const jobNamesFromLink = JSON.parse(
160-
jobNamesCompressed != ""
161-
? decompressFromEncodedURIComponent(jobNamesCompressed)
162-
: "[]"
163-
);
164-
165-
if (router.query.jobName) {
166-
jobNamesFromLink.push(router.query.jobName as string);
167-
}
168-
169-
if (tts_true_series.length > 0) {
170-
setSelectedJobs(
171-
tts_true_series.reduce((acc: any, item: any) => {
172-
acc[item.name] = jobNamesFromLink.includes(item.name);
173-
return acc;
174-
}, {} as any)
175-
);
176-
} else {
177-
setSelectedJobs(
178-
jobNamesFromLink.reduce((acc: any, item: any) => {
179-
acc[item] = true;
180-
return acc;
181-
}, {} as any)
182-
);
183-
}
184-
}, [data, jobNamesCompressed, router.query.jobName]);
185-
186221
const permalink =
187222
typeof window !== "undefined" &&
188223
`${window.location.protocol}/${window.location.host}${router.asPath.replace(
@@ -194,6 +229,11 @@ export default function Page() {
194229
Object.keys(selectedJobs).filter((key) => selectedJobs[key])
195230
)
196231
),
232+
startTime: startTime.utc().format("YYYY-MM-DDTHH:mm:ss.SSS"),
233+
stopTime: stopTime.utc().format("YYYY-MM-DDTHH:mm:ss.SSS"),
234+
granularity: granularity,
235+
timeRange: timeRange.toString(),
236+
ttsPercentile: ttsPercentile.toString(),
197237
})}`;
198238

199239
return (

0 commit comments

Comments
 (0)