mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
37 lines
1 KiB
TypeScript
37 lines
1 KiB
TypeScript
import { register } from 'prom-client';
|
|
|
|
import { AppController } from '@/app.ts';
|
|
import {
|
|
dbAvailableConnectionsGauge,
|
|
dbPoolSizeGauge,
|
|
relayPoolRelaysSizeGauge,
|
|
relayPoolSubscriptionsSizeGauge,
|
|
} from '@/metrics.ts';
|
|
import { Storages } from '@/storages.ts';
|
|
|
|
/** Prometheus/OpenMetrics controller. */
|
|
export const metricsController: AppController = async (c) => {
|
|
const db = await Storages.database();
|
|
const pool = await Storages.client();
|
|
|
|
// Update some metrics at request time.
|
|
dbPoolSizeGauge.set(db.poolSize);
|
|
dbAvailableConnectionsGauge.set(db.availableConnections);
|
|
|
|
relayPoolRelaysSizeGauge.reset();
|
|
relayPoolSubscriptionsSizeGauge.reset();
|
|
|
|
for (const relay of pool.relays.values()) {
|
|
relayPoolRelaysSizeGauge.inc({ ready_state: relay.socket.readyState });
|
|
relayPoolSubscriptionsSizeGauge.inc(relay.subscriptions.length);
|
|
}
|
|
|
|
// Serve the metrics.
|
|
const metrics = await register.metrics();
|
|
|
|
const headers: HeadersInit = {
|
|
'Content-Type': register.contentType,
|
|
};
|
|
|
|
return c.text(metrics, 200, headers);
|
|
};
|