Skip to content

Commit 457d764

Browse files
nipunn1313Convex, Inc.
authored andcommitted
Update dashboard to show compute for queries/mutations (#41867)
Added a tooltip to indicate that only action compute incurs additional cost. GitOrigin-RevId: 2762638747085bced23b2140c88d285990a4e032
1 parent c27e22e commit 457d764

File tree

5 files changed

+45
-48
lines changed

5 files changed

+45
-48
lines changed

npm-packages/dashboard-common/src/features/logs/components/LogDrilldown.stories.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ const mockLogs: UdfLog[] = [
149149
timestamp: Date.now() - 3800,
150150
executionTimeMs: 15.2,
151151
usageStats: {
152-
actionMemoryUsedMb: null,
152+
memoryUsedMb: null,
153153
databaseReadBytes: 1024,
154154
databaseWriteBytes: 0,
155155
databaseReadDocuments: 5,
@@ -173,7 +173,7 @@ const mockLogs: UdfLog[] = [
173173
timestamp: Date.now() - 3000,
174174
executionTimeMs: 250.8,
175175
usageStats: {
176-
actionMemoryUsedMb: 64,
176+
memoryUsedMb: 64,
177177
databaseReadBytes: 512,
178178
databaseWriteBytes: 256,
179179
databaseReadDocuments: 2,
@@ -213,7 +213,7 @@ const mockLogs: UdfLog[] = [
213213
timestamp: Date.now() - 1000,
214214
executionTimeMs: 500.5,
215215
usageStats: {
216-
actionMemoryUsedMb: null,
216+
memoryUsedMb: null,
217217
databaseReadBytes: 2048,
218218
databaseWriteBytes: 512,
219219
databaseReadDocuments: 7,

npm-packages/dashboard-common/src/features/logs/components/LogListResources.tsx

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,25 @@ import { Tooltip } from "@ui/Tooltip";
1212
import { UsageStats } from "system-udfs/convex/_system/frontend/common";
1313

1414
type RequestUsageStats = UsageStats & {
15-
actionsRuntimeMs: number;
16-
actionComputeMbMs: number;
15+
runtimeMs: number;
16+
computeMbMs: number;
1717
returnBytes?: number;
1818
};
1919

2020
export function LogListResources({ logs }: { logs: UdfLog[] }) {
21-
// Aggregate usage stats across all logs within this request, including total action runtime.
21+
// Aggregate usage stats across all logs within this request
2222
const usageStats = (() => {
2323
const totals: RequestUsageStats = {
24-
actionMemoryUsedMb: 0,
24+
memoryUsedMb: 0,
2525
databaseReadBytes: 0,
2626
databaseReadDocuments: 0,
2727
databaseWriteBytes: 0,
2828
storageReadBytes: 0,
2929
storageWriteBytes: 0,
3030
vectorIndexReadBytes: 0,
3131
vectorIndexWriteBytes: 0,
32-
actionsRuntimeMs: 0,
33-
actionComputeMbMs: 0,
32+
runtimeMs: 0,
33+
computeMbMs: 0,
3434
};
3535

3636
return logs.reduce((accumulated, log) => {
@@ -45,14 +45,11 @@ export function LogListResources({ logs }: { logs: UdfLog[] }) {
4545
if ("returnBytes" in log && log.returnBytes) {
4646
ret.returnBytes = (ret.returnBytes ?? 0) + log.returnBytes;
4747
}
48-
if (
49-
log.kind === "outcome" &&
50-
(log.udfType === "Action" || log.udfType === "HttpAction")
51-
) {
48+
if (log.kind === "outcome") {
5249
const durationMs = log.executionTimeMs ?? 0;
53-
ret.actionsRuntimeMs += durationMs;
54-
const memoryMb = (log.usageStats?.actionMemoryUsedMb ?? 0) as number;
55-
ret.actionComputeMbMs += durationMs * memoryMb;
50+
ret.runtimeMs += durationMs;
51+
const memoryMb = (log.usageStats?.memoryUsedMb ?? 0) as number;
52+
ret.computeMbMs += durationMs * memoryMb;
5653
}
5754
return ret;
5855
}, totals);
@@ -82,16 +79,16 @@ export function LogListResources({ logs }: { logs: UdfLog[] }) {
8279
<Disclosure.Panel className="animate-fadeInFromLoading p-2 pt-0 text-xs">
8380
<ul className="divide-y">
8481
<li className="flex items-center justify-between py-2">
85-
<span className="text-content-secondary">Action Compute</span>
82+
<span className="text-content-secondary">Compute</span>
8683
<span className="text-content-primary">
8784
<strong>
8885
{Number(
89-
usageStats.actionComputeMbMs / (1024 * 3_600_000),
86+
usageStats.computeMbMs / (1024 * 3_600_000),
9087
).toFixed(7)}{" "}
9188
GB-hr
9289
</strong>{" "}
93-
({usageStats.actionMemoryUsedMb ?? 0} MB for{" "}
94-
{Number(usageStats.actionsRuntimeMs / 1000).toFixed(2)}
90+
({usageStats.memoryUsedMb ?? 0} MB for{" "}
91+
{Number(usageStats.runtimeMs / 1000).toFixed(2)}
9592
s)
9693
</span>
9794
</li>

npm-packages/dashboard-common/src/features/logs/components/LogMetadata.stories.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const mockQueryLogs = [
4141
storageWriteBytes: 0,
4242
vectorIndexReadBytes: 0,
4343
vectorIndexWriteBytes: 0,
44-
actionMemoryUsedMb: 0,
44+
memoryUsedMb: 0,
4545
},
4646
returnBytes: 2048,
4747
},
@@ -76,7 +76,7 @@ const mockMutationLogs = [
7676
storageWriteBytes: 0,
7777
vectorIndexReadBytes: 0,
7878
vectorIndexWriteBytes: 0,
79-
actionMemoryUsedMb: 0,
79+
memoryUsedMb: 0,
8080
},
8181
returnBytes: 512,
8282
},
@@ -111,7 +111,7 @@ const mockActionLogs = [
111111
storageWriteBytes: 5120,
112112
vectorIndexReadBytes: 0,
113113
vectorIndexWriteBytes: 0,
114-
actionMemoryUsedMb: 128,
114+
memoryUsedMb: 128,
115115
},
116116
returnBytes: 1024,
117117
},
@@ -146,7 +146,7 @@ const mockHttpActionLogs = [
146146
storageWriteBytes: 0,
147147
vectorIndexReadBytes: 0,
148148
vectorIndexWriteBytes: 0,
149-
actionMemoryUsedMb: 64,
149+
memoryUsedMb: 64,
150150
},
151151
returnBytes: 4096,
152152
},
@@ -181,7 +181,7 @@ const mockCachedQueryLogs = [
181181
storageWriteBytes: 0,
182182
vectorIndexReadBytes: 0,
183183
vectorIndexWriteBytes: 0,
184-
actionMemoryUsedMb: 0,
184+
memoryUsedMb: 0,
185185
},
186186
returnBytes: 2048,
187187
},
@@ -216,7 +216,7 @@ const mockAdminLogs = [
216216
storageWriteBytes: 0,
217217
vectorIndexReadBytes: 0,
218218
vectorIndexWriteBytes: 0,
219-
actionMemoryUsedMb: 0,
219+
memoryUsedMb: 0,
220220
},
221221
},
222222
];
@@ -250,7 +250,7 @@ const mockLogsWithVectorData = [
250250
storageWriteBytes: 0,
251251
vectorIndexReadBytes: 16384,
252252
vectorIndexWriteBytes: 8192,
253-
actionMemoryUsedMb: 0,
253+
memoryUsedMb: 0,
254254
},
255255
returnBytes: 8192,
256256
},
@@ -285,7 +285,7 @@ const mockMultipleExecutionsLogs = [
285285
storageWriteBytes: 0,
286286
vectorIndexReadBytes: 0,
287287
vectorIndexWriteBytes: 0,
288-
actionMemoryUsedMb: 0,
288+
memoryUsedMb: 0,
289289
},
290290
returnBytes: 2048,
291291
},
@@ -317,7 +317,7 @@ const mockMultipleExecutionsLogs = [
317317
storageWriteBytes: 0,
318318
vectorIndexReadBytes: 0,
319319
vectorIndexWriteBytes: 0,
320-
actionMemoryUsedMb: 0,
320+
memoryUsedMb: 0,
321321
},
322322
returnBytes: 512,
323323
},
@@ -349,7 +349,7 @@ const mockMultipleExecutionsLogs = [
349349
storageWriteBytes: 0,
350350
vectorIndexReadBytes: 0,
351351
vectorIndexWriteBytes: 0,
352-
actionMemoryUsedMb: 96,
352+
memoryUsedMb: 96,
353353
},
354354
returnBytes: 256,
355355
},

npm-packages/dashboard-common/src/features/logs/components/LogMetadata.tsx

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import { Disclosure } from "@headlessui/react";
1414
import { Spinner } from "@ui/Spinner";
1515

1616
type RequestUsageStats = UsageStats & {
17-
actionsRuntimeMs: number;
18-
actionComputeMbMs: number;
17+
runtimeMs: number;
18+
computeMbMs: number;
1919
returnBytes?: number;
2020
};
2121

@@ -121,16 +121,16 @@ export function LogMetadata({
121121

122122
const usageStats = useMemo(() => {
123123
const totals: RequestUsageStats = {
124-
actionMemoryUsedMb: 0,
124+
memoryUsedMb: 0,
125125
databaseReadBytes: 0,
126126
databaseReadDocuments: 0,
127127
databaseWriteBytes: 0,
128128
storageReadBytes: 0,
129129
storageWriteBytes: 0,
130130
vectorIndexReadBytes: 0,
131131
vectorIndexWriteBytes: 0,
132-
actionsRuntimeMs: 0,
133-
actionComputeMbMs: 0,
132+
runtimeMs: 0,
133+
computeMbMs: 0,
134134
};
135135

136136
return filteredLogs.reduce((accumulated, log) => {
@@ -145,14 +145,11 @@ export function LogMetadata({
145145
if ("returnBytes" in log && log.returnBytes) {
146146
ret.returnBytes = (ret.returnBytes ?? 0) + log.returnBytes;
147147
}
148-
if (
149-
log.kind === "outcome" &&
150-
(log.udfType === "Action" || log.udfType === "HttpAction")
151-
) {
148+
if (log.kind === "outcome") {
152149
const durationMs = log.executionTimeMs ?? 0;
153-
ret.actionsRuntimeMs += durationMs;
154-
const memoryMb = (log.usageStats?.actionMemoryUsedMb ?? 0) as number;
155-
ret.actionComputeMbMs += durationMs * memoryMb;
150+
ret.runtimeMs += durationMs;
151+
const memoryMb = (log.usageStats?.memoryUsedMb ?? 0) as number;
152+
ret.computeMbMs += durationMs * memoryMb;
156153
}
157154
return ret;
158155
}, totals);
@@ -226,18 +223,21 @@ function ResourcesUsed({
226223
) : (
227224
<ul className="divide-y text-xs">
228225
<li className="grid min-w-fit grid-cols-2 items-center gap-2 py-1.5">
229-
<span className="text-content-secondary">
230-
Action Compute
226+
<span className="flex items-center gap-1 text-content-secondary">
227+
Compute
228+
<Tooltip tip="Only compute from Actions incur additional cost. Query/Mutation compute are included.">
229+
<QuestionMarkCircledIcon />
230+
</Tooltip>
231231
</span>
232232
<span className="min-w-0 text-content-primary">
233233
<strong>
234234
{Number(
235-
usageStats.actionComputeMbMs / (1024 * 3_600_000),
235+
usageStats.computeMbMs / (1024 * 3_600_000),
236236
).toFixed(7)}{" "}
237237
GB-hr
238238
</strong>{" "}
239-
({usageStats.actionMemoryUsedMb ?? 0} MB for{" "}
240-
{Number(usageStats.actionsRuntimeMs / 1000).toFixed(2)}s)
239+
({usageStats.memoryUsedMb ?? 0} MB for{" "}
240+
{Number(usageStats.runtimeMs / 1000).toFixed(2)}s)
241241
</span>
242242
</li>
243243
<li className="grid min-w-fit grid-cols-2 items-center gap-2 py-1.5">

npm-packages/system-udfs/convex/_system/frontend/common.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export type StructuredLogLine = {
2929
export type LogLine = string | StructuredLogLine;
3030

3131
export type UsageStats = {
32-
actionMemoryUsedMb: number | null;
32+
memoryUsedMb: number | null;
3333
databaseReadBytes: number;
3434
databaseWriteBytes: number;
3535
databaseReadDocuments: number;

0 commit comments

Comments
 (0)