import {Counter, Gauge} from "prom-client"; //this class should manage all the custom metrics used by prometheus class GaugeManager { private nbClientsGauge: Gauge; private nbClientsPerRoomGauge: Gauge; private nbGroupsPerRoomGauge: Gauge; private nbGroupsPerRoomCounter: Counter; private nbRoomsGauge: Gauge; constructor() { this.nbRoomsGauge = new Gauge({ name: 'workadventure_nb_rooms', help: 'Number of active rooms' }); this.nbClientsGauge = new Gauge({ name: 'workadventure_nb_sockets', help: 'Number of connected sockets', labelNames: [ ] }); this.nbClientsPerRoomGauge = new Gauge({ name: 'workadventure_nb_clients_per_room', help: 'Number of clients per room', labelNames: [ 'room' ] }); this.nbGroupsPerRoomCounter = new Counter({ name: 'workadventure_counter_groups_per_room', help: 'Counter of groups per room', labelNames: [ 'room' ] }); this.nbGroupsPerRoomGauge = new Gauge({ name: 'workadventure_nb_groups_per_room', help: 'Number of groups per room', labelNames: [ 'room' ] }); } incNbRoomGauge(): void { this.nbRoomsGauge.inc(); } decNbRoomGauge(): void { this.nbRoomsGauge.dec(); } incNbClientPerRoomGauge(roomId: string): void { this.nbClientsGauge.inc(); this.nbClientsPerRoomGauge.inc({ room: roomId }); } decNbClientPerRoomGauge(roomId: string): void { this.nbClientsGauge.dec(); this.nbClientsPerRoomGauge.dec({ room: roomId }); } incNbGroupsPerRoomGauge(roomId: string): void { this.nbGroupsPerRoomCounter.inc({ room: roomId }) this.nbGroupsPerRoomGauge.inc({ room: roomId }) } decNbGroupsPerRoomGauge(roomId: string): void { this.nbGroupsPerRoomGauge.dec({ room: roomId }) } } export const gaugeManager = new GaugeManager();