refactor: add persistence groundwork and structured logging
This commit is contained in:
+22
-15
@@ -10,6 +10,9 @@ import {
|
||||
ServerStartCommand,
|
||||
ServerStopCommand
|
||||
} from "server-manager-shared";
|
||||
import { getLogger } from "./logger";
|
||||
|
||||
const logger = getLogger("Wrapper");
|
||||
|
||||
|
||||
class Wrapper {
|
||||
@@ -36,6 +39,7 @@ class Wrapper {
|
||||
const config =
|
||||
loadConfig();
|
||||
|
||||
logger.info("Konfiguration geladen");
|
||||
|
||||
|
||||
if(config.wrapperId){
|
||||
@@ -46,7 +50,7 @@ class Wrapper {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"Starte mit vorhandener ID:",
|
||||
this.id
|
||||
);
|
||||
@@ -55,7 +59,7 @@ class Wrapper {
|
||||
}else{
|
||||
|
||||
|
||||
console.log(
|
||||
logger.warn(
|
||||
"Keine Wrapper ID vorhanden - neue Registrierung"
|
||||
);
|
||||
|
||||
@@ -77,8 +81,8 @@ class Wrapper {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
"RabbitMQ verbunden"
|
||||
logger.info(
|
||||
"RabbitMQ Verbindung hergestellt"
|
||||
);
|
||||
|
||||
|
||||
@@ -136,9 +140,9 @@ class Wrapper {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"Antwort vom Manager:",
|
||||
data
|
||||
data.type
|
||||
);
|
||||
|
||||
|
||||
@@ -162,14 +166,17 @@ class Wrapper {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
logger.info(
|
||||
"Registrierung beim Manager erfolgreich"
|
||||
);
|
||||
logger.debug(
|
||||
"Wrapper ID gespeichert:",
|
||||
this.id
|
||||
);
|
||||
|
||||
if(!this.id){
|
||||
|
||||
console.error(
|
||||
logger.error(
|
||||
"Keine Wrapper ID erhalten!"
|
||||
);
|
||||
|
||||
@@ -272,7 +279,7 @@ class Wrapper {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"Registrierung gesendet",
|
||||
this.id ?? "ohne ID"
|
||||
);
|
||||
@@ -319,7 +326,7 @@ class Wrapper {
|
||||
message?: unknown;
|
||||
};
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"TEST COMMAND:",
|
||||
command.message
|
||||
);
|
||||
@@ -356,9 +363,9 @@ class Wrapper {
|
||||
default:
|
||||
|
||||
|
||||
console.log(
|
||||
logger.warn(
|
||||
"Unbekannter Command:",
|
||||
rawCommand
|
||||
commandType
|
||||
);
|
||||
|
||||
|
||||
@@ -376,7 +383,7 @@ class Wrapper {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"Warte auf Commands:",
|
||||
queue
|
||||
);
|
||||
@@ -392,7 +399,7 @@ class Wrapper {
|
||||
|
||||
heartbeat(){
|
||||
|
||||
console.log("Heartbeat gestartet");
|
||||
logger.debug("Heartbeat gestartet");
|
||||
setInterval(()=>{
|
||||
|
||||
|
||||
@@ -438,7 +445,7 @@ class Wrapper {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"Heartbeat gesendet"
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
declare const process: {
|
||||
env: Record<string, string | undefined>;
|
||||
};
|
||||
|
||||
type LogLevel = "DEBUG" | "INFO" | "WARN" | "ERROR";
|
||||
|
||||
const LEVELS: Record<LogLevel, number> = {
|
||||
DEBUG: 0,
|
||||
INFO: 1,
|
||||
WARN: 2,
|
||||
ERROR: 3,
|
||||
};
|
||||
|
||||
const DEFAULT_LOG_LEVEL: LogLevel = "INFO";
|
||||
|
||||
const configuredLevel =
|
||||
(process.env.LOG_LEVEL ?? "").toUpperCase() as LogLevel;
|
||||
|
||||
const currentLogLevel: LogLevel =
|
||||
configuredLevel in LEVELS ? configuredLevel : DEFAULT_LOG_LEVEL;
|
||||
|
||||
const currentLogLevelValue = LEVELS[currentLogLevel];
|
||||
|
||||
function shouldLog(level: LogLevel): boolean {
|
||||
return LEVELS[level] >= currentLogLevelValue;
|
||||
}
|
||||
|
||||
function formatMessage(
|
||||
level: LogLevel,
|
||||
component: string,
|
||||
message: unknown
|
||||
): string {
|
||||
return `${new Date().toISOString()} ${level} [${component}] ${message}`;
|
||||
}
|
||||
|
||||
class Logger {
|
||||
constructor(private component: string) {}
|
||||
|
||||
debug(message: unknown, ...args: unknown[]): void {
|
||||
if (!shouldLog("DEBUG")) return;
|
||||
console.log(formatMessage("DEBUG", this.component, message), ...args);
|
||||
}
|
||||
|
||||
info(message: unknown, ...args: unknown[]): void {
|
||||
if (!shouldLog("INFO")) return;
|
||||
console.log(formatMessage("INFO", this.component, message), ...args);
|
||||
}
|
||||
|
||||
warn(message: unknown, ...args: unknown[]): void {
|
||||
if (!shouldLog("WARN")) return;
|
||||
console.warn(formatMessage("WARN", this.component, message), ...args);
|
||||
}
|
||||
|
||||
error(message: unknown, ...args: unknown[]): void {
|
||||
if (!shouldLog("ERROR")) return;
|
||||
console.error(formatMessage("ERROR", this.component, message), ...args);
|
||||
}
|
||||
}
|
||||
|
||||
export function getLogger(component: string): Logger {
|
||||
return new Logger(component);
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
import { spawn, ChildProcess } from "child_process";
|
||||
import { ServerStartCommand } from "server-manager-shared";
|
||||
import { SERVER_SCRIPT_PATH, SERVER_WORKING_DIRECTORY } from "./config";
|
||||
import { getLogger } from "./logger";
|
||||
|
||||
const logger = getLogger("ProcessManager");
|
||||
|
||||
|
||||
interface ServerProcess {
|
||||
@@ -46,7 +49,7 @@ export class ProcessManager {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"Starte Game Server:",
|
||||
data.name
|
||||
);
|
||||
@@ -89,11 +92,9 @@ export class ProcessManager {
|
||||
data=>{
|
||||
|
||||
|
||||
console.log(
|
||||
|
||||
logger.debug(
|
||||
`[${data.name}]`,
|
||||
data.toString()
|
||||
|
||||
);
|
||||
|
||||
|
||||
@@ -112,7 +113,7 @@ export class ProcessManager {
|
||||
data=>{
|
||||
|
||||
|
||||
console.error(
|
||||
logger.error(
|
||||
|
||||
"SERVER ERROR:",
|
||||
data.toString()
|
||||
@@ -141,7 +142,7 @@ export class ProcessManager {
|
||||
if(server){
|
||||
|
||||
|
||||
console.log(
|
||||
logger.info(
|
||||
"Server beendet:",
|
||||
server.name,
|
||||
code
|
||||
@@ -199,18 +200,12 @@ export class ProcessManager {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
|
||||
logger.info(
|
||||
"Server gestartet:",
|
||||
|
||||
{
|
||||
|
||||
id:data.serverId,
|
||||
|
||||
pid:process.pid
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
@@ -238,7 +233,7 @@ export class ProcessManager {
|
||||
if(!server){
|
||||
|
||||
|
||||
console.log(
|
||||
logger.warn(
|
||||
|
||||
"Server nicht gefunden:",
|
||||
|
||||
@@ -256,12 +251,9 @@ export class ProcessManager {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
|
||||
logger.debug(
|
||||
"Stoppe Server:",
|
||||
|
||||
server.name
|
||||
|
||||
);
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import { queryGameServerInfo } from "steam-server-query";
|
||||
import { ProcessManager } from "./processManager";
|
||||
import { WRAPPER_QUERY_INTERVAL } from "./config";
|
||||
import { getLogger } from "./logger";
|
||||
|
||||
const logger = getLogger("QueryManager");
|
||||
|
||||
export class QueryManager {
|
||||
|
||||
@@ -16,7 +18,7 @@ export class QueryManager {
|
||||
start(){
|
||||
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"Query Manager gestartet"
|
||||
);
|
||||
|
||||
@@ -73,12 +75,10 @@ export class QueryManager {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
|
||||
"Query:",
|
||||
logger.debug(
|
||||
"Query erfolgreich:",
|
||||
server.name,
|
||||
`${server.players}/${server.maxPlayers}`
|
||||
|
||||
);
|
||||
|
||||
|
||||
@@ -86,11 +86,9 @@ export class QueryManager {
|
||||
catch(err){
|
||||
|
||||
|
||||
console.log(
|
||||
|
||||
logger.warn(
|
||||
"Query fehlgeschlagen:",
|
||||
server.name
|
||||
|
||||
);
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,9 @@ 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 {
|
||||
|
||||
@@ -25,7 +27,7 @@ export class StatusReporter {
|
||||
|
||||
start(){
|
||||
|
||||
console.log(
|
||||
logger.debug(
|
||||
"Status Reporter gestartet"
|
||||
);
|
||||
|
||||
@@ -147,12 +149,9 @@ export class StatusReporter {
|
||||
|
||||
|
||||
|
||||
console.log(
|
||||
|
||||
logger.debug(
|
||||
"Status gesendet:",
|
||||
|
||||
servers.length,
|
||||
|
||||
"Server"
|
||||
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user