refactor: add persistence groundwork and structured logging

This commit is contained in:
2026-07-20 21:48:08 +02:00
parent 7dde7378b8
commit 5fd48d1971
19 changed files with 567 additions and 200 deletions
+68 -10
View File
@@ -1,4 +1,8 @@
import { getLogger } from "./logger";
import { WrapperStatusMessage } from "server-manager-shared";
import { JsonFileStore } from "./persistence/jsonFileStore";
const logger = getLogger("WrapperRegistry");
export interface WrapperInfo {
@@ -25,35 +29,91 @@ export interface WrapperInfo {
}
interface WrapperRegistryState {
wrappers: Array<{
id:string;
hostname:string;
commandQueue:string;
cpu:number;
ram:number;
}>;
}
export class WrapperRegistry {
private wrappers =
new Map<string, WrapperInfo>();
private readonly persistence =
new JsonFileStore<WrapperRegistryState>(
"wrapperRegistry-state.json"
);
async init(): Promise<void> {
const state = await this.persistence.load();
if (!state)
return;
for (const wrapperData of state.wrappers) {
this.wrappers.set(
wrapperData.id,
{
id: wrapperData.id,
hostname: wrapperData.hostname,
commandQueue: wrapperData.commandQueue,
cpu: wrapperData.cpu,
ram: wrapperData.ram,
ramFree: wrapperData.ram,
online: false,
lastHeartbeat: 0,
servers: []
}
);
}
}
private toState(): WrapperRegistryState {
return {
wrappers: Array.from(this.wrappers.values()).map(
wrapper => ({
id: wrapper.id,
hostname: wrapper.hostname,
commandQueue: wrapper.commandQueue,
cpu: wrapper.cpu,
ram: wrapper.ram
})
)
};
}
private async saveState(): Promise<void> {
await this.persistence.save(
this.toState()
);
}
add(wrapper:WrapperInfo){
this.wrappers.set(
wrapper.id,
wrapper
);
console.log(
"Wrapper gespeichert:",
logger.info(
"Wrapper added:",
wrapper.id
);
void this.saveState();
}
@@ -110,13 +170,12 @@ export class WrapperRegistry {
update(wrapper:WrapperInfo){
this.wrappers.set(
wrapper.id,
wrapper
);
void this.saveState();
}
@@ -140,7 +199,7 @@ export class WrapperRegistry {
wrapper.online = false;
console.log(
logger.warn(
"Wrapper offline:",
wrapper.id
);
@@ -156,7 +215,6 @@ export class WrapperRegistry {
updateStatus(data: WrapperStatusMessage){
const wrapper =
this.wrappers.get(
data.wrapperId