Add admin controls for runtime debug logs
Build and publish frontend / publish (push) Successful in 44s
Build and publish frontend / publish (push) Successful in 44s
This commit is contained in:
+28
@@ -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'); }
|
||||
|
||||
Reference in New Issue
Block a user