@burdenoff/fluidgrids-fe-sdk 2026.923.1 → 2026.923.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ExecutionDetailPage-22KHNXBI.js → ExecutionDetailPage-BD7CS4KL.js} +4 -4
- package/dist/{ExecutionDetailPage-22KHNXBI.js.map → ExecutionDetailPage-BD7CS4KL.js.map} +1 -1
- package/dist/{ExecutionsListPage-NQWK2NCN.js → ExecutionsListPage-VOGSLA7T.js} +4 -4
- package/dist/{ExecutionsListPage-NQWK2NCN.js.map → ExecutionsListPage-VOGSLA7T.js.map} +1 -1
- package/dist/{WorkflowBuilder-2PLQT5OZ.js → WorkflowBuilder-WLJBVVHS.js} +4 -4
- package/dist/{WorkflowBuilder-2PLQT5OZ.js.map → WorkflowBuilder-WLJBVVHS.js.map} +1 -1
- package/dist/{WorkflowsList-M2GOHL6L.js → WorkflowsList-QREUMT55.js} +3 -3
- package/dist/{WorkflowsList-M2GOHL6L.js.map → WorkflowsList-QREUMT55.js.map} +1 -1
- package/dist/{chunk-YNDQYVT2.js → chunk-4C6UYNC5.js} +3 -3
- package/dist/{chunk-YNDQYVT2.js.map → chunk-4C6UYNC5.js.map} +1 -1
- package/dist/{chunk-24A4C63H.js → chunk-5A7GP6O7.js} +189 -67
- package/dist/chunk-5A7GP6O7.js.map +1 -0
- package/dist/{chunk-C7OR5C6R.js → chunk-5PZDLMC4.js} +3 -3
- package/dist/{chunk-C7OR5C6R.js.map → chunk-5PZDLMC4.js.map} +1 -1
- package/dist/{chunk-EGQB462S.js → chunk-FKOUPL6Z.js} +355 -128
- package/dist/chunk-FKOUPL6Z.js.map +1 -0
- package/dist/{chunk-AQBWMYKP.js → chunk-HNVWIVJH.js} +52 -16
- package/dist/chunk-HNVWIVJH.js.map +1 -0
- package/dist/{chunk-ILH7U6VB.js → chunk-LH2YML5F.js} +3 -3
- package/dist/{chunk-ILH7U6VB.js.map → chunk-LH2YML5F.js.map} +1 -1
- package/dist/{chunk-RRBFISAU.js → chunk-TEZV7I6A.js} +3 -3
- package/dist/{chunk-RRBFISAU.js.map → chunk-TEZV7I6A.js.map} +1 -1
- package/dist/{chunk-PTI43PVQ.js → chunk-TOHTP3BT.js} +3 -3
- package/dist/{chunk-PTI43PVQ.js.map → chunk-TOHTP3BT.js.map} +1 -1
- package/dist/{chunk-XQ7FGXPM.js → chunk-TVLE7GNH.js} +374 -7
- package/dist/chunk-TVLE7GNH.js.map +1 -0
- package/dist/{chunk-WTKMWWSI.js → chunk-VTPBYPDV.js} +10 -4
- package/dist/chunk-VTPBYPDV.js.map +1 -0
- package/dist/{chunk-JMJRE5RT.js → chunk-XF7QA3QT.js} +414 -152
- package/dist/chunk-XF7QA3QT.js.map +1 -0
- package/dist/executions.js +3 -3
- package/dist/index.js +17 -17
- package/dist/observability.js +2 -2
- package/dist/settings.js +2 -2
- package/dist/templates.js +2 -2
- package/dist/workflow-builder.js +3 -3
- package/dist/workflows-list.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-24A4C63H.js.map +0 -1
- package/dist/chunk-AQBWMYKP.js.map +0 -1
- package/dist/chunk-EGQB462S.js.map +0 -1
- package/dist/chunk-JMJRE5RT.js.map +0 -1
- package/dist/chunk-WTKMWWSI.js.map +0 -1
- package/dist/chunk-XQ7FGXPM.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-
|
|
1
|
+
import { useDataSinks, useDataSinkData, useInsightsData, useRunReplayActions } from './chunk-5A7GP6O7.js';
|
|
2
2
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
3
3
|
import { useState, useMemo, useEffect } from 'react';
|
|
4
4
|
import { Icon } from '@iconify/react';
|
|
@@ -85,13 +85,26 @@ function DataPreview({ value }) {
|
|
|
85
85
|
(item) => Boolean(item) && typeof item === "object" && !Array.isArray(item)
|
|
86
86
|
);
|
|
87
87
|
if (rows.length > 0) {
|
|
88
|
-
const keys = [...new Set(rows.flatMap((row) => Object.keys(row)))].slice(
|
|
88
|
+
const keys = [...new Set(rows.flatMap((row) => Object.keys(row)))].slice(
|
|
89
|
+
0,
|
|
90
|
+
12
|
|
91
|
+
);
|
|
89
92
|
return /* @__PURE__ */ jsxs("div", { className: "overflow-x-auto rounded-lg border border-border-secondary", children: [
|
|
90
93
|
/* @__PURE__ */ jsxs("table", { className: "min-w-full text-left text-sm", children: [
|
|
91
|
-
/* @__PURE__ */ jsx("thead", { className: "bg-background-tertiary text-xs uppercase text-text-secondary", children: /* @__PURE__ */ jsx("tr", { children: keys.map((key) => /* @__PURE__ */ jsx(
|
|
94
|
+
/* @__PURE__ */ jsx("thead", { className: "bg-background-tertiary text-xs uppercase text-text-secondary", children: /* @__PURE__ */ jsx("tr", { children: keys.map((key) => /* @__PURE__ */ jsx(
|
|
95
|
+
"th",
|
|
96
|
+
{
|
|
97
|
+
className: "whitespace-nowrap px-3 py-2 font-medium",
|
|
98
|
+
children: key
|
|
99
|
+
},
|
|
100
|
+
key
|
|
101
|
+
)) }) }),
|
|
92
102
|
/* @__PURE__ */ jsx("tbody", { className: "divide-y divide-border-secondary", children: rows.slice(0, 50).map((row, index) => /* @__PURE__ */ jsx("tr", { className: "text-text-primary", children: keys.map((key) => /* @__PURE__ */ jsx("td", { className: "max-w-xs truncate px-3 py-2", children: valueLabel(row[key]) }, key)) }, index)) })
|
|
93
103
|
] }),
|
|
94
|
-
rows.length > 50 && /* @__PURE__ */ jsx("p", { className: "border-t border-border-secondary px-3 py-2 text-xs text-text-secondary", children: tr(
|
|
104
|
+
rows.length > 50 && /* @__PURE__ */ jsx("p", { className: "border-t border-border-secondary px-3 py-2 text-xs text-text-secondary", children: tr(
|
|
105
|
+
"fluidgrids.dataSinks.previewLimit",
|
|
106
|
+
"Showing the first 50 rows"
|
|
107
|
+
) })
|
|
95
108
|
] });
|
|
96
109
|
}
|
|
97
110
|
}
|
|
@@ -146,7 +159,8 @@ function DataSinkDashboardPage() {
|
|
|
146
159
|
refetch: refetchData
|
|
147
160
|
} = useDataSinkData(selectedSink);
|
|
148
161
|
useEffect(() => {
|
|
149
|
-
if (selectedSink && selectedSink.id !== selectedId)
|
|
162
|
+
if (selectedSink && selectedSink.id !== selectedId)
|
|
163
|
+
setSelectedId(selectedSink.id);
|
|
150
164
|
}, [selectedId, selectedSink]);
|
|
151
165
|
const payload = sinkData?.extracted ?? sinkData?.raw;
|
|
152
166
|
const totalBytes = sinks.reduce((total, sink) => total + sink.sizeBytes, 0);
|
|
@@ -155,12 +169,23 @@ function DataSinkDashboardPage() {
|
|
|
155
169
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
156
170
|
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium uppercase tracking-wide text-text-secondary", children: tr("fluidgrids.dataSinks.kicker", "BigConsole data") }),
|
|
157
171
|
/* @__PURE__ */ jsx("h1", { className: "mt-1 text-2xl font-semibold text-text-primary sm:text-3xl", children: tr("fluidgrids.dataSinks.title", "DataSink dashboard") }),
|
|
158
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-text-secondary", children: tr(
|
|
172
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-text-secondary", children: tr(
|
|
173
|
+
"fluidgrids.dataSinks.subtitle",
|
|
174
|
+
"Inspect workflow-produced data and its freshness without leaving FluidGrids."
|
|
175
|
+
) })
|
|
159
176
|
] }),
|
|
160
|
-
/* @__PURE__ */ jsxs(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
177
|
+
/* @__PURE__ */ jsxs(
|
|
178
|
+
Button,
|
|
179
|
+
{
|
|
180
|
+
variant: "outline",
|
|
181
|
+
onClick: () => void refetch(),
|
|
182
|
+
disabled: loading,
|
|
183
|
+
children: [
|
|
184
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:refresh", className: "mr-1", width: 16 }),
|
|
185
|
+
tr("fluidgrids.dataSinks.refresh", "Refresh")
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
)
|
|
164
189
|
] }),
|
|
165
190
|
/* @__PURE__ */ jsxs("section", { className: "mb-6 grid gap-4 sm:grid-cols-3", children: [
|
|
166
191
|
/* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border-secondary bg-background-secondary p-4", children: [
|
|
@@ -176,19 +201,58 @@ function DataSinkDashboardPage() {
|
|
|
176
201
|
/* @__PURE__ */ jsx("p", { className: "mt-2 text-2xl font-semibold text-text-primary", children: formatBytes(totalBytes) })
|
|
177
202
|
] })
|
|
178
203
|
] }),
|
|
179
|
-
error && /* @__PURE__ */ jsx(
|
|
204
|
+
error && /* @__PURE__ */ jsx(
|
|
205
|
+
"div",
|
|
206
|
+
{
|
|
207
|
+
role: "alert",
|
|
208
|
+
className: "mb-6 rounded-lg border border-status-error-border bg-status-error-bg-subtle p-4 text-sm text-status-error-text",
|
|
209
|
+
children: error.message
|
|
210
|
+
}
|
|
211
|
+
),
|
|
180
212
|
/* @__PURE__ */ jsxs("div", { className: "grid gap-6 xl:grid-cols-[22rem_minmax(0,1fr)]", children: [
|
|
181
213
|
/* @__PURE__ */ jsxs("aside", { className: "space-y-3", children: [
|
|
182
|
-
/* @__PURE__ */ jsx(
|
|
214
|
+
/* @__PURE__ */ jsx(
|
|
215
|
+
Input,
|
|
216
|
+
{
|
|
217
|
+
value: search,
|
|
218
|
+
onChange: (event) => setSearch(event.target.value),
|
|
219
|
+
placeholder: tr(
|
|
220
|
+
"fluidgrids.dataSinks.search",
|
|
221
|
+
"Search by name or key"
|
|
222
|
+
),
|
|
223
|
+
"aria-label": tr(
|
|
224
|
+
"fluidgrids.dataSinks.search",
|
|
225
|
+
"Search by name or key"
|
|
226
|
+
)
|
|
227
|
+
}
|
|
228
|
+
),
|
|
183
229
|
loading && sinks.length === 0 && /* @__PURE__ */ jsx("p", { className: "p-4 text-sm text-text-secondary", children: tr("fluidgrids.dataSinks.loading", "Loading DataSinks\u2026") }),
|
|
184
230
|
!loading && sinks.length === 0 && /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-dashed border-border-secondary p-6 text-center text-sm text-text-secondary", children: tr("fluidgrids.dataSinks.empty", "No active DataSinks found.") }),
|
|
185
|
-
sinks.map((sink) => /* @__PURE__ */ jsx(
|
|
231
|
+
sinks.map((sink) => /* @__PURE__ */ jsx(
|
|
232
|
+
SinkCard,
|
|
233
|
+
{
|
|
234
|
+
sink,
|
|
235
|
+
selected: sink.id === selectedSink?.id,
|
|
236
|
+
onSelect: () => setSelectedId(sink.id)
|
|
237
|
+
},
|
|
238
|
+
sink.id
|
|
239
|
+
))
|
|
186
240
|
] }),
|
|
187
241
|
/* @__PURE__ */ jsxs("main", { className: "min-w-0 rounded-xl border border-border-secondary bg-background-secondary p-5", children: [
|
|
188
242
|
!selectedSink && /* @__PURE__ */ jsxs("div", { className: "flex min-h-64 flex-col items-center justify-center text-center", children: [
|
|
189
|
-
/* @__PURE__ */ jsx(
|
|
243
|
+
/* @__PURE__ */ jsx(
|
|
244
|
+
Icon,
|
|
245
|
+
{
|
|
246
|
+
icon: "mdi:database-outline",
|
|
247
|
+
className: "mb-3 text-text-secondary",
|
|
248
|
+
width: 40
|
|
249
|
+
}
|
|
250
|
+
),
|
|
190
251
|
/* @__PURE__ */ jsx("p", { className: "font-medium text-text-primary", children: tr("fluidgrids.dataSinks.selectTitle", "Select a DataSink") }),
|
|
191
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-text-secondary", children: tr(
|
|
252
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-text-secondary", children: tr(
|
|
253
|
+
"fluidgrids.dataSinks.selectDescription",
|
|
254
|
+
"Choose a sink to inspect its latest payload."
|
|
255
|
+
) })
|
|
192
256
|
] }),
|
|
193
257
|
selectedSink && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
194
258
|
/* @__PURE__ */ jsxs("div", { className: "mb-5 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [
|
|
@@ -196,18 +260,42 @@ function DataSinkDashboardPage() {
|
|
|
196
260
|
/* @__PURE__ */ jsx("h2", { className: "truncate text-lg font-semibold text-text-primary", children: selectedSink.name || selectedSink.key }),
|
|
197
261
|
/* @__PURE__ */ jsxs("p", { className: "mt-1 font-mono text-xs text-text-secondary", children: [
|
|
198
262
|
selectedSink.key,
|
|
199
|
-
" \xB7
|
|
263
|
+
" \xB7",
|
|
264
|
+
" ",
|
|
200
265
|
tr("fluidgrids.dataSinks.updated", "Updated"),
|
|
201
266
|
" ",
|
|
202
267
|
new Date(selectedSink.lastRefreshedAt).toLocaleString()
|
|
203
268
|
] })
|
|
204
269
|
] }),
|
|
205
|
-
/* @__PURE__ */ jsxs(
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
270
|
+
/* @__PURE__ */ jsxs(
|
|
271
|
+
Button,
|
|
272
|
+
{
|
|
273
|
+
variant: "outline",
|
|
274
|
+
size: "sm",
|
|
275
|
+
onClick: () => void refetchData(),
|
|
276
|
+
disabled: dataLoading,
|
|
277
|
+
children: [
|
|
278
|
+
/* @__PURE__ */ jsx(
|
|
279
|
+
Icon,
|
|
280
|
+
{
|
|
281
|
+
icon: "mdi:database-refresh-outline",
|
|
282
|
+
className: "mr-1",
|
|
283
|
+
width: 16
|
|
284
|
+
}
|
|
285
|
+
),
|
|
286
|
+
tr("fluidgrids.dataSinks.refreshPayload", "Refresh payload")
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
)
|
|
209
290
|
] }),
|
|
210
|
-
dataError && /* @__PURE__ */ jsx(
|
|
291
|
+
dataError && /* @__PURE__ */ jsx(
|
|
292
|
+
"div",
|
|
293
|
+
{
|
|
294
|
+
role: "alert",
|
|
295
|
+
className: "mb-4 rounded-lg border border-status-error-border bg-status-error-bg-subtle p-3 text-sm text-status-error-text",
|
|
296
|
+
children: dataError.message
|
|
297
|
+
}
|
|
298
|
+
),
|
|
211
299
|
dataLoading && !sinkData && /* @__PURE__ */ jsx("div", { className: "h-64 animate-pulse rounded-lg bg-background-primary" }),
|
|
212
300
|
!dataLoading && sinkData && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
213
301
|
/* @__PURE__ */ jsxs("div", { className: "mb-4 flex flex-wrap gap-3 text-xs text-text-secondary", children: [
|
|
@@ -285,10 +373,7 @@ function InsightsPage({ showErrors = false }) {
|
|
|
285
373
|
const retried = await retryMany([run.id]);
|
|
286
374
|
if (retried.length === 0) {
|
|
287
375
|
toast.error(
|
|
288
|
-
tr(
|
|
289
|
-
"fluidgrids.insights.retryFailed",
|
|
290
|
-
"Could not retry the failed run"
|
|
291
|
-
)
|
|
376
|
+
tr("fluidgrids.insights.retryFailed", "Could not retry the failed run")
|
|
292
377
|
);
|
|
293
378
|
return;
|
|
294
379
|
}
|
|
@@ -298,11 +383,27 @@ function InsightsPage({ showErrors = false }) {
|
|
|
298
383
|
navigate(`../runs/${retried[0].runId}`);
|
|
299
384
|
};
|
|
300
385
|
if (error) {
|
|
301
|
-
return /* @__PURE__ */ jsx("div", { className: "min-h-screen bg-background-primary p-4 sm:p-6", children: /* @__PURE__ */ jsxs(
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
386
|
+
return /* @__PURE__ */ jsx("div", { className: "min-h-screen bg-background-primary p-4 sm:p-6", children: /* @__PURE__ */ jsxs(
|
|
387
|
+
"div",
|
|
388
|
+
{
|
|
389
|
+
className: "rounded-lg border border-status-error-border bg-status-error-bg-subtle p-5 text-status-error-text",
|
|
390
|
+
role: "alert",
|
|
391
|
+
children: [
|
|
392
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium", children: tr("fluidgrids.insights.loadError", "Could not load insights") }),
|
|
393
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm", children: error.message }),
|
|
394
|
+
/* @__PURE__ */ jsx(
|
|
395
|
+
Button,
|
|
396
|
+
{
|
|
397
|
+
variant: "outline",
|
|
398
|
+
size: "sm",
|
|
399
|
+
className: "mt-3",
|
|
400
|
+
onClick: () => void refetch(),
|
|
401
|
+
children: tr("fluidgrids.insights.retryLoad", "Try again")
|
|
402
|
+
}
|
|
403
|
+
)
|
|
404
|
+
]
|
|
405
|
+
}
|
|
406
|
+
) });
|
|
306
407
|
}
|
|
307
408
|
const successRate = summary ? normalizedRate(summary) : 0;
|
|
308
409
|
const failureRate = summary ? percentage(summary.runsFailedCount, summary.runsCountTotal) : 0;
|
|
@@ -317,39 +418,54 @@ function InsightsPage({ showErrors = false }) {
|
|
|
317
418
|
"Understand workflow health, failures, and the nodes that need attention."
|
|
318
419
|
) })
|
|
319
420
|
] }),
|
|
320
|
-
/* @__PURE__ */ jsxs(
|
|
321
|
-
|
|
322
|
-
tr("fluidgrids.insights.refresh", "Refresh")
|
|
323
|
-
] })
|
|
324
|
-
] }),
|
|
325
|
-
/* @__PURE__ */ jsxs("div", { className: "mb-6 flex gap-1 border-b border-border-secondary", role: "tablist", children: [
|
|
326
|
-
/* @__PURE__ */ jsx(
|
|
327
|
-
"button",
|
|
328
|
-
{
|
|
329
|
-
role: "tab",
|
|
330
|
-
"aria-selected": activeTab === "overview",
|
|
331
|
-
onClick: () => {
|
|
332
|
-
setActiveTab("overview");
|
|
333
|
-
if (showErrors) navigate("../insights");
|
|
334
|
-
},
|
|
335
|
-
className: `border-b-2 px-3 py-2 text-sm ${activeTab === "overview" ? "border-action-primary-bg text-text-primary" : "border-transparent text-text-secondary"}`,
|
|
336
|
-
children: tr("fluidgrids.insights.overviewTab", "Overview")
|
|
337
|
-
}
|
|
338
|
-
),
|
|
339
|
-
/* @__PURE__ */ jsx(
|
|
340
|
-
"button",
|
|
421
|
+
/* @__PURE__ */ jsxs(
|
|
422
|
+
Button,
|
|
341
423
|
{
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
children: tr("fluidgrids.insights.errorsTab", "Error analytics")
|
|
424
|
+
variant: "outline",
|
|
425
|
+
onClick: () => void refetch(),
|
|
426
|
+
disabled: loading,
|
|
427
|
+
children: [
|
|
428
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:refresh", className: "mr-1", width: 16 }),
|
|
429
|
+
tr("fluidgrids.insights.refresh", "Refresh")
|
|
430
|
+
]
|
|
350
431
|
}
|
|
351
432
|
)
|
|
352
433
|
] }),
|
|
434
|
+
/* @__PURE__ */ jsxs(
|
|
435
|
+
"div",
|
|
436
|
+
{
|
|
437
|
+
className: "mb-6 flex gap-1 border-b border-border-secondary",
|
|
438
|
+
role: "tablist",
|
|
439
|
+
children: [
|
|
440
|
+
/* @__PURE__ */ jsx(
|
|
441
|
+
"button",
|
|
442
|
+
{
|
|
443
|
+
role: "tab",
|
|
444
|
+
"aria-selected": activeTab === "overview",
|
|
445
|
+
onClick: () => {
|
|
446
|
+
setActiveTab("overview");
|
|
447
|
+
if (showErrors) navigate("../insights");
|
|
448
|
+
},
|
|
449
|
+
className: `border-b-2 px-3 py-2 text-sm ${activeTab === "overview" ? "border-action-primary-bg text-text-primary" : "border-transparent text-text-secondary"}`,
|
|
450
|
+
children: tr("fluidgrids.insights.overviewTab", "Overview")
|
|
451
|
+
}
|
|
452
|
+
),
|
|
453
|
+
/* @__PURE__ */ jsx(
|
|
454
|
+
"button",
|
|
455
|
+
{
|
|
456
|
+
role: "tab",
|
|
457
|
+
"aria-selected": activeTab === "errors",
|
|
458
|
+
onClick: () => {
|
|
459
|
+
setActiveTab("errors");
|
|
460
|
+
if (!showErrors) navigate("../insights/errors");
|
|
461
|
+
},
|
|
462
|
+
className: `border-b-2 px-3 py-2 text-sm ${activeTab === "errors" ? "border-action-primary-bg text-text-primary" : "border-transparent text-text-secondary"}`,
|
|
463
|
+
children: tr("fluidgrids.insights.errorsTab", "Error analytics")
|
|
464
|
+
}
|
|
465
|
+
)
|
|
466
|
+
]
|
|
467
|
+
}
|
|
468
|
+
),
|
|
353
469
|
loading && !summary ? /* @__PURE__ */ jsx(LoadingState, {}) : activeTab === "overview" && summary ? /* @__PURE__ */ jsx(
|
|
354
470
|
OverviewContent,
|
|
355
471
|
{
|
|
@@ -384,55 +500,82 @@ function OverviewContent({
|
|
|
384
500
|
}) {
|
|
385
501
|
const totalDuration = summary.runsCompletedCount * (summary.avgWorkflowExecutionTimeSeconds ?? 0);
|
|
386
502
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
387
|
-
/* @__PURE__ */ jsxs(
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
503
|
+
/* @__PURE__ */ jsxs(
|
|
504
|
+
"section",
|
|
505
|
+
{
|
|
506
|
+
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
507
|
+
"aria-label": tr("fluidgrids.insights.healthLabel", "Workflow health"),
|
|
508
|
+
children: [
|
|
509
|
+
/* @__PURE__ */ jsx(
|
|
510
|
+
MetricCard,
|
|
511
|
+
{
|
|
512
|
+
icon: "mdi:chart-line",
|
|
513
|
+
label: tr("fluidgrids.insights.successRate", "Success rate"),
|
|
514
|
+
value: `${successRate.toFixed(1)}%`,
|
|
515
|
+
detail: `${summary.runsCompletedCount.toLocaleString()} completed runs`,
|
|
516
|
+
tone: "text-status-success-text"
|
|
517
|
+
}
|
|
518
|
+
),
|
|
519
|
+
/* @__PURE__ */ jsx(
|
|
520
|
+
MetricCard,
|
|
521
|
+
{
|
|
522
|
+
icon: "mdi:clock-outline",
|
|
523
|
+
label: tr("fluidgrids.insights.avgDuration", "Average duration"),
|
|
524
|
+
value: formatDuration(summary.avgWorkflowExecutionTimeSeconds),
|
|
525
|
+
detail: `${summary.runsCountTotal.toLocaleString()} total runs`
|
|
526
|
+
}
|
|
527
|
+
),
|
|
528
|
+
/* @__PURE__ */ jsx(
|
|
529
|
+
MetricCard,
|
|
530
|
+
{
|
|
531
|
+
icon: "mdi:alert-circle-outline",
|
|
532
|
+
label: tr("fluidgrids.insights.failedRuns", "Failed runs"),
|
|
533
|
+
value: summary.runsFailedCount.toLocaleString(),
|
|
534
|
+
detail: `${failureRate.toFixed(1)}% of all runs`,
|
|
535
|
+
tone: "text-status-error-text"
|
|
536
|
+
}
|
|
537
|
+
),
|
|
538
|
+
/* @__PURE__ */ jsx(
|
|
539
|
+
MetricCard,
|
|
540
|
+
{
|
|
541
|
+
icon: "mdi:timer-play-outline",
|
|
542
|
+
label: tr(
|
|
543
|
+
"fluidgrids.insights.timeProcessed",
|
|
544
|
+
"Execution time processed"
|
|
545
|
+
),
|
|
546
|
+
value: formatDuration(totalDuration),
|
|
547
|
+
detail: tr(
|
|
548
|
+
"fluidgrids.insights.timeProcessedDetail",
|
|
549
|
+
"Based on completed runs; time-saved baselines are not configured."
|
|
550
|
+
)
|
|
551
|
+
}
|
|
552
|
+
)
|
|
553
|
+
]
|
|
554
|
+
}
|
|
555
|
+
),
|
|
427
556
|
/* @__PURE__ */ jsxs("section", { className: "grid gap-6 lg:grid-cols-2", children: [
|
|
428
557
|
/* @__PURE__ */ jsx(
|
|
429
558
|
InsightList,
|
|
430
559
|
{
|
|
431
|
-
title: tr(
|
|
432
|
-
|
|
560
|
+
title: tr(
|
|
561
|
+
"fluidgrids.insights.topFailingWorkflows",
|
|
562
|
+
"Top failing workflows"
|
|
563
|
+
),
|
|
564
|
+
empty: tr(
|
|
565
|
+
"fluidgrids.insights.noFailedWorkflows",
|
|
566
|
+
"No failed workflows in this period."
|
|
567
|
+
),
|
|
433
568
|
children: topWorkflows.map((workflow) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
434
569
|
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-text-primary", children: workflow.label }),
|
|
435
|
-
/* @__PURE__ */ jsx("div", { className: "h-2 w-28 overflow-hidden rounded-full bg-background-tertiary", children: /* @__PURE__ */ jsx(
|
|
570
|
+
/* @__PURE__ */ jsx("div", { className: "h-2 w-28 overflow-hidden rounded-full bg-background-tertiary", children: /* @__PURE__ */ jsx(
|
|
571
|
+
"div",
|
|
572
|
+
{
|
|
573
|
+
className: "h-full rounded-full bg-status-error-bg",
|
|
574
|
+
style: {
|
|
575
|
+
width: `${Math.max(8, percentage(workflow.count, topWorkflows[0]?.count ?? 1))}%`
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
) }),
|
|
436
579
|
/* @__PURE__ */ jsx("span", { className: "w-8 text-right text-sm font-medium text-text-secondary", children: workflow.count })
|
|
437
580
|
] }, workflow.workflowKey))
|
|
438
581
|
}
|
|
@@ -441,10 +584,21 @@ function OverviewContent({
|
|
|
441
584
|
InsightList,
|
|
442
585
|
{
|
|
443
586
|
title: tr("fluidgrids.insights.topFailingNodes", "Top failing nodes"),
|
|
444
|
-
empty: tr(
|
|
587
|
+
empty: tr(
|
|
588
|
+
"fluidgrids.insights.noFailedNodes",
|
|
589
|
+
"No node failures in this period."
|
|
590
|
+
),
|
|
445
591
|
children: topNodes.map((node) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
446
592
|
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-text-primary", children: node.nodeType }),
|
|
447
|
-
/* @__PURE__ */ jsx("div", { className: "h-2 w-28 overflow-hidden rounded-full bg-background-tertiary", children: /* @__PURE__ */ jsx(
|
|
593
|
+
/* @__PURE__ */ jsx("div", { className: "h-2 w-28 overflow-hidden rounded-full bg-background-tertiary", children: /* @__PURE__ */ jsx(
|
|
594
|
+
"div",
|
|
595
|
+
{
|
|
596
|
+
className: "h-full rounded-full bg-status-warning-bg",
|
|
597
|
+
style: {
|
|
598
|
+
width: `${Math.max(8, percentage(node.failureCount, topNodes[0]?.failureCount ?? 1))}%`
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
) }),
|
|
448
602
|
/* @__PURE__ */ jsx("span", { className: "w-8 text-right text-sm font-medium text-text-secondary", children: node.failureCount })
|
|
449
603
|
] }, node.nodeType))
|
|
450
604
|
}
|
|
@@ -474,19 +628,69 @@ function ErrorContent({
|
|
|
474
628
|
}) {
|
|
475
629
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
476
630
|
/* @__PURE__ */ jsxs("section", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4", children: [
|
|
477
|
-
/* @__PURE__ */ jsx(
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
631
|
+
/* @__PURE__ */ jsx(
|
|
632
|
+
MetricCard,
|
|
633
|
+
{
|
|
634
|
+
icon: "mdi:alert-outline",
|
|
635
|
+
label: tr("fluidgrids.insights.failureRate", "Failure rate"),
|
|
636
|
+
value: `${summary ? percentage(summary.runsFailedCount, summary.runsCountTotal).toFixed(1) : "0.0"}%`,
|
|
637
|
+
tone: "text-status-error-text"
|
|
638
|
+
}
|
|
639
|
+
),
|
|
640
|
+
/* @__PURE__ */ jsx(
|
|
641
|
+
MetricCard,
|
|
642
|
+
{
|
|
643
|
+
icon: "mdi:counter",
|
|
644
|
+
label: tr("fluidgrids.insights.failureCount", "Failures captured"),
|
|
645
|
+
value: failedRuns.length.toLocaleString(),
|
|
646
|
+
detail: summary ? `${summary.runsFailedCount.toLocaleString()} total recorded` : void 0
|
|
647
|
+
}
|
|
648
|
+
),
|
|
649
|
+
/* @__PURE__ */ jsx(
|
|
650
|
+
MetricCard,
|
|
651
|
+
{
|
|
652
|
+
icon: "mdi:alert-decagram-outline",
|
|
653
|
+
label: tr("fluidgrids.insights.commonError", "Most common error"),
|
|
654
|
+
value: commonError?.key ?? "\u2014",
|
|
655
|
+
detail: commonError ? `${commonError.count} occurrences` : void 0
|
|
656
|
+
}
|
|
657
|
+
),
|
|
658
|
+
/* @__PURE__ */ jsx(
|
|
659
|
+
MetricCard,
|
|
660
|
+
{
|
|
661
|
+
icon: "mdi:repeat",
|
|
662
|
+
label: tr(
|
|
663
|
+
"fluidgrids.insights.recoveredByRetry",
|
|
664
|
+
"Recovered by retry"
|
|
665
|
+
),
|
|
666
|
+
value: "\u2014",
|
|
667
|
+
detail: tr(
|
|
668
|
+
"fluidgrids.insights.retryBaselineMissing",
|
|
669
|
+
"Retry recovery baseline is not exposed by the service yet."
|
|
670
|
+
),
|
|
671
|
+
tone: "text-text-secondary"
|
|
672
|
+
}
|
|
673
|
+
)
|
|
481
674
|
] }),
|
|
482
675
|
/* @__PURE__ */ jsxs("section", { className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)]", children: [
|
|
483
676
|
/* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border-secondary bg-background-secondary p-5", children: [
|
|
484
677
|
/* @__PURE__ */ jsx("h2", { className: "mb-4 text-base font-semibold text-text-primary", children: tr("fluidgrids.insights.errorsByType", "Errors by type") }),
|
|
485
678
|
/* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
486
|
-
failureBreakdown.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: tr(
|
|
679
|
+
failureBreakdown.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: tr(
|
|
680
|
+
"fluidgrids.insights.noErrors",
|
|
681
|
+
"No errors in this period."
|
|
682
|
+
) }),
|
|
487
683
|
failureBreakdown.map((entry) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
488
684
|
/* @__PURE__ */ jsx("span", { className: "w-28 truncate text-sm text-text-secondary", children: entry.key }),
|
|
489
|
-
/* @__PURE__ */ jsx("div", { className: "h-2 flex-1 overflow-hidden rounded-full bg-background-tertiary", children: /* @__PURE__ */ jsx(
|
|
685
|
+
/* @__PURE__ */ jsx("div", { className: "h-2 flex-1 overflow-hidden rounded-full bg-background-tertiary", children: /* @__PURE__ */ jsx(
|
|
686
|
+
"div",
|
|
687
|
+
{
|
|
688
|
+
className: "h-full rounded-full bg-status-error-bg",
|
|
689
|
+
style: {
|
|
690
|
+
width: `${Math.max(8, percentage(entry.count, failureBreakdown[0]?.count ?? 1))}%`
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
) }),
|
|
490
694
|
/* @__PURE__ */ jsx("span", { className: "w-8 text-right text-sm font-medium text-text-primary", children: entry.count })
|
|
491
695
|
] }, entry.key))
|
|
492
696
|
] })
|
|
@@ -494,24 +698,47 @@ function ErrorContent({
|
|
|
494
698
|
/* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border-secondary bg-background-secondary p-5", children: [
|
|
495
699
|
/* @__PURE__ */ jsxs("div", { className: "mb-4 flex items-center justify-between gap-3", children: [
|
|
496
700
|
/* @__PURE__ */ jsx("h2", { className: "text-base font-semibold text-text-primary", children: tr("fluidgrids.insights.recentFailures", "Recent failures") }),
|
|
497
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-text-secondary", children: tr(
|
|
701
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-text-secondary", children: tr(
|
|
702
|
+
"fluidgrids.insights.sampleNote",
|
|
703
|
+
"Showing the latest 100 failures"
|
|
704
|
+
) })
|
|
498
705
|
] }),
|
|
499
706
|
/* @__PURE__ */ jsxs("div", { className: "divide-y divide-border-secondary", children: [
|
|
500
|
-
failedRuns.length === 0 && /* @__PURE__ */ jsx("p", { className: "py-3 text-sm text-text-secondary", children: tr(
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
707
|
+
failedRuns.length === 0 && /* @__PURE__ */ jsx("p", { className: "py-3 text-sm text-text-secondary", children: tr(
|
|
708
|
+
"fluidgrids.insights.noRecentFailures",
|
|
709
|
+
"No recent failures."
|
|
710
|
+
) }),
|
|
711
|
+
failedRuns.slice(0, 12).map((run) => /* @__PURE__ */ jsxs(
|
|
712
|
+
"div",
|
|
713
|
+
{
|
|
714
|
+
className: "flex flex-col gap-2 py-3 sm:flex-row sm:items-center sm:gap-4",
|
|
715
|
+
children: [
|
|
716
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
717
|
+
/* @__PURE__ */ jsx("p", { className: "truncate text-sm font-medium text-text-primary", children: run.errorMessage || run.errorType || "Workflow failed" }),
|
|
718
|
+
/* @__PURE__ */ jsxs("p", { className: "mt-0.5 truncate text-xs text-text-secondary", children: [
|
|
719
|
+
run.workflow?.name || run.workflowKey,
|
|
720
|
+
" \xB7",
|
|
721
|
+
" ",
|
|
722
|
+
run.id.slice(0, 10),
|
|
723
|
+
" \xB7 ",
|
|
724
|
+
formatDuration(run.duration)
|
|
725
|
+
] })
|
|
726
|
+
] }),
|
|
727
|
+
/* @__PURE__ */ jsx("span", { className: "rounded-full bg-status-error-bg-subtle px-2 py-1 text-xs text-status-error-text", children: run.errorType || "UNKNOWN" }),
|
|
728
|
+
/* @__PURE__ */ jsx(
|
|
729
|
+
Button,
|
|
730
|
+
{
|
|
731
|
+
variant: "outline",
|
|
732
|
+
size: "sm",
|
|
733
|
+
onClick: () => void retry(run),
|
|
734
|
+
disabled: retryLoading,
|
|
735
|
+
children: tr("fluidgrids.insights.retry", "Retry")
|
|
736
|
+
}
|
|
737
|
+
)
|
|
738
|
+
]
|
|
739
|
+
},
|
|
740
|
+
run.id
|
|
741
|
+
))
|
|
515
742
|
] })
|
|
516
743
|
] })
|
|
517
744
|
] })
|
|
@@ -522,5 +749,5 @@ function ErrorAnalyticsPage() {
|
|
|
522
749
|
}
|
|
523
750
|
|
|
524
751
|
export { DataSinkDashboardPage, ErrorAnalyticsPage, InsightsPage };
|
|
525
|
-
//# sourceMappingURL=chunk-
|
|
526
|
-
//# sourceMappingURL=chunk-
|
|
752
|
+
//# sourceMappingURL=chunk-FKOUPL6Z.js.map
|
|
753
|
+
//# sourceMappingURL=chunk-FKOUPL6Z.js.map
|