feat: add resource monitoring and provider upgrade
This commit is contained in:
@@ -23,6 +23,17 @@ export interface UniDeskConfig {
|
||||
heartbeatIntervalMs: number;
|
||||
reconnectBaseMs: number;
|
||||
reconnectMaxMs: number;
|
||||
metrics: { diskPath: string };
|
||||
upgrade: {
|
||||
enabled: boolean;
|
||||
hostProjectRoot: string;
|
||||
workspacePath: string;
|
||||
composeFile: string;
|
||||
composeEnvFile: string;
|
||||
composeProject: string;
|
||||
service: string;
|
||||
runnerImage: string;
|
||||
};
|
||||
};
|
||||
docker: { composeFile: string; projectName: string };
|
||||
paths: { stateDir: string; logsDir: string; docsReferenceDir: string };
|
||||
@@ -55,6 +66,12 @@ function numberField(obj: Record<string, unknown>, key: string, path: string): n
|
||||
return value;
|
||||
}
|
||||
|
||||
function booleanField(obj: Record<string, unknown>, key: string, path: string): boolean {
|
||||
const value = obj[key];
|
||||
if (typeof value !== "boolean") throw new Error(`${path}.${key} must be a boolean`);
|
||||
return value;
|
||||
}
|
||||
|
||||
function portPair(obj: Record<string, unknown>, key: string): { port: number; containerPort: number } {
|
||||
const value = asRecord(obj[key], `network.${key}`);
|
||||
return { port: numberField(value, "port", `network.${key}`), containerPort: numberField(value, "containerPort", `network.${key}`) };
|
||||
@@ -75,6 +92,8 @@ export function readConfig(): UniDeskConfig {
|
||||
const paths = asRecord(parsed.paths, "paths");
|
||||
const sshForwarding = asRecord(parsed.sshForwarding, "sshForwarding");
|
||||
const labels = asRecord(providerGateway.labels, "providerGateway.labels");
|
||||
const providerMetrics = asRecord(providerGateway.metrics, "providerGateway.metrics");
|
||||
const providerUpgrade = asRecord(providerGateway.upgrade, "providerGateway.upgrade");
|
||||
const typescript = stringField(runtime, "typescript", "runtime");
|
||||
if (typescript !== "bun") throw new Error("runtime.typescript must be bun");
|
||||
return {
|
||||
@@ -103,6 +122,19 @@ export function readConfig(): UniDeskConfig {
|
||||
heartbeatIntervalMs: numberField(providerGateway, "heartbeatIntervalMs", "providerGateway"),
|
||||
reconnectBaseMs: numberField(providerGateway, "reconnectBaseMs", "providerGateway"),
|
||||
reconnectMaxMs: numberField(providerGateway, "reconnectMaxMs", "providerGateway"),
|
||||
metrics: {
|
||||
diskPath: stringField(providerMetrics, "diskPath", "providerGateway.metrics"),
|
||||
},
|
||||
upgrade: {
|
||||
enabled: booleanField(providerUpgrade, "enabled", "providerGateway.upgrade"),
|
||||
hostProjectRoot: stringField(providerUpgrade, "hostProjectRoot", "providerGateway.upgrade"),
|
||||
workspacePath: stringField(providerUpgrade, "workspacePath", "providerGateway.upgrade"),
|
||||
composeFile: stringField(providerUpgrade, "composeFile", "providerGateway.upgrade"),
|
||||
composeEnvFile: stringField(providerUpgrade, "composeEnvFile", "providerGateway.upgrade"),
|
||||
composeProject: stringField(providerUpgrade, "composeProject", "providerGateway.upgrade"),
|
||||
service: stringField(providerUpgrade, "service", "providerGateway.upgrade"),
|
||||
runnerImage: stringField(providerUpgrade, "runnerImage", "providerGateway.upgrade"),
|
||||
},
|
||||
},
|
||||
docker: { composeFile: stringField(docker, "composeFile", "docker"), projectName: stringField(docker, "projectName", "docker") },
|
||||
paths: {
|
||||
|
||||
Reference in New Issue
Block a user