Add admin controls for runtime debug logs
Build and publish frontend / publish (push) Successful in 44s

This commit is contained in:
Ein Anderssono
2026-10-15 11:51:04 +02:00
parent 0452d7d065
commit 910db15b61
3 changed files with 31 additions and 1 deletions
+28
View File
@@ -63,6 +63,7 @@
<button type="button" data-admin-view="players">Spelare</button>
<button type="button" data-admin-view="prompts">Prompter</button>
<button type="button" data-admin-view="rules">Luau-regler</button>
<button type="button" data-admin-view="logging">Driftloggar</button>
<button type="button" data-admin-view="audit">Revisionslogg</button>
<button type="button" id="admin-logout">Logga ut</button>
</nav>
@@ -392,6 +393,32 @@
adminElement('h2', 'Revisionslogg');
for (const entry of result.entries) adminJson(`${entry.created_at} · ${entry.action} · ${entry.admin_account_id || entry.operator_identity}`, entry);
}
async function loadAdminLogging() {
adminContent.replaceChildren();
const result = await request('/api/admin/settings/logging');
adminElement('h2', 'Driftloggar');
adminElement('p', 'debug=true skriver detaljerade tekniska händelser för HTTP, AI-anrop, validering och commit. debug=false behåller korta tekniska åtkomstloggar och fel. Ändringen sparas i databasen och börjar gälla utan omstart. Spelartext, promptinnehåll, AI-svar, sessionsuppgifter och hemligheter skrivs aldrig till poddloggarna.');
const form = adminElement('form');
const label = adminElement('label', undefined, form);
const checkbox = document.createElement('input');
checkbox.type = 'checkbox'; checkbox.name = 'debug'; checkbox.checked = result.debug;
label.append(checkbox, document.createTextNode(' Aktivera verbose felsökningsloggar (debug=true)'));
const save = adminElement('button', 'Spara loggnivå', form); save.type = 'submit';
const status = adminElement('p', `Aktuell nivå: debug=${result.debug}`);
status.setAttribute('role', 'status');
form.addEventListener('submit', async event => {
event.preventDefault(); save.disabled = true;
try {
const updated = await request('/api/admin/settings/logging', {
method: 'PUT', headers: {'content-type': 'application/json'},
body: JSON.stringify({debug: checkbox.checked}),
});
status.textContent = `Aktuell nivå: debug=${updated.debug}. Ändringen gäller utan omstart.`;
} catch (error) {
status.textContent = `Loggnivån kunde inte ändras: ${error.message}`;
} finally { save.disabled = false; }
});
}
async function openAdmin() {
showAdmin();
adminContent.setAttribute('aria-busy', 'true');
@@ -632,6 +659,7 @@
if (button.dataset.adminView === 'players') await loadAdminPlayers();
else if (button.dataset.adminView === 'prompts') await loadAdminPrompts();
else if (button.dataset.adminView === 'rules') await loadAdminRules();
else if (button.dataset.adminView === 'logging') await loadAdminLogging();
else await loadAdminAudit();
} catch (error) { adminContent.replaceChildren(); adminElement('p', `Vyn kunde inte läsas: ${error.message}`); }
finally { adminContent.setAttribute('aria-busy', 'false'); }