refactor(api): emit moderation events and apply account actions (#3031)

This commit is contained in:
Hampus authored and GitHub committed 2026-09-29 12:24:15 +02:00
1 parent c488906131
commit 364084c819
385 files changed
+8994 -22221

No files matched your search

+19
View File
@@ -101,6 +101,24 @@ class Gauge {
}
}
const registeredSections = new Set<() => string>();
export function registerMetricsSection(render: () => string): () => void {
registeredSections.add(render);
return () => {
registeredSections.delete(render);
};
}
function renderRegisteredSections(): Array<string> {
const rendered: Array<string> = [];
for (const render of registeredSections) {
const text = render().trim();
if (text !== '') rendered.push(text);
}
return rendered;
}
interface MetricsState {
requestsTotal: Counter;
errorsTotal: Counter;
@@ -156,6 +174,7 @@ export function createMetricsMiddleware(serviceName: string): MetricsResult {
requestDuration.render(`${prefix}_http_request_duration_seconds`, 'HTTP request duration in seconds'),
errorsTotal.render(`${prefix}_http_errors_total`, 'Total HTTP 5xx errors'),
uptime.render(`${prefix}_uptime_seconds`, 'Process uptime in seconds'),
...renderRegisteredSections(),
];
return c.text(`${sections.join('\n\n')}\n`, 200, {
'Content-Type': 'text/plain; version=0.0.4; charset=utf-8',
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {createMetricsMiddleware} from '@fluxer/hono/src/middleware/Metrics';
import {createMetricsMiddleware, registerMetricsSection} from '@fluxer/hono/src/middleware/Metrics';
import {Hono} from 'hono';
import {describe, expect, test} from 'vitest';
@@ -255,4 +255,14 @@ describe('Metrics Middleware', () => {
expect(body).toContain('fluxer_gateway_uptime_seconds');
});
});
describe('registered sections', () => {
test('appends registered sections until they are unregistered', async () => {
const {app} = createTestApp();
const unregister = registerMetricsSection(() => '# TYPE fluxer_test_extra gauge\nfluxer_test_extra 7');
expect(await (await requestMetrics(app)).text()).toContain('fluxer_test_extra 7');
unregister();
expect(await (await requestMetrics(app)).text()).not.toContain('fluxer_test_extra');
});
});
});