79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
|
|
import { Counter, Gauge, Histogram, register } from "prom-client";
|
||
|
|
|
||
|
|
// Audio metrics
|
||
|
|
export const audioLevelGauge = new Gauge({
|
||
|
|
name: "audio_level_db",
|
||
|
|
help: "Current audio level in dB",
|
||
|
|
labelNames: ["user_id"],
|
||
|
|
});
|
||
|
|
|
||
|
|
export const recordingDurationCounter = new Counter({
|
||
|
|
name: "recording_duration_seconds_total",
|
||
|
|
help: "Total recording duration in seconds",
|
||
|
|
labelNames: ["user_id"],
|
||
|
|
});
|
||
|
|
|
||
|
|
export const activeRecordingsGauge = new Gauge({
|
||
|
|
name: "active_recordings",
|
||
|
|
help: "Number of active recordings",
|
||
|
|
});
|
||
|
|
|
||
|
|
export const recordedSegmentsCounter = new Counter({
|
||
|
|
name: "recorded_segments_total",
|
||
|
|
help: "Total number of recorded segments",
|
||
|
|
labelNames: ["user_id"],
|
||
|
|
});
|
||
|
|
|
||
|
|
// Connection metrics
|
||
|
|
export const voiceConnectionsGauge = new Gauge({
|
||
|
|
name: "voice_connections_active",
|
||
|
|
help: "Number of active voice connections",
|
||
|
|
});
|
||
|
|
|
||
|
|
export const connectionErrorsCounter = new Counter({
|
||
|
|
name: "connection_errors_total",
|
||
|
|
help: "Total number of connection errors",
|
||
|
|
labelNames: ["error_type"],
|
||
|
|
});
|
||
|
|
|
||
|
|
export const reconnectAttemptsCounter = new Counter({
|
||
|
|
name: "reconnect_attempts_total",
|
||
|
|
help: "Total number of reconnection attempts",
|
||
|
|
});
|
||
|
|
|
||
|
|
// WebSocket metrics
|
||
|
|
export const wsClientsGauge = new Gauge({
|
||
|
|
name: "websocket_clients_connected",
|
||
|
|
help: "Number of connected WebSocket clients",
|
||
|
|
});
|
||
|
|
|
||
|
|
export const wsMessagesCounter = new Counter({
|
||
|
|
name: "websocket_messages_total",
|
||
|
|
help: "Total WebSocket messages sent",
|
||
|
|
labelNames: ["message_type"],
|
||
|
|
});
|
||
|
|
|
||
|
|
// HTTP metrics
|
||
|
|
export const httpRequestDurationHistogram = new Histogram({
|
||
|
|
name: "http_request_duration_seconds",
|
||
|
|
help: "HTTP request duration in seconds",
|
||
|
|
labelNames: ["method", "route", "status"],
|
||
|
|
buckets: [0.001, 0.01, 0.1, 0.5, 1, 2, 5],
|
||
|
|
});
|
||
|
|
|
||
|
|
export const httpRequestsCounter = new Counter({
|
||
|
|
name: "http_requests_total",
|
||
|
|
help: "Total HTTP requests",
|
||
|
|
labelNames: ["method", "route", "status"],
|
||
|
|
});
|
||
|
|
|
||
|
|
// System metrics
|
||
|
|
export const uptimeGauge = new Gauge({
|
||
|
|
name: "process_uptime_seconds",
|
||
|
|
help: "Process uptime in seconds",
|
||
|
|
});
|
||
|
|
|
||
|
|
export async function getMetrics(): Promise<string> {
|
||
|
|
return register.metrics();
|
||
|
|
}
|