feat: gate releases on platform health

This commit is contained in:
Codex Local
2026-08-26 22:04:38 +08:00
parent 47ef596d3b
commit e4f7701439
12 changed files with 189 additions and 33 deletions
+17 -1
View File
@@ -2694,6 +2694,21 @@ export interface components {
migration_version: number;
dirty: boolean;
};
OpsAcceptancePlatformHealthState: {
/** @enum {string} */
state: "CURRENT" | "STALE" | "MISSING";
/** @enum {string} */
status?: "healthy" | "warning" | "critical";
/** Format: date-time */
observed_at?: string;
/** Format: date-time */
received_at?: string;
check_count: number;
warning_count: number;
critical_count: number;
/** @description 仅当快照未超过15分钟且综合状态及全部检查均为healthy时为true。 */
gate_satisfied: boolean;
};
OpsAcceptanceDependencyState: {
/** @enum {string} */
service_name: "api" | "worker";
@@ -2758,7 +2773,7 @@ export interface components {
};
OpsAcceptanceGate: {
/** @enum {string} */
code: "candidate_build_identified" | "database_migration_clean" | "required_dependencies_available" | "integration_issues_clear" | "outbox_clear" | "critical_alerts_clear";
code: "candidate_build_identified" | "database_migration_clean" | "required_dependencies_available" | "integration_issues_clear" | "outbox_clear" | "critical_alerts_clear" | "platform_health_current";
satisfied: boolean;
summary: string;
};
@@ -2784,6 +2799,7 @@ export interface components {
external_dependencies: components["schemas"]["OpsAcceptanceDependencyState"][];
outbox: components["schemas"]["OpsAcceptanceOutboxState"];
alerts: components["schemas"]["OpsAcceptanceAlertState"];
platform_health: components["schemas"]["OpsAcceptancePlatformHealthState"];
gates: components["schemas"]["OpsAcceptanceGate"][];
overall_gate_satisfied: boolean;
disclaimer: string;
+1 -1
View File
@@ -152,5 +152,5 @@ function platformHealthCheckStatusLabel(value:PlatformHealthSnapshot["checks"][n
function platformHealthCheckLabel(value:string){const labels:Record<string,string>={public_origin:"公网地址",public_https:"HTTPS入口",oidc_issuer:"身份签发地址",backup_freshness:"本地备份",offsite_backup:"异地备份",backup_service:"备份服务","platform-backup.timer":"备份定时器","platform-offsite-backup.timer":"异地备份定时器","certbot-ip-renew.timer":"证书续期定时器",certificate:"HTTPS证书",disk_usage:"磁盘空间",container_postgres:"PostgreSQL",container_redis:"Redis",container_minio:"对象存储",container_keycloak:"身份服务",container_api:"业务API",container_callbacks:"回调服务",container_worker:"后台任务",container_web:"前端页面",container_gateway:"HTTPS网关","container_mock-provider":"模拟语音提供器","container_mock-alert-receiver":"模拟告警接收器"};return labels[value]??value}
function platformHealthValueLabel(_name:string,value:string){if(value==="not_required")return "当前未要求启用";if(value==="issuer_matches")return "签发地址一致";if(value==="http_200")return "公网访问成功";if(value==="enabled/active")return "已启用并运行";if(value==="success")return "最近执行成功";if(value.startsWith("age_seconds=")){const seconds=Number(value.slice(12));return Number.isFinite(seconds)?`距最近成功 ${formatDuration(seconds*1000)}`:value}if(value.startsWith("remaining_seconds=")){const seconds=Number(value.slice(18));return Number.isFinite(seconds)?`剩余 ${Math.floor(seconds/86400)} 天` : value}if(value.startsWith("used_percent="))return `已使用 ${value.slice(13)}%`;if(value==="running/healthy"||value==="running/none")return "容器正在运行";return value}
function downloadJSON(value:unknown,filename:string){const blob=new Blob([JSON.stringify(value,null,2)],{type:"application/json"});const url=URL.createObjectURL(blob);const anchor=document.createElement("a");anchor.href=url;anchor.download=filename;anchor.click();URL.revokeObjectURL(url)}
function acceptanceGateLabel(value:OpsAcceptanceSnapshot["gates"][number]["code"]){return ({candidate_build_identified:"候选构建",database_migration_clean:"数据库迁移",required_dependencies_available:"必需外部依赖",integration_issues_clear:"高严重度问题",outbox_clear:"可靠任务",critical_alerts_clear:"高严重度告警"} as Record<OpsAcceptanceSnapshot["gates"][number]["code"],string>)[value]}
function acceptanceGateLabel(value:OpsAcceptanceSnapshot["gates"][number]["code"]){return ({candidate_build_identified:"候选构建",database_migration_clean:"数据库迁移",required_dependencies_available:"必需外部依赖",integration_issues_clear:"高严重度问题",outbox_clear:"可靠任务",critical_alerts_clear:"高严重度告警",platform_health_current:"云端主机健康"} as Record<OpsAcceptanceSnapshot["gates"][number]["code"],string>)[value]}
function acceptanceResourceStateLabel(value:OpsAcceptanceSnapshot["alerts"]["blocking_items"][number]["resource_state"]){return ({PRESENT:"资源存在",MISSING:"资源已不存在,仍需人工复核关闭",AGGREGATE:"聚合队列",UNKNOWN:"未提供自动核对规则"} as Record<OpsAcceptanceSnapshot["alerts"]["blocking_items"][number]["resource_state"],string>)[value]}