refactor: add persistence groundwork and structured logging
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user