feat: ap/errors acp page

This commit is contained in:
Julian Lam
2026-04-08 12:12:53 -04:00
parent 9a981145de
commit 2699fd2278
6 changed files with 41 additions and 1 deletions

View File

@@ -56,6 +56,7 @@
"federation/pruning": "Storage",
"federation/safety": "Trust & Safety",
"federation/analytics": "Analytics",
"federation/errors": "Errors",
"section-appearance": "Appearance",
"appearance/themes": "Themes",

View File

@@ -75,5 +75,7 @@
"analytics.errors": "Errors",
"analytics.term": "Time scale",
"analytics.hourly": "Hourly",
"analytics.daily": "Daily"
"analytics.daily": "Daily",
"errors.intro": "The following errors were recorded by this instance within the last 24 hours."
}

View File

@@ -1,5 +1,6 @@
'use strict';
const db = require('../../database');
const activitypub = require('../../activitypub');
const analytics = require('../../analytics');
@@ -81,5 +82,20 @@ federationController.analytics = async function (req, res) {
received,
receivedErr,
sent,
hideSave: 1,
});
};
federationController.errors = async function (req, res) {
const ids = await db.getSortedSetRangeByScore('ap:errors', 0, -1, '-inf', Date.now());
const payloads = await db.mget(ids.map(id => `ap:errors:${id}`));
const errors = ids.map((id, idx) => {
return { id, payload: payloads[idx] };
});
res.render('admin/federation/errors', {
title: '[[admin/menu:federation/errors]]',
hideSave: 1,
errors,
});
};

View File

@@ -58,6 +58,7 @@ module.exports = function (app, name, middleware, controllers) {
helpers.setupAdminPageRoute(app, `/${name}/federation/pruning`, middlewares, controllers.admin.federation.pruning);
helpers.setupAdminPageRoute(app, `/${name}/federation/safety`, middlewares, controllers.admin.federation.safety);
helpers.setupAdminPageRoute(app, `/${name}/federation/analytics`, middlewares, controllers.admin.federation.analytics);
helpers.setupAdminPageRoute(app, `/${name}/federation/errors`, middlewares, controllers.admin.federation.errors);
helpers.setupAdminPageRoute(app, `/${name}/appearance/themes`, middlewares, controllers.admin.appearance.themes);
helpers.setupAdminPageRoute(app, `/${name}/appearance/skins`, middlewares, controllers.admin.appearance.skins);

View File

@@ -0,0 +1,19 @@
<div class="acp-page-container">
<!-- IMPORT admin/partials/settings/header.tpl -->
<div class="row m-0">
<div id="spy-container" class="col-12 col-md-8 px-0 mb-4" tabindex="0">
<div class="mb-4">
<p class="lead">[[admin/settings/activitypub:errors.intro]]</p>
{{{ each errors }}}
<details>
<summary>{./id}</summary>
<pre class="m-2 border p-2"><code>{./payload}</code></pre>
</details>
{{{ end }}}
</div>
</div>
<!-- IMPORT admin/partials/settings/toc.tpl -->
</div>
</div>

View File

@@ -110,6 +110,7 @@
<a class="btn btn-ghost btn-sm text-start" id="federation-pruning" href="{relative_path}/admin/federation/pruning">[[admin/menu:federation/pruning]]</a>
<a class="btn btn-ghost btn-sm text-start" id="federation-safety" href="{relative_path}/admin/federation/safety">[[admin/menu:federation/safety]]</a>
<a class="btn btn-ghost btn-sm text-start" id="federation-analytics" href="{relative_path}/admin/federation/analytics">[[admin/menu:federation/analytics]]</a>
<a class="btn btn-ghost btn-sm text-start" id="federation-errors" href="{relative_path}/admin/federation/errors">[[admin/menu:federation/errors]]</a>
</div>
</div>
</div>