@64mb/freelens-power 2.1.1 → 2.2.1
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/README.md +4 -4
- package/out/main/common/power-logs.js.map +1 -1
- package/out/main/power-logs-child.js +3 -3
- package/out/main/power-logs-child.js.map +1 -1
- package/out/main/power-logs-database.js +165 -7
- package/out/main/power-logs-database.js.map +1 -1
- package/out/main/power-logs-ipc.js +12 -3
- package/out/main/power-logs-ipc.js.map +1 -1
- package/out/main/power-logs-worker.js +29 -7
- package/out/main/power-logs-worker.js.map +1 -1
- package/out/renderer/ai-diagnostic-handoff.js +2 -2
- package/out/renderer/ai-diagnostic-handoff.js.map +1 -1
- package/out/renderer/ai-extras.js +1 -1
- package/out/renderer/ai-extras.js.map +1 -1
- package/out/renderer/ai.js +4 -1
- package/out/renderer/ai.js.map +1 -1
- package/out/renderer/dashboard.js +10 -3
- package/out/renderer/dashboard.js.map +1 -1
- package/out/renderer/diagnostics-screen-finding.js +51 -0
- package/out/renderer/diagnostics-screen-finding.js.map +1 -0
- package/out/renderer/diagnostics.css.js +1 -1
- package/out/renderer/diagnostics.css.js.map +1 -1
- package/out/renderer/diagnostics.js +12 -0
- package/out/renderer/diagnostics.js.map +1 -1
- package/out/renderer/index.js +2 -0
- package/out/renderer/index.js.map +1 -1
- package/out/renderer/pod-details-enhancements.js +106 -0
- package/out/renderer/pod-details-enhancements.js.map +1 -0
- package/out/renderer/power-log-json-cell.js +15 -14
- package/out/renderer/power-log-json-cell.js.map +1 -1
- package/out/renderer/power-log-json.js +14 -6
- package/out/renderer/power-log-json.js.map +1 -1
- package/out/renderer/power-log-sql-editor.js +31 -2
- package/out/renderer/power-log-sql-editor.js.map +1 -1
- package/out/renderer/power-logs-client.js +5 -0
- package/out/renderer/power-logs-client.js.map +1 -1
- package/out/renderer/power-logs-entrypoints.js +10 -36
- package/out/renderer/power-logs-entrypoints.js.map +1 -1
- package/out/renderer/power-logs.css.js +9 -2
- package/out/renderer/power-logs.css.js.map +1 -1
- package/out/renderer/power-logs.js +220 -91
- package/out/renderer/power-logs.js.map +1 -1
- package/out/renderer/preferences/logs-preferences.js +1 -1
- package/out/renderer/preferences/logs-preferences.js.map +1 -1
- package/out/renderer/relationship-map-finding.js +53 -0
- package/out/renderer/relationship-map-finding.js.map +1 -0
- package/out/renderer/resource-relationships.css.js +6 -0
- package/out/renderer/resource-relationships.css.js.map +1 -1
- package/out/renderer/resource-relationships.js +50 -5
- package/out/renderer/resource-relationships.js.map +1 -1
- package/out/renderer/resource-search.js +13 -3
- package/out/renderer/resource-search.js.map +1 -1
- package/out/renderer/src/common/gateway-relationships.js +8 -7
- package/out/renderer/src/common/gateway-relationships.js.map +1 -1
- package/out/renderer/src/common/power-log-json-filter-sql.js +12 -0
- package/out/renderer/src/common/power-log-json-filter-sql.js.map +1 -1
- package/out/renderer/src/common/power-log-json-preset.js +2 -2
- package/out/renderer/src/common/power-log-json-preset.js.map +1 -1
- package/out/renderer/src/common/power-logs.js.map +1 -1
- package/out/renderer/src/common/resource-relationships.js +10 -8
- package/out/renderer/src/common/resource-relationships.js.map +1 -1
- package/package.json +1 -1
|
@@ -46,9 +46,9 @@ var levels = [
|
|
|
46
46
|
"unknown"
|
|
47
47
|
];
|
|
48
48
|
var examples = [
|
|
49
|
-
["Recent", "SELECT
|
|
50
|
-
["Errors", "SELECT
|
|
51
|
-
["Timeline", "SELECT
|
|
49
|
+
["Recent", "SELECT timestamp, level, message, container, pod FROM logs ORDER BY timestamp DESC NULLS LAST LIMIT 200"],
|
|
50
|
+
["Errors", "SELECT message, count(*) AS occurrences FROM logs WHERE level IN ('error','fatal') GROUP BY message ORDER BY occurrences DESC LIMIT 200"],
|
|
51
|
+
["Timeline", "SELECT (timestamp / 60000) * 60000 AS minute, UPPER(level) AS level, count(*) AS lines FROM logs GROUP BY minute, level ORDER BY minute"],
|
|
52
52
|
["JSON", "SELECT fieldsJson FROM logs WHERE fieldsJson IS NOT NULL LIMIT 100"]
|
|
53
53
|
];
|
|
54
54
|
var sqlColumnWidth = (column) => column === "message" || column === "fieldsJson" ? 360 : column === "level" ? 90 : 200;
|
|
@@ -324,7 +324,7 @@ function LogDetails({ record, jsonColumn, onClose, onFilter }) {
|
|
|
324
324
|
]
|
|
325
325
|
});
|
|
326
326
|
}
|
|
327
|
-
var
|
|
327
|
+
var sameFieldValue = (a, b) => a.path.length === b.path.length && a.path.every((part, index) => part === b.path[index]) && require_power_log_field_filters.jsonValuesEqual(a.value, b.value);
|
|
328
328
|
var fieldFilterLabel = (filter) => `${filter.path.reduce((path, part) => `${path}[${typeof part === "number" ? part : JSON.stringify(part)}]`, "$")} ${filter.operator === "eq" ? "=" : "!="} ${JSON.stringify(filter.value)}`;
|
|
329
329
|
function FieldFilters({ filters, sql = false, disabled = false, onRemove }) {
|
|
330
330
|
if (!filters.length) return null;
|
|
@@ -372,6 +372,7 @@ function Workspace({ clusterId, contextId }) {
|
|
|
372
372
|
const [text, setText] = require__global_external_react.useState("");
|
|
373
373
|
const [level, setLevel] = require__global_external_react.useState("");
|
|
374
374
|
const [source, setSource] = require__global_external_react.useState(initialSource);
|
|
375
|
+
const [savedPoolFull, setSavedPoolFull] = require__global_external_react.useState(false);
|
|
375
376
|
const [fieldFilters, setFieldFilters] = require__global_external_react.useState([]);
|
|
376
377
|
const matchFields = require__global_external_react.useMemo(() => require_power_log_field_filters.compileJsonFilters(fieldFilters), [fieldFilters]);
|
|
377
378
|
const parsedFields = require__global_external_react.useRef(/* @__PURE__ */ new WeakMap());
|
|
@@ -407,6 +408,7 @@ function Workspace({ clusterId, contextId }) {
|
|
|
407
408
|
const [capturePending, setCapturePending] = require__global_external_react.useState(false);
|
|
408
409
|
const [captureMinutes, setCaptureMinutes] = require__global_external_react.useState(15);
|
|
409
410
|
const [previous, setPrevious] = require__global_external_react.useState(false);
|
|
411
|
+
const [sqlFitVersion, setSqlFitVersion] = require__global_external_react.useState(0);
|
|
410
412
|
const [sql, updateSql] = require__global_external_react.useState(examples[0][1]);
|
|
411
413
|
const sqlDraft = require__global_external_react.useRef(sql);
|
|
412
414
|
sqlDraft.current = sql;
|
|
@@ -761,6 +763,7 @@ function Workspace({ clusterId, contextId }) {
|
|
|
761
763
|
if (title === "Recent") {
|
|
762
764
|
const query = examples[0][1];
|
|
763
765
|
setSql(query);
|
|
766
|
+
setSqlFitVersion((version) => version + 1);
|
|
764
767
|
setSelectedSqlRow(void 0);
|
|
765
768
|
if (execute && captured) runQuery(captured, query);
|
|
766
769
|
return;
|
|
@@ -789,6 +792,7 @@ function Workspace({ clusterId, contextId }) {
|
|
|
789
792
|
}
|
|
790
793
|
prepared = require_power_log_json_preset.buildJsonProjectionSql(keys);
|
|
791
794
|
setSql(prepared);
|
|
795
|
+
setSqlFitVersion((version) => version + 1);
|
|
792
796
|
setSelectedSqlRow(void 0);
|
|
793
797
|
} catch {
|
|
794
798
|
if (alive.current) setSqlError("Could not detect JSON fields for this snapshot. Try the preset again.");
|
|
@@ -805,7 +809,11 @@ function Workspace({ clusterId, contextId }) {
|
|
|
805
809
|
setError("This JSON value is too large or unsupported for filtering");
|
|
806
810
|
return;
|
|
807
811
|
}
|
|
808
|
-
|
|
812
|
+
const existing = fieldFilters.findIndex((current) => sameFieldValue(current, filter));
|
|
813
|
+
if (existing >= 0) {
|
|
814
|
+
if (fieldFilters[existing].operator !== filter.operator) setFieldFilters(fieldFilters.map((current, index) => index === existing ? filter : current));
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
809
817
|
if (fieldFilters.length >= 32) {
|
|
810
818
|
setError("Up to 32 JSON filters can be combined");
|
|
811
819
|
return;
|
|
@@ -842,7 +850,14 @@ function Workspace({ clusterId, contextId }) {
|
|
|
842
850
|
return;
|
|
843
851
|
}
|
|
844
852
|
const filters = activeSqlFilters?.filters ?? [];
|
|
845
|
-
|
|
853
|
+
const existing = filters.findIndex((current) => current.column === column && sameFieldValue(current, filter));
|
|
854
|
+
if (existing >= 0) {
|
|
855
|
+
if (filters[existing].operator !== filter.operator) applySqlFilters(filters.map((current, index) => index === existing ? {
|
|
856
|
+
...filter,
|
|
857
|
+
column
|
|
858
|
+
} : current));
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
846
861
|
if (filters.length >= 32) {
|
|
847
862
|
setSqlError("Up to 32 JSON filters can be combined");
|
|
848
863
|
return;
|
|
@@ -959,6 +974,82 @@ function Workspace({ clusterId, contextId }) {
|
|
|
959
974
|
if (alive.current) setDeletingCount(deleting.current.size);
|
|
960
975
|
}
|
|
961
976
|
};
|
|
977
|
+
const confirmDeleteCapture = (id) => {
|
|
978
|
+
const capture = captures.find((capture) => capture.id === id);
|
|
979
|
+
if (!capture) return;
|
|
980
|
+
require_extensions.Renderer.Component.ConfirmDialog.open({
|
|
981
|
+
message: /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
|
|
982
|
+
"Delete snapshot ",
|
|
983
|
+
/* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
|
|
984
|
+
"? This cannot be undone."
|
|
985
|
+
] }),
|
|
986
|
+
labelOk: "Delete snapshot",
|
|
987
|
+
ok: () => deleteCapture(id)
|
|
988
|
+
});
|
|
989
|
+
};
|
|
990
|
+
const confirmPersistentCapture = (capture) => {
|
|
991
|
+
const persistent = !capture.persistent;
|
|
992
|
+
require_extensions.Renderer.Component.ConfirmDialog.open({
|
|
993
|
+
message: persistent ? /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
|
|
994
|
+
"Keep snapshot ",
|
|
995
|
+
/* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
|
|
996
|
+
" until you delete it? It will survive restarts and will not expire automatically."
|
|
997
|
+
] }) : /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
|
|
998
|
+
"Allow snapshot ",
|
|
999
|
+
/* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
|
|
1000
|
+
" to expire? Its retention period will start again now."
|
|
1001
|
+
] }),
|
|
1002
|
+
labelOk: persistent ? "Keep snapshot" : "Allow expiration",
|
|
1003
|
+
ok: async () => {
|
|
1004
|
+
if (!alive.current || deleting.current.has(capture.id) || queryRef.current || captureController.current) return;
|
|
1005
|
+
deleting.current.add(capture.id);
|
|
1006
|
+
setDeletingCount(deleting.current.size);
|
|
1007
|
+
try {
|
|
1008
|
+
await drafts.flush();
|
|
1009
|
+
await client.setPersistent(capture.id, persistent);
|
|
1010
|
+
await refreshCaptures();
|
|
1011
|
+
} catch (error) {
|
|
1012
|
+
if (alive.current) {
|
|
1013
|
+
const full = error instanceof Error && error.message.includes("Saved snapshot limit reached");
|
|
1014
|
+
setSavedPoolFull(full);
|
|
1015
|
+
setError(full ? "Saved snapshot limit reached. Delete a saved snapshot or clear saved snapshots from all clusters." : "Could not update snapshot retention");
|
|
1016
|
+
}
|
|
1017
|
+
} finally {
|
|
1018
|
+
deleting.current.delete(capture.id);
|
|
1019
|
+
if (alive.current) setDeletingCount(deleting.current.size);
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
});
|
|
1023
|
+
};
|
|
1024
|
+
const clearSavedSnapshots = () => require_extensions.Renderer.Component.ConfirmDialog.open({
|
|
1025
|
+
message: "Delete all saved snapshots from all clusters? Temporary snapshots will be kept. This cannot be undone.",
|
|
1026
|
+
labelOk: "Clear saved snapshots",
|
|
1027
|
+
ok: async () => {
|
|
1028
|
+
if (queryRef.current || captureController.current || deleting.current.size) return;
|
|
1029
|
+
deleting.current.add("clear-saved");
|
|
1030
|
+
setDeletingCount(deleting.current.size);
|
|
1031
|
+
try {
|
|
1032
|
+
await drafts.flush();
|
|
1033
|
+
await client.clearPersistent();
|
|
1034
|
+
const removed = captures.filter((capture) => capture.persistent);
|
|
1035
|
+
for (const capture of removed) drafts.forget(capture.id);
|
|
1036
|
+
if (removed.some((capture) => capture.id === captureSelection.current)) {
|
|
1037
|
+
setCaptureId("");
|
|
1038
|
+
setResult(void 0);
|
|
1039
|
+
setResultEvidence(void 0);
|
|
1040
|
+
setSelectedSqlRow(void 0);
|
|
1041
|
+
}
|
|
1042
|
+
setSavedPoolFull(false);
|
|
1043
|
+
setError("");
|
|
1044
|
+
await refreshCaptures();
|
|
1045
|
+
} catch {
|
|
1046
|
+
if (alive.current) setError("Could not clear saved snapshots");
|
|
1047
|
+
} finally {
|
|
1048
|
+
deleting.current.delete("clear-saved");
|
|
1049
|
+
if (alive.current) setDeletingCount(deleting.current.size);
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
});
|
|
962
1053
|
const native = () => {
|
|
963
1054
|
const first = sources[0];
|
|
964
1055
|
const pod = require_extensions.Renderer.K8sApi.podsStore.getItems().find((item) => target?.kind === "Pod" ? item.metadata.uid === target.uid : item.metadata.uid === first?.podUid);
|
|
@@ -1156,10 +1247,15 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1156
1247
|
]
|
|
1157
1248
|
})
|
|
1158
1249
|
}) : /* @__PURE__ */ require_jsx_runtime.jsx(SourcePicker, {}),
|
|
1159
|
-
error && /* @__PURE__ */ require_jsx_runtime.
|
|
1250
|
+
error && /* @__PURE__ */ require_jsx_runtime.jsxs("div", {
|
|
1160
1251
|
role: "alert",
|
|
1161
1252
|
className: "power-logs-notice power-logs-error",
|
|
1162
|
-
children: error
|
|
1253
|
+
children: [error, savedPoolFull && /* @__PURE__ */ require_jsx_runtime.jsx("button", {
|
|
1254
|
+
type: "button",
|
|
1255
|
+
disabled: deletingCount > 0 || !!queryId || capturePending,
|
|
1256
|
+
onClick: clearSavedSnapshots,
|
|
1257
|
+
children: "Clear saved snapshots"
|
|
1258
|
+
})]
|
|
1163
1259
|
}),
|
|
1164
1260
|
tab === "live" ? /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
|
|
1165
1261
|
/* @__PURE__ */ require_jsx_runtime.jsxs("div", {
|
|
@@ -1321,7 +1417,7 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1321
1417
|
if (button && !button.disabled) {
|
|
1322
1418
|
event.preventDefault();
|
|
1323
1419
|
event.stopPropagation();
|
|
1324
|
-
|
|
1420
|
+
confirmDeleteCapture(button.dataset.captureDelete);
|
|
1325
1421
|
}
|
|
1326
1422
|
},
|
|
1327
1423
|
renderOption: (option, context) => {
|
|
@@ -1329,43 +1425,71 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1329
1425
|
if (context !== "menu" || !item) return option.label;
|
|
1330
1426
|
return /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
|
|
1331
1427
|
className: "power-logs-snapshot-option",
|
|
1332
|
-
children: [
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
"
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
event.stopPropagation()
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1428
|
+
children: [
|
|
1429
|
+
/* @__PURE__ */ require_jsx_runtime.jsx(require_native_tooltip.NativeTooltip, {
|
|
1430
|
+
title: option.label,
|
|
1431
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
|
|
1432
|
+
className: "power-logs-option-text",
|
|
1433
|
+
children: [/* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: item.target.name }), /* @__PURE__ */ require_jsx_runtime.jsxs("small", { children: [
|
|
1434
|
+
require_date_time.formatDateTime(item.createdAt),
|
|
1435
|
+
" · ",
|
|
1436
|
+
item.rows.toLocaleString(),
|
|
1437
|
+
" lines ·",
|
|
1438
|
+
" ",
|
|
1439
|
+
item.state[0].toUpperCase(),
|
|
1440
|
+
item.state.slice(1),
|
|
1441
|
+
item.persistent ? " · Persistent" : ""
|
|
1442
|
+
] })]
|
|
1443
|
+
})
|
|
1444
|
+
}),
|
|
1445
|
+
/* @__PURE__ */ require_jsx_runtime.jsx(require_native_tooltip.NativeTooltip, {
|
|
1446
|
+
title: item.persistent ? "Allow snapshot to expire" : "Keep snapshot",
|
|
1447
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsx("button", {
|
|
1448
|
+
type: "button",
|
|
1449
|
+
"aria-label": `${item.persistent ? "Allow expiration for" : "Keep"} snapshot ${item.target.name}`,
|
|
1450
|
+
"aria-pressed": Boolean(item.persistent),
|
|
1451
|
+
"data-capture-persistent": item.id,
|
|
1452
|
+
onKeyDown: (event) => event.stopPropagation(),
|
|
1453
|
+
disabled: !!queryId || capturePending || deletingCount > 0 || item.state === "collecting",
|
|
1454
|
+
onMouseDown: (event) => {
|
|
1455
|
+
event.preventDefault();
|
|
1456
|
+
event.stopPropagation();
|
|
1457
|
+
},
|
|
1458
|
+
onClick: (event) => {
|
|
1459
|
+
event.preventDefault();
|
|
1460
|
+
event.stopPropagation();
|
|
1461
|
+
confirmPersistentCapture(item);
|
|
1462
|
+
},
|
|
1463
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsx(require_extensions.Renderer.Component.Icon, {
|
|
1464
|
+
material: "push_pin",
|
|
1465
|
+
size: 16
|
|
1466
|
+
})
|
|
1467
|
+
})
|
|
1468
|
+
}),
|
|
1469
|
+
/* @__PURE__ */ require_jsx_runtime.jsx(require_native_tooltip.NativeTooltip, {
|
|
1470
|
+
title: "Delete snapshot (Alt+Delete)",
|
|
1471
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsx("button", {
|
|
1472
|
+
type: "button",
|
|
1473
|
+
"aria-label": `Delete snapshot ${item.target.name}`,
|
|
1474
|
+
"data-capture-delete": item.id,
|
|
1475
|
+
onKeyDown: (event) => event.stopPropagation(),
|
|
1476
|
+
disabled: !!queryId || capturePending || deletingCount > 0 || item.state === "collecting",
|
|
1477
|
+
onMouseDown: (event) => {
|
|
1478
|
+
event.preventDefault();
|
|
1479
|
+
event.stopPropagation();
|
|
1480
|
+
},
|
|
1481
|
+
onClick: (event) => {
|
|
1482
|
+
event.preventDefault();
|
|
1483
|
+
event.stopPropagation();
|
|
1484
|
+
confirmDeleteCapture(item.id);
|
|
1485
|
+
},
|
|
1486
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsx(require_extensions.Renderer.Component.Icon, {
|
|
1487
|
+
material: "delete_outline",
|
|
1488
|
+
size: 16
|
|
1489
|
+
})
|
|
1366
1490
|
})
|
|
1367
1491
|
})
|
|
1368
|
-
|
|
1492
|
+
]
|
|
1369
1493
|
});
|
|
1370
1494
|
},
|
|
1371
1495
|
value: captureId,
|
|
@@ -1382,7 +1506,7 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1382
1506
|
label: "Choose a snapshot"
|
|
1383
1507
|
}, ...captures.map((item) => ({
|
|
1384
1508
|
value: item.id,
|
|
1385
|
-
label: `${item.target.name} · ${require_date_time.formatDateTime(item.createdAt)} · ${item.rows.toLocaleString()} lines · ${item.state[0].toUpperCase()}${item.state.slice(1)}`
|
|
1509
|
+
label: `${item.target.name} · ${require_date_time.formatDateTime(item.createdAt)} · ${item.rows.toLocaleString()} lines · ${item.state[0].toUpperCase()}${item.state.slice(1)}${item.persistent ? " · Persistent" : ""}`
|
|
1386
1510
|
}))]
|
|
1387
1511
|
}),
|
|
1388
1512
|
/* @__PURE__ */ require_jsx_runtime.jsx(require_native_tooltip.NativeTooltip, {
|
|
@@ -1401,14 +1525,6 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1401
1525
|
})
|
|
1402
1526
|
]
|
|
1403
1527
|
}),
|
|
1404
|
-
!!chosenCapture?.notes.length && /* @__PURE__ */ require_jsx_runtime.jsxs("details", {
|
|
1405
|
-
className: "power-logs-snapshot-notes power-logs-muted",
|
|
1406
|
-
children: [/* @__PURE__ */ require_jsx_runtime.jsxs("summary", { children: [
|
|
1407
|
-
"Snapshot notes (",
|
|
1408
|
-
chosenCapture.notes.length,
|
|
1409
|
-
")"
|
|
1410
|
-
] }), chosenCapture.notes.map((note) => /* @__PURE__ */ require_jsx_runtime.jsx("div", { children: note }, note))]
|
|
1411
|
-
}),
|
|
1412
1528
|
/* @__PURE__ */ require_jsx_runtime.jsxs("div", {
|
|
1413
1529
|
className: "power-logs-toolbar power-logs-sql-tools",
|
|
1414
1530
|
children: [
|
|
@@ -1442,7 +1558,13 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1442
1558
|
examples.map(([title, query]) => /* @__PURE__ */ require_jsx_runtime.jsxs("button", {
|
|
1443
1559
|
type: "button",
|
|
1444
1560
|
disabled: !!queryId || capturePending,
|
|
1445
|
-
onClick: () =>
|
|
1561
|
+
onClick: () => {
|
|
1562
|
+
if (title === "JSON" || title === "Recent") applyPreset(title);
|
|
1563
|
+
else {
|
|
1564
|
+
setSql(query);
|
|
1565
|
+
setSqlFitVersion((version) => version + 1);
|
|
1566
|
+
}
|
|
1567
|
+
},
|
|
1446
1568
|
children: [
|
|
1447
1569
|
/* @__PURE__ */ require_jsx_runtime.jsx(Icon, {
|
|
1448
1570
|
material: title === "Recent" ? "history" : title === "Errors" ? "error_outline" : title === "Timeline" ? "timeline" : "data_object",
|
|
@@ -1464,7 +1586,8 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1464
1586
|
/* @__PURE__ */ require_jsx_runtime.jsx(require_power_log_sql_editor.SqlEditor, {
|
|
1465
1587
|
id: "power-logs-sql",
|
|
1466
1588
|
value: sql,
|
|
1467
|
-
onChange: setSql
|
|
1589
|
+
onChange: setSql,
|
|
1590
|
+
fitVersion: sqlFitVersion
|
|
1468
1591
|
}),
|
|
1469
1592
|
sqlError && /* @__PURE__ */ require_jsx_runtime.jsx("div", {
|
|
1470
1593
|
role: "alert",
|
|
@@ -1521,8 +1644,7 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1521
1644
|
value: cell === null ? null : String(cell),
|
|
1522
1645
|
column: result.columns[j],
|
|
1523
1646
|
rawValue: cell,
|
|
1524
|
-
Icon
|
|
1525
|
-
onFilter: sqlFilteringDisabled ? void 0 : (filter) => addSqlFilter(result.columns[j], filter)
|
|
1647
|
+
Icon
|
|
1526
1648
|
})
|
|
1527
1649
|
}, j))
|
|
1528
1650
|
}, i)) })
|
|
@@ -1592,41 +1714,48 @@ function Workspace({ clusterId, contextId }) {
|
|
|
1592
1714
|
] }),
|
|
1593
1715
|
/* @__PURE__ */ require_jsx_runtime.jsxs("div", {
|
|
1594
1716
|
className: "power-logs-muted power-logs-footer",
|
|
1595
|
-
children: [
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1717
|
+
children: [
|
|
1718
|
+
/* @__PURE__ */ require_jsx_runtime.jsx(require_native_tooltip.NativeTooltip, {
|
|
1719
|
+
title: `Gentle collection: ${limits.requestsPerSecond} requests/s, ${limits.bytesPerSecond / 1048576} MiB/s. Captures: ${limits.captureSourceLines.toLocaleString()} lines / ${limits.captureSourceBytes / 1048576} MiB per source, ${limits.captureBytes / 1048576} MiB total. Up to ${limits.captures} snapshots retained for ${limits.ttlMs / 6e4} minutes.`,
|
|
1720
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
|
|
1721
|
+
className: "power-logs-caption",
|
|
1722
|
+
children: [
|
|
1723
|
+
"Collection · ",
|
|
1724
|
+
limits.requestsPerSecond,
|
|
1725
|
+
" req/s · ",
|
|
1726
|
+
limits.bytesPerSecond / 1048576,
|
|
1727
|
+
" MiB/s ·",
|
|
1728
|
+
" ",
|
|
1729
|
+
limits.captureBytes / 1048576,
|
|
1730
|
+
" MiB/snapshot · Retention ",
|
|
1731
|
+
limits.ttlMs / 6e4,
|
|
1732
|
+
" min"
|
|
1733
|
+
]
|
|
1734
|
+
})
|
|
1735
|
+
}),
|
|
1736
|
+
tab === "live" && collectionNotes.length > 0 && /* @__PURE__ */ require_jsx_runtime.jsx(require_native_tooltip.NativeTooltip, {
|
|
1737
|
+
title: collectionNotes.join("\n"),
|
|
1738
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
|
|
1739
|
+
role: "note",
|
|
1740
|
+
className: "power-logs-notice power-logs-collection-note",
|
|
1741
|
+
children: [/* @__PURE__ */ require_jsx_runtime.jsx(Icon, {
|
|
1742
|
+
material: "warning_amber",
|
|
1743
|
+
size: 14
|
|
1744
|
+
}), /* @__PURE__ */ require_jsx_runtime.jsx("span", { children: collectionNotes.join(" · ") })]
|
|
1745
|
+
})
|
|
1746
|
+
}),
|
|
1747
|
+
tab === "captures" && chosenCapture && (chosenCapture.state === "partial" || chosenCapture.notes.length > 0) && /* @__PURE__ */ require_jsx_runtime.jsx(require_native_tooltip.NativeTooltip, {
|
|
1748
|
+
title: chosenCapture.notes.join("\n") || "Collection stopped or a source was unavailable; this snapshot may be incomplete",
|
|
1749
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
|
|
1750
|
+
role: "note",
|
|
1751
|
+
className: "power-logs-notice power-logs-collection-note",
|
|
1752
|
+
children: [/* @__PURE__ */ require_jsx_runtime.jsx(Icon, {
|
|
1753
|
+
material: "warning_amber",
|
|
1754
|
+
size: 14
|
|
1755
|
+
}), /* @__PURE__ */ require_jsx_runtime.jsx("span", { children: "Incomplete snapshot" })]
|
|
1756
|
+
})
|
|
1628
1757
|
})
|
|
1629
|
-
|
|
1758
|
+
]
|
|
1630
1759
|
})
|
|
1631
1760
|
]
|
|
1632
1761
|
});
|