Add relay connections metrics

This commit is contained in:
Alex Gleason 2024-09-23 22:28:01 -05:00
parent fc73cb2961
commit d72ec843cf
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
2 changed files with 27 additions and 1 deletions

View file

@ -1,17 +1,32 @@
import { register } from 'prom-client';
import { AppController } from '@/app.ts';
import { dbAvailableConnectionsGauge, dbPoolSizeGauge } from '@/metrics.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 = {

View file

@ -119,3 +119,14 @@ export const internalSubscriptionsSizeGauge = new Gauge({
name: 'ditto_internal_subscriptions_size',
help: "Number of active subscriptions to Ditto's internal relay",
});
export const relayPoolRelaysSizeGauge = new Gauge({
name: 'ditto_relay_pool_relays_size',
help: 'Number of relays in the relay pool',
labelNames: ['ready_state'],
});
export const relayPoolSubscriptionsSizeGauge = new Gauge({
name: 'ditto_relay_pool_subscriptions_size',
help: 'Number of active subscriptions to the relay pool',
});