import * as amqp from "amqplib"; import { ProcessManager } from "./processManager"; import os from "os"; import { QueryManager } from "./queryManager"; import { WrapperStatusMessage } from "server-manager-shared"; import { WRAPPER_STATUS_INTERVAL } from "./config"; import { getLogger } from "./logger"; const logger = getLogger("StatusReporter"); export class StatusReporter { constructor( private channel: amqp.Channel, private processManager: ProcessManager, private queryManager: QueryManager, private wrapperId: string ){} start(){ logger.debug( "Status Reporter gestartet" ); setInterval(()=>{ this.sendStatus(); },WRAPPER_STATUS_INTERVAL); } sendStatus(){ const processes = this.processManager.getStatus(); const queries = this.queryManager.getStatus(); const servers = processes.map(server => { const query = queries.find( (q:any) => q.id === server.id ); return { ...server, players: query?.players ?? 0, maxPlayers: query?.maxPlayers ?? 0 }; }); const status: WrapperStatusMessage = { type: "wrapper.status", wrapperId: this.wrapperId, servers, ramFree: Math.round( os.freemem() / 1024 / 1024 ) }; this.channel.sendToQueue( "wrapper.register", Buffer.from( JSON.stringify(status) ) ); logger.debug( "Status gesendet:", servers.length, "Server" ); } }