Show elapsed time for live run summaries
This commit is contained in:
@@ -1898,6 +1898,9 @@ const ActivityChainSummary: FC<{
|
|||||||
const contentRunStartedAtMs = useAuiState((s) =>
|
const contentRunStartedAtMs = useAuiState((s) =>
|
||||||
findNumberInActivityParts(s.message.content, "runStartedAtMs"),
|
findNumberInActivityParts(s.message.content, "runStartedAtMs"),
|
||||||
);
|
);
|
||||||
|
const messageCreatedAtMs = useAuiState((s) =>
|
||||||
|
normalizeMessageCreatedAtMs(s.message.createdAt),
|
||||||
|
);
|
||||||
const storedElapsedMs = useAuiState((s) => {
|
const storedElapsedMs = useAuiState((s) => {
|
||||||
const value = readMetadataValue(s.message.metadata, "elapsedMs");
|
const value = readMetadataValue(s.message.metadata, "elapsedMs");
|
||||||
const contentValue = findElapsedMsInActivityParts(s.message.content);
|
const contentValue = findElapsedMsInActivityParts(s.message.content);
|
||||||
@@ -1908,7 +1911,8 @@ const ActivityChainSummary: FC<{
|
|||||||
? Math.max(0, Math.round(value))
|
? Math.max(0, Math.round(value))
|
||||||
: null;
|
: null;
|
||||||
});
|
});
|
||||||
const initialStartedAtMs = metadataRunStartedAtMs ?? contentRunStartedAtMs;
|
const initialStartedAtMs =
|
||||||
|
metadataRunStartedAtMs ?? contentRunStartedAtMs ?? messageCreatedAtMs;
|
||||||
const [elapsedMs, setElapsedMs] = useState<number | null>(() => {
|
const [elapsedMs, setElapsedMs] = useState<number | null>(() => {
|
||||||
if (storedElapsedMs !== null) return storedElapsedMs;
|
if (storedElapsedMs !== null) return storedElapsedMs;
|
||||||
if (initialStartedAtMs !== null) {
|
if (initialStartedAtMs !== null) {
|
||||||
@@ -1939,6 +1943,7 @@ const ActivityChainSummary: FC<{
|
|||||||
const startedAt =
|
const startedAt =
|
||||||
metadataRunStartedAtMs ??
|
metadataRunStartedAtMs ??
|
||||||
contentRunStartedAtMs ??
|
contentRunStartedAtMs ??
|
||||||
|
messageCreatedAtMs ??
|
||||||
(storedElapsedMs === null ? null : Date.now() - storedElapsedMs);
|
(storedElapsedMs === null ? null : Date.now() - storedElapsedMs);
|
||||||
if (startedAt === null) {
|
if (startedAt === null) {
|
||||||
setElapsedMs(storedElapsedMs);
|
setElapsedMs(storedElapsedMs);
|
||||||
@@ -1949,7 +1954,13 @@ const ActivityChainSummary: FC<{
|
|||||||
setElapsedMs(Math.max(0, Date.now() - startedAt));
|
setElapsedMs(Math.max(0, Date.now() - startedAt));
|
||||||
}, 1000);
|
}, 1000);
|
||||||
return () => window.clearInterval(timer);
|
return () => window.clearInterval(timer);
|
||||||
}, [active, metadataRunStartedAtMs, contentRunStartedAtMs, storedElapsedMs]);
|
}, [
|
||||||
|
active,
|
||||||
|
metadataRunStartedAtMs,
|
||||||
|
contentRunStartedAtMs,
|
||||||
|
messageCreatedAtMs,
|
||||||
|
storedElapsedMs,
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
@@ -1991,6 +2002,23 @@ function findNumberInActivityParts(
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeMessageCreatedAtMs(value: unknown) {
|
||||||
|
if (value instanceof Date) {
|
||||||
|
const time = value.getTime();
|
||||||
|
return Number.isFinite(time) ? time : null;
|
||||||
|
}
|
||||||
|
if (typeof value === "number" && Number.isFinite(value)) {
|
||||||
|
return value < 10_000_000_000
|
||||||
|
? Math.round(value * 1000)
|
||||||
|
: Math.round(value);
|
||||||
|
}
|
||||||
|
if (typeof value === "string") {
|
||||||
|
const time = Date.parse(value);
|
||||||
|
return Number.isFinite(time) ? time : null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function findElapsedMsInActivityParts(content: readonly ActivitySummaryPart[]) {
|
function findElapsedMsInActivityParts(content: readonly ActivitySummaryPart[]) {
|
||||||
for (const part of content) {
|
for (const part of content) {
|
||||||
if (typeof part.elapsedMs === "number" && Number.isFinite(part.elapsedMs)) {
|
if (typeof part.elapsedMs === "number" && Number.isFinite(part.elapsedMs)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user