f40ef6b7c0
Align Cloudly with the current typedserver, smartconfig, smartstate, and Docker tooling releases so builds and Docker output stay compatible with the upgraded stack.
99 lines
3.1 KiB
TypeScript
99 lines
3.1 KiB
TypeScript
import * as plugins from '../plugins.js';
|
|
|
|
@plugins.smartdata.managed()
|
|
export class Deployment extends plugins.smartdata.SmartDataDbDoc<
|
|
Deployment,
|
|
plugins.servezoneInterfaces.data.IDeployment
|
|
> {
|
|
@plugins.smartdata.unI()
|
|
public id: string = plugins.smartunique.uniSimple('deployment');
|
|
|
|
@plugins.smartdata.svDb()
|
|
public serviceId!: string;
|
|
|
|
@plugins.smartdata.svDb()
|
|
public nodeId!: string;
|
|
|
|
@plugins.smartdata.svDb()
|
|
public containerId?: string;
|
|
|
|
@plugins.smartdata.svDb()
|
|
public usedImageId!: string;
|
|
|
|
@plugins.smartdata.svDb()
|
|
public version!: string;
|
|
|
|
@plugins.smartdata.svDb()
|
|
public deployedAt!: number;
|
|
|
|
@plugins.smartdata.svDb()
|
|
public deploymentLog: string[] = [];
|
|
|
|
@plugins.smartdata.svDb()
|
|
public status!: 'scheduled' | 'starting' | 'running' | 'stopping' | 'stopped' | 'failed';
|
|
|
|
@plugins.smartdata.svDb()
|
|
public healthStatus?: 'healthy' | 'unhealthy' | 'unknown';
|
|
|
|
@plugins.smartdata.svDb()
|
|
public resourceUsage?: {
|
|
cpuUsagePercent: number;
|
|
memoryUsedMB: number;
|
|
lastUpdated: number;
|
|
};
|
|
|
|
public static async createDeployment(
|
|
deploymentData: Partial<plugins.servezoneInterfaces.data.IDeployment>
|
|
): Promise<Deployment> {
|
|
const deployment = new Deployment();
|
|
if (deploymentData.serviceId) deployment.serviceId = deploymentData.serviceId;
|
|
if (deploymentData.nodeId) deployment.nodeId = deploymentData.nodeId;
|
|
if (deploymentData.containerId) deployment.containerId = deploymentData.containerId;
|
|
if (deploymentData.usedImageId) deployment.usedImageId = deploymentData.usedImageId;
|
|
if (deploymentData.version) deployment.version = deploymentData.version;
|
|
if (deploymentData.deployedAt) deployment.deployedAt = deploymentData.deployedAt;
|
|
if (deploymentData.deploymentLog) deployment.deploymentLog = deploymentData.deploymentLog;
|
|
if (deploymentData.status) deployment.status = deploymentData.status;
|
|
if (deploymentData.healthStatus) deployment.healthStatus = deploymentData.healthStatus;
|
|
if (deploymentData.resourceUsage) deployment.resourceUsage = deploymentData.resourceUsage;
|
|
|
|
await deployment.save();
|
|
return deployment;
|
|
}
|
|
|
|
public async updateHealthStatus(healthStatus: 'healthy' | 'unhealthy' | 'unknown') {
|
|
this.healthStatus = healthStatus;
|
|
await this.save();
|
|
}
|
|
|
|
public async updateResourceUsage(cpuUsagePercent: number, memoryUsedMB: number) {
|
|
this.resourceUsage = {
|
|
cpuUsagePercent,
|
|
memoryUsedMB,
|
|
lastUpdated: Date.now(),
|
|
};
|
|
await this.save();
|
|
}
|
|
|
|
public async addLogEntry(entry: string) {
|
|
this.deploymentLog.push(entry);
|
|
await this.save();
|
|
}
|
|
|
|
public async createSavableObject(): Promise<plugins.servezoneInterfaces.data.IDeployment> {
|
|
return {
|
|
id: this.id,
|
|
serviceId: this.serviceId,
|
|
nodeId: this.nodeId,
|
|
containerId: this.containerId,
|
|
usedImageId: this.usedImageId,
|
|
version: this.version,
|
|
deployedAt: this.deployedAt,
|
|
deploymentLog: this.deploymentLog,
|
|
status: this.status,
|
|
healthStatus: this.healthStatus,
|
|
resourceUsage: this.resourceUsage,
|
|
};
|
|
}
|
|
}
|