mirror of
https://github.com/pocketbase/pocketbase.git
synced 2026-09-20 13:30:50 +02:00
added logs truncate endpoint
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
align-content: center;
|
||||
overflow: hidden;
|
||||
touch-action: none;
|
||||
transform: translateZ(0); /* try to use the GPU */
|
||||
transition:
|
||||
opacity var(--animationSpeed),
|
||||
max-height var(--slideAnimationSpeed),
|
||||
|
||||
@@ -4,9 +4,12 @@ export function defaultLogLevels() {
|
||||
t.span(null, "Default log levels:"),
|
||||
() => {
|
||||
const result = [];
|
||||
for (const level in app.utils.logLevels) {
|
||||
|
||||
const sorted = Object.keys(app.utils.logLevels).sort();
|
||||
for (const level of sorted) {
|
||||
result.push(t.code(null, `${level}:${app.utils.logLevels[level].label}`));
|
||||
}
|
||||
|
||||
return result;
|
||||
},
|
||||
);
|
||||
|
||||
+12
-4
@@ -19,9 +19,12 @@ export function logsList(logsSettings) {
|
||||
},
|
||||
get paddedDefaultLogLevels() {
|
||||
const result = [];
|
||||
for (let level in app.utils.logLevels) {
|
||||
|
||||
const sorted = Object.keys(app.utils.logLevels).sort();
|
||||
for (const level of sorted) {
|
||||
result.push(("" + level).padStart(2, " ") + ": " + app.utils.logLevels[level].label);
|
||||
}
|
||||
|
||||
return result;
|
||||
},
|
||||
});
|
||||
@@ -133,11 +136,16 @@ export function logsList(logsSettings) {
|
||||
if (log.data.referer && !log.data.referer.includes(window.location.host)) {
|
||||
keys.push({ key: "referer" });
|
||||
}
|
||||
} else {
|
||||
// extract the first 6 keys (excluding the error and details)
|
||||
} else if (keys.length < 6) {
|
||||
// extract the first 6 keys (excluding the error, details and system truncate keys)
|
||||
const allKeys = Object.keys(log.data);
|
||||
for (const key of allKeys) {
|
||||
if (key != "error" && key != "details" && keys.length < 6) {
|
||||
if (
|
||||
keys.length < 6
|
||||
&& key != "error"
|
||||
&& key != "details"
|
||||
&& key != "__pb_truncated__"
|
||||
) {
|
||||
keys.push({ key });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ window.app.modals.openLogsSettings = function(modalSettings = {
|
||||
onbeforeclose: null,
|
||||
onafterclose: null,
|
||||
onsave: null,
|
||||
ondelete: null,
|
||||
}) {
|
||||
const modal = logsSettingsModal(modalSettings);
|
||||
if (!modal) {
|
||||
@@ -26,6 +27,7 @@ function logsSettingsModal(modalSettings) {
|
||||
const data = store({
|
||||
isLoading: false,
|
||||
isSaving: false,
|
||||
isDeleting: false,
|
||||
formSettings: {},
|
||||
initFormSettingsHash: "",
|
||||
get hasChanges() {
|
||||
@@ -87,6 +89,39 @@ function logsSettingsModal(modalSettings) {
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteLogs() {
|
||||
data.isDeleting = true;
|
||||
|
||||
try {
|
||||
// @todo replace with SDK method
|
||||
await app.pb.send("/api/logs", { method: "DELETE" });
|
||||
|
||||
modalSettings.ondelete?.();
|
||||
|
||||
app.toasts.success("Successfully deleted all logs.");
|
||||
|
||||
data.isDeleting = false;
|
||||
|
||||
if (!data.hasChanges) {
|
||||
app.modals.close(modal);
|
||||
}
|
||||
} catch (err) {
|
||||
if (!err.isAbort) {
|
||||
data.isDeleting = false;
|
||||
app.checkApiError(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function confirmLogsDelete() {
|
||||
app.modals.confirm(
|
||||
"Do you really want to delete all logs?",
|
||||
() => deleteLogs(),
|
||||
null,
|
||||
{ yesButton: "Yes, delete" },
|
||||
);
|
||||
}
|
||||
|
||||
modal = t.div(
|
||||
{
|
||||
pbEvent: "logsSettingsModal",
|
||||
@@ -147,7 +182,7 @@ function logsSettingsModal(modalSettings) {
|
||||
{ className: "field-help" },
|
||||
"Set to ",
|
||||
t.code(null, 0),
|
||||
" to disable logs persistence.",
|
||||
" to delete all logs and disable logs persistence.",
|
||||
),
|
||||
),
|
||||
t.div(
|
||||
@@ -172,6 +207,46 @@ function logsSettingsModal(modalSettings) {
|
||||
defaultLogLevels(),
|
||||
),
|
||||
),
|
||||
t.div(
|
||||
{ className: "col-lg-12" },
|
||||
t.field(
|
||||
{ className: "field" },
|
||||
t.label(
|
||||
{ htmlFor: "logs.maxDataSize" },
|
||||
t.span({ className: "txt" }, "Max data size"),
|
||||
t.small(null, "(bytes)"),
|
||||
t.i({
|
||||
className: "ri-information-line link-hint",
|
||||
ariaDescription: app.attrs.tooltip(
|
||||
`The max size in bytes of the serialized log JSON data field (truncated on "best-effort" basis).`,
|
||||
),
|
||||
}),
|
||||
),
|
||||
t.input({
|
||||
type: "number",
|
||||
id: "logs.maxDataSize",
|
||||
name: "logs.maxDataSize",
|
||||
min: 0,
|
||||
max: Number.MAX_SAFE_INTEGER,
|
||||
placeholder: "Default to ~16KB",
|
||||
value: () => data.formSettings.logs.maxDataSize || "",
|
||||
oninput: (e) => {
|
||||
if (e.target.value <= 0) {
|
||||
data.formSettings.logs.maxDataSize = 0;
|
||||
} else {
|
||||
data.formSettings.logs.maxDataSize = Number(e.target.value);
|
||||
}
|
||||
},
|
||||
onchange: () => {
|
||||
// force placeholder rendering
|
||||
if (!data.formSettings.logs.maxDataSize) {
|
||||
data.formSettings.logs.maxDataSize = null;
|
||||
data.formSettings.logs.maxDataSize = 0;
|
||||
}
|
||||
},
|
||||
}),
|
||||
),
|
||||
),
|
||||
t.div(
|
||||
{ className: "col-lg-12" },
|
||||
t.field(
|
||||
@@ -215,6 +290,19 @@ function logsSettingsModal(modalSettings) {
|
||||
},
|
||||
t.span({ className: "txt" }, "Close"),
|
||||
),
|
||||
t.button(
|
||||
{
|
||||
type: "button",
|
||||
ariaLabel: app.attrs.tooltip("Delete all logs", "left"),
|
||||
className: () =>
|
||||
`btn circle sm secondary transparent link-faded ${data.isDeleting ? "loading" : ""}`,
|
||||
disabled: () => data.isDeleting || data.isSaving,
|
||||
onclick: () => {
|
||||
confirmLogsDelete();
|
||||
},
|
||||
},
|
||||
t.i({ className: "ri-delete-bin-7-line", ariaHidden: true }),
|
||||
),
|
||||
t.button(
|
||||
{
|
||||
type: "submit",
|
||||
|
||||
@@ -113,6 +113,7 @@ export function pageLogs(route) {
|
||||
onclick: () =>
|
||||
app.modals.openLogsSettings({
|
||||
onsave: () => refreshLogsList(),
|
||||
ondelete: () => refreshLogsList(),
|
||||
}),
|
||||
},
|
||||
t.i({ className: "ri-settings-3-line", ariaHidden: true }),
|
||||
|
||||
Reference in New Issue
Block a user