Files
server-manager/wrapper/src/statusReporter.ts
T

164 lines
2.1 KiB
TypeScript

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"
);
}
}