164 lines
2.1 KiB
TypeScript
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"
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} |