diff --git a/system-update/releases/model-conversion-20261003.json b/system-update/releases/model-conversion-20261003.json index 7196cd9..8bd010a 100644 --- a/system-update/releases/model-conversion-20261003.json +++ b/system-update/releases/model-conversion-20261003.json @@ -1,5 +1,5 @@ { - "status": "prepared-awaiting-production-target", + "status": "test-verified-awaiting-production-target", "productVersion": "3.23.0.20261003", "source": { "backend": "8a67a2f180e6c6af3fab760a32d6bcc78ca1cee2", @@ -110,9 +110,61 @@ "basis": "No diff under apps/easyai-wsgateway or shared libraries compared with recorded backend source e3f12240; actual target still needs inspection." }, "limitations": [ - "These are local candidate-image acceptance results, not production acceptance.", - "M4 Max executes amd64 containers through emulation; reported conversion timing is not a production hardware benchmark.", - "Customer original GLB is not available.", - "Live customized Compose, ICE overrides and proxy access must be inspected on the confirmed target before update." - ] + "Test deployment and acceptance passed; production has not been deployed and registry latest was not promoted by this release.", + "Test host has 2 CPU cores, 3.576 GiB physical RAM and no swap; Worker limit is 2 CPU / 4 GiB. Saturation isolation, 20-cycle memory trends and capacity must be measured separately before production rollout.", + "Remote conversion timings are individual functional runs including network upload/download, not a controlled A/B/C performance benchmark.", + "Customer original GLB and additional real hardware remain unavailable for acceptance.", + "Pixel-level editor/preview/image/video consistency and full legacy/template interactions were not repeated on this test host; earlier directed/local evidence remains scoped to its original environment.", + "Browser end-to-end wall-clock duration was not recorded; successful browser phases, original HTTP evidence, actual transform readings, persisted resource data and screenshots are retained." + ], + "testRelease": { + "productVersion": "3.23.0.20261003.1", + "verifiedAt": "2026-10-04", + "domain": "demo.51easyai.com", + "deploymentPath": "/root/easyai", + "deploymentEntry": "update.sh", + "deploymentImplementation": "2a1192eb7ec822773f55af96fa12e06bf96774a8", + "source": { + "backend": "be56a7e0ec79d1a1e7420d870709014ed4bf010a", + "web": "965c417288c5f09260c6e28254cde62af7683854", + "workerImageBuild": "83cefbfdf2bc909d11ace9f020b108145844051a" + }, + "images": { + "server": { + "tag": "registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server:3.23.0.20261003.1", + "digest": "sha256:2b2d7e0cb8270d3540f3562e5debdb6a84a8cd2ae610c7c2f6a991cce1cc681c", + "rebuilt": true + }, + "web": { + "tag": "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai:3.23.0.20261003.1", + "digest": "sha256:bb1ff1dc77518ca01b770d03317fbddb0e2bf8eda6c27b70d6dbec0944d8e78e", + "reusedImage": true, + "originalOciVersion": "3.23.0.20261003" + }, + "webNoSsr": { + "tag": "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai:3.23.0.20261003.1-no-ssr", + "digest": "sha256:d97c52ac76c462140827e8d9d9a1198f36dd2cc7d2c6defed60f9f7aee87cbaf", + "reusedImage": true, + "originalOciVersion": "3.23.0.20261003", + "deployedInTest": false + }, + "worker": { + "tag": "registry.cn-shanghai.aliyuncs.com/easyaigc/model-conversion-worker:3.23.0.20261003.1", + "digest": "sha256:085fa49d99a06562ce9634bfdd8567efdfe4e38754e9688de81288d2e2578526", + "reusedImage": true, + "originalOciVersion": "3.23.0.20261003" + } + }, + "floatingTagsPromoted": false, + "evidence": "model-conversion-20261003/test/README.md", + "browserEvidence": "model-conversion-20261003/test/browser/results.json", + "uploadRegressionEvidence": "model-conversion-20261003/test/browser/upload-regression.json", + "conversionEvidence": "model-conversion-20261003/test/patch-conversion/results.json", + "runtimeEvidence": "model-conversion-20261003/test/patch-deployment.json", + "nonTargetContainersPreserved": 13, + "screenshots": [ + "model-conversion-20261003/test/browser/import.png", + "model-conversion-20261003/test/browser/saved-reopened.png" + ] + } } diff --git a/system-update/releases/model-conversion-20261003/test/README.md b/system-update/releases/model-conversion-20261003/test/README.md new file mode 100644 index 0000000..571d851 --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/README.md @@ -0,0 +1,49 @@ +# 模型转换服务测试环境发布验收 + +2026-10-04,`https://demo.51easyai.com`,主机 `8.218.158.189`,部署目录 `/root/easyai`。 +测试环境已发布并完成以下验收;生产未部署,本次仅推送固定版本镜像,没有推送 `latest`。 + +## 发布和兼容升级 + +- 部署实现:`2a1192eb7ec822773f55af96fa12e06bf96774a8`。后端补丁:`be56a7e0ec79d1a1e7420d870709014ed4bf010a`。 +- 初次从旧部署 `f04bb5e` 更新,实际复现了定制 Compose 和未跟踪配置阻断旧脚本拉取,以及 updater 占用 API 固定地址的问题。首次使用新版 `update.sh` 的旧配置迁移入口完成备份、语义合并和更新,再由同一脚本部署服务;没有手动修改数据库或替代脚本启动业务容器。 +- 最终更新命令:`UPDATE_MODE=image UPDATE_NON_INTERACTIVE=1 UPDATE_RELEASE_VERSION=3.23.0.20261003.1 UPDATE_SERVICES='easyai-server easyai-web model-conversion-worker' bash /root/easyai/update.sh`。 +- API 镜像重新构建。前端 SSR、no-SSR 和 Worker 发布 `.1` 版本别名,镜像摘要与原版本相同,其 OCI 构建版本仍为 `3.23.0.20261003`;测试主机运行 SSR。完整摘要见上级发布记录及 `patch-deployment.json`。 +- API、前端、Worker、updater 均健康;版本接口为 `3.23.0.20261003.1`,主页、健康及更新就绪接口均 HTTP 200。补丁更新中的 13 个非目标容器保留容器 ID 和启动时间,Nginx 及原鉴权、Mongo、Redis配置已核验保留。 +- 旧配置备份保存在主机受限目录 `data/deployment-backups/legacy-update-20261003-075918-g3q8cib5`;本机记录不含配置密钥。后续固定版本更新直接使用部署目录的 `update.sh`。 + +## 浏览器上传问题的复现和修复 + +实际进入普通 `/ai/canvas/:projectId`,从文件输入选择 OBJ,确认米、默认轻量副本和性能优先。修复前,上传计划返回 HTTP 201,但本地存储合法地省略了 `headers`;浏览器在 `Object.entries(upload.headers)` 抛出 `TypeError: Cannot convert undefined or null to object`,未发送文件 PUT,未进入转换。 + +修复仅在模型转换接口把省略的请求头变为 `{}`,保留云存储提供的签名头,通用存储行为不变。真实服务回归测试修复前 1 失败、1 通过;修复后转换协议 13 项和存储既有行为 27 项全部通过。证据为 `browser/upload-regression.json`,失败截图为 `browser/import-failed.png`。 + +修复后真实 Chrome 通过普通画布执行了文件 PUT、资源完成、CanvasTask、独立 Worker 转换及 WebGL 加载,原始网络证据保存在 `browser/uncached-import.json`。没有隐藏界面、替换真实加载器或强制点击。 + +## 实际结果 + +| 验收 | 结果 | 原始记录 | +| --- | --- | --- | +| 默认素体 | 站立身高 1.72 米 | `browser/results.json` | +| OBJ 导入 | 20 × 0.2 × 20 米,默认轻量副本、性能优先 | `browser/uncached-import.json`、`browser/import.png` | +| 实际缩放 | 0.05 → 1 × 0.01 × 1;10 → 200 × 2 × 200;20 → 400 × 4 × 400;恢复 1 → 20 × 0.2 × 20 米 | `browser/transform-save.json`,数值来自实际控件读数 | +| 保存与全新浏览器重开 | 米制 `sceneState` 保留轻量版本、倍率 1、资源 ID;尺寸 20 × 0.2 × 20 米;场景 JSON 3239 字节,没有 Base64;页面无异常 | `browser/results.json`、`browser/saved-reopened.png` | +| 约 80 万面 GLB,补丁环境重测 | 798848 → 100000 三角面;19203544 → 714896 字节;20 × 0.200000003 × 20 → 20 × 0.199977756 × 20 米;高度误差约 0.022 毫米;产物 SHA 校验通过 | `patch-conversion/results.json` | +| 4K 贴图 | 4096² → 1024²;生成 KTX2 和 PNG 兼容产物;保留尺寸 | `texture-4096/results.json`,原版本实测,补丁复用同一 Worker 镜像 | +| 骨骼和动画 | 100001 三角面不减面;3 个节点、1 套骨骼、1 个动画保留;尺寸保留 | `skin-animation/results.json`,原版本实测,补丁复用同一 Worker 镜像 | +| Worker 专属接口与付费通道 | 匿名和普通登录 token 都不能调用产物管理接口,均 HTTP 403;混元通道关闭 | `patch-worker-access.json` | + +验收分阶段执行:先完成真实导入、变换和普通保存,再以全新 Chrome 会话重开并检查。保存会自动关闭编辑器;已有图片输出的节点通过编辑按钮重开,双击图片按原契约打开图片预览。米制 fixture 使用正式 `sceneState` 字段。早期脚本对这些入口的错误假设已纠正,不计作业务失败或成功证据。 + +## 耗时和资源边界 + +- 转换协议定向 Nx:2.38 秒(13 项,Jest 0.84 秒);存储定向 Nx:1.87 秒(27 项,Jest 0.638 秒)。 +- Shared 构建 0.66 秒,API 定向 Nx 构建 20.83 秒。正式 Linux amd64 Dockerfile 构建、固定版本推送及实际部署均已完成;未记录本次 Docker 构建和浏览器全链路的完整墙钟耗时。 +- 最后一次 GLB 链路共 71.932 秒:上传 18.502 秒,转换、任务等待和产物下载共 52.444 秒。该数值包含网络与存储开销,是一次功能复验,不是受控 A/B/C benchmark,也不能单独解读为减面计算耗时。 +- 转换及下载期间的 12 个本机 API 可用性采样全部 HTTP 200,中位数约 2.17 毫秒,最大约 6.17 毫秒。见 `patch-runtime-samples.json`;这不能证明满载 P95 退化目标。 +- Worker 实际限制:2 CPU、4 GiB、并发 1、PID 64、只读根文件系统、无主机端口;共享内部鉴权配置匹配。见 `patch-deployment.json`。测试主机仅 2 CPU、3.576 GiB 实际内存、没有 swap,不能把本轮小规模通过当作生产容量结论。 +- 旧配置迁移、固定版本及 Bash/PowerShell 更新定向测试通过,分别约 1.28 秒、21.045 秒;测试主机的旧脚本冲突和新版脚本更新另外经过真实执行。没有用命令 mock 替代真实发布验收。 + +## 尚未覆盖 + +客户原始 GLB、其他实际硬件、Worker 满载时的 API 基线对照、20 次循环内存趋势,仍需独立验收。测试主机没有重新执行全部旧场景/模板交互,也没有完成编辑器、机位预览、图片与视频的逐像素对应点检查;先前定向/本地记录仅代表其原环境。不得据此声称视觉无损、全部性能目标或生产验收已通过。原质量记录中的国际化历史缺失项仍未改动。 diff --git a/system-update/releases/model-conversion-20261003/test/browser/import-failed.png b/system-update/releases/model-conversion-20261003/test/browser/import-failed.png new file mode 100644 index 0000000..bf72deb Binary files /dev/null and b/system-update/releases/model-conversion-20261003/test/browser/import-failed.png differ diff --git a/system-update/releases/model-conversion-20261003/test/browser/import.png b/system-update/releases/model-conversion-20261003/test/browser/import.png new file mode 100644 index 0000000..3b467dc Binary files /dev/null and b/system-update/releases/model-conversion-20261003/test/browser/import.png differ diff --git a/system-update/releases/model-conversion-20261003/test/browser/results.json b/system-update/releases/model-conversion-20261003/test/browser/results.json new file mode 100644 index 0000000..69bc27a --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/browser/results.json @@ -0,0 +1,139 @@ +{ + "passed": true, + "environment": "test", + "url": "https://demo.51easyai.com/ai/canvas/6ac046133db0eda177a9896e", + "projectId": "6ac046133db0eda177a9896e", + "nodeId": "model-conversion-deployment-acceptance", + "apiVersion": "3.23.0.20261003.1", + "standingHeight": 1.72, + "lightweight": true, + "quality": "performance", + "importedDimensions": { + "width": "20.00", + "height": "0.20", + "depth": "20.00" + }, + "uncachedUploadEvidence": "uncached-import.json", + "scaleChecks": [ + { + "scale": 0.05, + "width": 1.0, + "height": 0.01, + "depth": 1.0 + }, + { + "scale": 10.0, + "width": 200.0, + "height": 2.0, + "depth": 200.0 + }, + { + "scale": 20.0, + "width": 400.0, + "height": 4.0, + "depth": 400.0 + }, + { + "scale": 1.0, + "width": 20.0, + "height": 0.2, + "depth": 20.0 + } + ], + "scaleChecksEvidence": "transform-save.json", + "savedResource": { + "resourceId": "c459455a-7479-4310-8b66-3da706dfc513", + "selected": "lightweight", + "format": "obj", + "sceneBytes": 3239, + "containsBase64": false + }, + "reopenedDimensions": { + "width": 20, + "height": 0.2, + "depth": 20 + }, + "errors": [], + "requests": [ + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugins/runtime-manifest" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/runtime-snapshots" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/upload/files/2026-10-04%2F6937758647fc2fff48b99759%2Fupload%2Fdirector-3d-model-conversion-deployme-3sfggu.png" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/resource-actions" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + } + ] +} diff --git a/system-update/releases/model-conversion-20261003/test/browser/saved-reopened.png b/system-update/releases/model-conversion-20261003/test/browser/saved-reopened.png new file mode 100644 index 0000000..21eaa0a Binary files /dev/null and b/system-update/releases/model-conversion-20261003/test/browser/saved-reopened.png differ diff --git a/system-update/releases/model-conversion-20261003/test/browser/transform-save.json b/system-update/releases/model-conversion-20261003/test/browser/transform-save.json new file mode 100644 index 0000000..af901f3 --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/browser/transform-save.json @@ -0,0 +1,33 @@ +{ + "passed": true, + "source": "captured live Playwright import, scale and UI save run", + "scaleChecks": [ + { + "scale": 0.05, + "width": 1.0, + "height": 0.01, + "depth": 1.0 + }, + { + "scale": 10.0, + "width": 200.0, + "height": 2.0, + "depth": 200.0 + }, + { + "scale": 20.0, + "width": 400.0, + "height": 4.0, + "depth": 400.0 + }, + { + "scale": 1.0, + "width": 20.0, + "height": 0.2, + "depth": 20.0 + } + ], + "savedResourceId": "c459455a-7479-4310-8b66-3da706dfc513", + "saveBehavior": "Save persists sceneState and closes editor; no extra Close click is needed", + "logExcerpt": "stage: 'saved',\n scaleChecks: [\n { scale: 0.05, width: 1, height: 0.01, depth: 1 },\n { scale: 10, width: 200, height: 2, depth: 200 },\n { scale: 20, width: 400, height: 4, depth: 400 },\n { scale: 1, width: 20, height: 0.2, depth: 20 }\n ],\n resourceId: 'c459455a-7479-4310-8b66-3da706dfc513'" +} diff --git a/system-update/releases/model-conversion-20261003/test/browser/uncached-import.json b/system-update/releases/model-conversion-20261003/test/browser/uncached-import.json new file mode 100644 index 0000000..994394c --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/browser/uncached-import.json @@ -0,0 +1,124 @@ +{ + "passed": true, + "standingHeight": "1.72", + "lightweight": true, + "quality": "performance", + "dimensions": { + "width": "20.00", + "height": "0.20", + "depth": "20.00" + }, + "errors": [], + "requests": [ + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugins/runtime-manifest" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/runtime-snapshots" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/resource-actions" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "POST", + "status": 201, + "path": "https://demo.51easyai.com/api/model-conversion/resources/source-upload" + }, + { + "method": "PUT", + "status": 200, + "path": "https://demo.51easyai.com/api/file/upload/presigned" + }, + { + "method": "POST", + "status": 201, + "path": "https://demo.51easyai.com/api/model-conversion/resources/complete" + }, + { + "method": "POST", + "status": 201, + "path": "https://demo.51easyai.com/api/canvas-workflow/execute" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/tasks/6ac1e6066b4e2617cabdafa5" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/tasks/6ac1e6066b4e2617cabdafa5" + }, + { + "method": "GET", + "status": 200, + "path": "https://demo.51easyai.com/api/canvas-workflow/tasks/6ac1e6066b4e2617cabdafa5" + } + ] +} \ No newline at end of file diff --git a/system-update/releases/model-conversion-20261003/test/browser/upload-regression.json b/system-update/releases/model-conversion-20261003/test/browser/upload-regression.json new file mode 100644 index 0000000..37ffe6e --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/browser/upload-regression.json @@ -0,0 +1,50 @@ +{ + "environment": "test", + "trigger": { + "entry": "/ai/canvas/:projectId", + "file": "stage-20m.obj", + "sourceUnit": "m", + "lightweight": true, + "quality": "performance", + "storage": "local presigned upload with optional headers omitted" + }, + "before": { + "sourceUploadHTTP": 201, + "headersPresent": false, + "putAttempted": false, + "completeAttempted": false, + "exception": "TypeError: Cannot convert undefined or null to object", + "uiMessage": "模型未能加载,当前场景保持不变。请检查文件后重试。", + "screenshot": "import-failed.png" + }, + "cause": { + "frontend": "Object.entries(upload.headers)", + "api": "ModelConversionService.prepareSource returned optional storage headers without normalizing its required browser response field", + "storageContract": "OssService.getPreSignedUrlS3 headers is optional; local storage intentionally omits it" + }, + "fix": { + "backendSource": "be56a7e0ec79d1a1e7420d870709014ed4bf010a", + "apiVersion": "3.23.0.20261003.1", + "change": "Return upload.headers ?? {} in model-conversion source-upload API; leave supplied signature headers unchanged", + "scope": "Model conversion upload plan only; generic storage behavior unchanged" + }, + "regression": { + "before": { + "tests": 2, + "failed": 1, + "passed": 1, + "seconds": 0.579, + "failure": "browserPlan.upload.headers expected {} but received undefined" + }, + "after": { + "modelConversionTests": 13, + "modelConversionSeconds": 0.84, + "nxElapsedSeconds": 2.38, + "storageTests": 27, + "storageSeconds": 0.638, + "storageNxElapsedSeconds": 1.87 + }, + "sharedBuildSeconds": 0.66, + "apiNxBuildSeconds": 20.83 + } +} diff --git a/system-update/releases/model-conversion-20261003/test/conversion/results.json b/system-update/releases/model-conversion-20261003/test/conversion/results.json new file mode 100644 index 0000000..6485e8a --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/conversion/results.json @@ -0,0 +1,64 @@ +{ + "passed": true, + "apiOrigin": "https://demo.51easyai.com", + "projectId": "6ac046133db0eda177a9896e", + "nodeId": "model-conversion-deployment-acceptance", + "taskId": "6ac0461a3db0eda177a989ab", + "sourceHash": "f686ed16f4f90cc9b8ad9b5fc7d133d3768b1851620b107dd811fbd85a19f834", + "sourceBytes": 19203544, + "artifactHash": "889709b74d725388f3b225f7b158a0717d0c07fa0a8532fad8358cecf616f581", + "artifactBytes": 714896, + "originalDimensions": { + "width": 20, + "height": 0.20000000298023224, + "depth": 20 + }, + "actualDimensions": { + "width": 20, + "height": 0.19997775554656982, + "depth": 20 + }, + "loadingUnit": "meters", + "converterVersion": "assimp6.0.5-gltf4.3.0-meshopt0.25.0-ktx4.4.2-recipe2", + "statistics": { + "before": { + "triangles": 798848, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 19202712, + "textures": [], + "estimatedTextureGpuBytes": 0 + }, + "after": { + "triangles": 100000, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 1830360, + "textures": [], + "estimatedTextureGpuBytes": 0 + }, + "primary": { + "triangles": 100000, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 1830360, + "textures": [], + "estimatedTextureGpuBytes": 0 + } + }, + "uploadMs": 7038, + "conversionAndDownloadMs": 32771, + "elapsedMs": 40691 +} \ No newline at end of file diff --git a/system-update/releases/model-conversion-20261003/test/deployment.json b/system-update/releases/model-conversion-20261003/test/deployment.json new file mode 100644 index 0000000..d9be6c9 --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/deployment.json @@ -0,0 +1,337 @@ +{ + "host": "8.218.158.189", + "domain": "demo.51easyai.com", + "deploymentPath": "/root/easyai", + "head": "2a1192eb7ec822773f55af96fa12e06bf96774a8", + "before": { + "head": "f04bb5e4fce8cf17430c2fc0ead77c1127f1d3b1", + "configHashes": { + "docker-compose.yml": "5841891777edbbcbf8aaeff1d3a9ab8288d3488cf1e62d309e62a44484cca801", + ".env": "f81f72ae94056ab0a0d5c685920406ad0cf52eafcd01f33a11ad5c78e43f7d29", + "/etc/nginx/conf.d/51easyai-proxy.conf": "3ee233b6e120892a9b1569ea21fe59081b1b5a917377e6eda435086613315c9f" + }, + "containers": [ + { + "name": "/easyai-web", + "id": "cb5f2943e428474adb4610e44fded3df4e79b0e8089c6aadd05024bc8917e40b", + "imageId": "sha256:4161c653ff66e92e0f24f0b175bb9b3a447f095c0e55b238f480a12ddce2821f", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai:latest", + "state": "running", + "startedAt": "2026-10-02T12:40:16.569346711Z", + "restarts": 0 + }, + { + "name": "/easyai-server", + "id": "b207b401ca01a3368340922d87678250481d1e95d3abb1c41831a97ae3fb029c", + "imageId": "sha256:72ec514ed221c424422542f7922f3962b03de969a65e3ffec058fa7cd70e1fea", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server:latest", + "state": "created", + "startedAt": "0001-01-01T00:00:00Z", + "restarts": 0 + }, + { + "name": "/easyai-updater", + "id": "012bea8f8d5a99a67f55b464b7b6f9c3b404cbbf8b3d10faf0c39b81aaa62f19", + "imageId": "sha256:275e9ff7fb453d16feabfb9b92e1cd603f49c434bf2daa80a9f5ad6f505bffcb", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/easyai-updater:latest", + "state": "running", + "startedAt": "2026-10-02T12:40:15.160868359Z", + "restarts": 0 + }, + { + "name": "/easyai-watchtower-1", + "id": "fa985a32d2b688d341ff92db280b9001685c425675703c083fbfa9503ff0144a", + "imageId": "sha256:04f6afca616ae63c48c860250212b7406ba917b712f4b2ebff5d43ef45578b87", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/watchtower-aliyun:latest", + "state": "running", + "startedAt": "2026-10-02T11:39:34.798099789Z", + "restarts": 0 + }, + { + "name": "/easyai-wsgateway", + "id": "96ea991bfc5931beaeafdefb6ae22ac95e7e5e35d85aa34ee2daecdad3fc9f0c", + "imageId": "sha256:821ed6a69be4771c57a7bf67084455a4c0c7e4c9e201b8e7bcb2dedf1fb229f5", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/wsgateway@sha256:a2b5fb67384c7f0eca7c7a768b5deacb4c0d2195dfbeb6e16ef40d6dc097bf25", + "state": "running", + "startedAt": "2026-10-02T11:36:12.54021925Z", + "restarts": 0 + }, + { + "name": "/agent-memory", + "id": "36cff7dfc04d41bff432ab25d4e28eb618a8e3eb77b22b06b73379bf762b75a9", + "imageId": "sha256:c660e243c9499f9a11a3875c8667692e44dd5fc5c96286f116569571bc41c84d", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/agent-memory:latest", + "state": "running", + "startedAt": "2026-09-24T08:31:06.096138261Z", + "restarts": 0 + }, + { + "name": "/easyai-asg", + "id": "8dd55099f03beeabe2eca98ea28f63f426282e781f8afbe56e4b3687a0d6dd66", + "imageId": "sha256:49f6f61c60a742c3332a7f2848a5dc135adc3eb094f5db11c0e5039afd281b09", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/agent-governance:latest", + "state": "running", + "startedAt": "2026-09-24T08:31:01.812221909Z", + "restarts": 0 + }, + { + "name": "/redis", + "id": "fba236d5fbeef5fe788f95a2dbc1356a6e9aff5e380725f507b94b298ded63f9", + "imageId": "sha256:d9f3c2aa7439bef41152d378fbd0f569f6c751db9b782fb63598cf23fd125c51", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/redis-aliyun:latest", + "state": "running", + "startedAt": "2026-09-10T02:24:31.671562504Z", + "restarts": 0 + }, + { + "name": "/easyai-easyai-web-init-1", + "id": "b0ef7b67e90fa287663c85b469fe701708761b64bbc20eca2ed92841ad57a488", + "imageId": "sha256:adec17f19c7e2e63268a5cede2aa76bdbaccc5430806bf509a844807b0f10dae", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai@sha256:aa84dab8c88d57481e195be1b0633d79d83e43669d169214edfac3779f5cc271", + "state": "exited", + "startedAt": "2026-07-30T07:25:35.56821945Z", + "restarts": 0 + }, + { + "name": "/rabbitmq", + "id": "dc02f6fb960a47e24e75e25f438c10552c2974e206ace60e91ad2e13c79fb351", + "imageId": "sha256:45d1c8fe2d7bef670b67b19768218e34d66ef09c880d177541f34dedc6363535", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/mq:latest", + "state": "running", + "startedAt": "2026-07-21T04:32:55.343273655Z", + "restarts": 0 + }, + { + "name": "/video-edit", + "id": "1f7353e599205647770c4b170d3dc363cb589d9bbbd7a0788e9b400d980e4126", + "imageId": "sha256:0864f11706bd1158ffd30a7c5c2b8e99673ba7d94df984d900add17e5a3004eb", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/videoedit:latest", + "state": "running", + "startedAt": "2026-07-21T04:32:55.732336992Z", + "restarts": 0 + }, + { + "name": "/easyai-pgvector", + "id": "c17b4bcfb926890bc13d4dbfeaf39ff30e4fa30bc904f21321392d9aa08c5724", + "imageId": "sha256:cdc8b3de66a0fbffceef90077fde8845a2346034ad8f309f4022a84039fed955", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/pgvector:0.8.2-pg18-trixie", + "state": "running", + "startedAt": "2026-07-21T04:32:56.784729621Z", + "restarts": 0 + }, + { + "name": "/mongo", + "id": "f5c560c65ea4c2203c69fd45e1c1093cbb9725bcf31c4b97eff205ef7a08690e", + "imageId": "sha256:fb4debd652389d87df781cd0da313bef78f90ed1dca45f3409b58364503e32d0", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/mongo-aliyun:latest", + "state": "running", + "startedAt": "2026-09-01T08:56:08.427872854Z", + "restarts": 1 + }, + { + "name": "/dozzle", + "id": "ca61f6101524051530ee5cf78d075d72f4dbe20e111336567d8c7d60b702c5a9", + "imageId": "sha256:14a70c19c34c366e364b992908d4f387e5d61cf1759d4c914bc4c69c2fa151a7", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/dozzle:latest", + "state": "running", + "startedAt": "2026-07-21T04:32:55.175233142Z", + "restarts": 0 + }, + { + "name": "/sandbox", + "id": "660f96b37109ccd13f62b3b58c7a7925d04acae24147d21aa694231c5105b287", + "imageId": "sha256:167b0fa1056c295f32d45b3a3c5e36691dbf0ba165419de7134721847596df98", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/sandbox:latest", + "state": "running", + "startedAt": "2026-07-21T04:32:57.369808773Z", + "restarts": 0 + } + ] + }, + "after": [ + { + "name": "/easyai-model-conversion-worker", + "id": "9637b09caee98617f8b842edb060d3c145ad6d26bbb560596a6203e99151f632", + "imageId": "sha256:51738088956b41768a4c02dd89eeec746894d5c0becaa85875faa9f454caacf1", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/model-conversion-worker:3.23.0.20261003", + "repoDigests": [ + "registry.cn-shanghai.aliyuncs.com/easyaigc/model-conversion-worker@sha256:085fa49d99a06562ce9634bfdd8567efdfe4e38754e9688de81288d2e2578526" + ], + "revision": "83cefbfdf2bc909d11ace9f020b108145844051a", + "health": "healthy", + "restarts": 0, + "ports": {}, + "networks": { + "easyai_easyai": "172.21.0.7" + } + }, + { + "name": "/easyai-server", + "id": "c1d517b4a096df06c08080633fc05863188dc7194b443ba4379f87996b3a0e00", + "imageId": "sha256:fbdf5f37bb820287001cab126692d5abdffd911928831ba303f1d7ab1c40d85d", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server:3.23.0.20261003", + "repoDigests": [ + "registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server@sha256:a21a59205ced431987dda6c72d4fe5c0ad00ced97311500b10d08a9c1237bbce" + ], + "revision": "83cefbfdf2bc909d11ace9f020b108145844051a", + "health": "healthy", + "restarts": 0, + "ports": { + "3001/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "3001" + } + ] + }, + "networks": { + "easyai_easyai": "172.21.0.6", + "easyai_sandbox-network": "172.20.0.2" + } + }, + { + "name": "/easyai-web", + "id": "01688690a641bb177b1cf4fcf3f8b67cb2b920da3b75c34ce73f9909a4f86097", + "imageId": "sha256:7518be1d633ff4316ac622523b7ea9f3d35ade61bcbec42ba7262200d181c805", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai:3.23.0.20261003", + "repoDigests": [ + "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai@sha256:bb1ff1dc77518ca01b770d03317fbddb0e2bf8eda6c27b70d6dbec0944d8e78e" + ], + "revision": "965c417288c5f09260c6e28254cde62af7683854", + "health": "healthy", + "restarts": 0, + "ports": { + "3010/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "3010" + } + ] + }, + "networks": { + "easyai_easyai": "172.21.0.8" + } + }, + { + "name": "/easyai-updater", + "id": "9fe7cc3b36405ec67909cfaf72abbae8b01abc51f9e38a8cab863f1dbe046cc8", + "imageId": "sha256:275e9ff7fb453d16feabfb9b92e1cd603f49c434bf2daa80a9f5ad6f505bffcb", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/easyai-updater:latest", + "repoDigests": [ + "registry.cn-shanghai.aliyuncs.com/easyaigc/easyai-updater@sha256:bbaddb598618ceaaf6696f6c5fe19daf564d983039b70d36a4196cc4aaca385a" + ], + "revision": null, + "health": "healthy", + "restarts": 0, + "ports": {}, + "networks": { + "easyai_easyai": "172.21.0.31" + } + } + ], + "unrelatedContainers": [ + { + "name": "/easyai-watchtower-1", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-wsgateway", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/agent-memory", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-asg", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/redis", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-easyai-web-init-1", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/rabbitmq", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/video-edit", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-pgvector", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/mongo", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/dozzle", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/sandbox", + "sameId": true, + "sameStartedAt": true + } + ], + "settingsPreserved": { + "CONFIG_JWT_SECRET": true, + "WS_AUTH_WS_TICKET_SECRET": true, + "MONGO_INITDB_ROOT_USERNAME": true, + "MONGO_INITDB_ROOT_PASSWORD": true, + "SYSTEM_UPDATE_MODE": true, + "NUXT_PUBLIC_BASE_APIURL": true, + "CONFIG_COMFYUI_QUENE_REDIS_DB": true, + "WATCHTOWER_UPDATE_TARGET": true + }, + "nginxPreserved": true, + "sharedWorkerTokenMatched": true, + "health": { + "/home": { + "status": 200 + }, + "/api/app/version": { + "status": 200, + "body": { + "status": "success", + "data": { + "version": "3.23.0.20261003" + }, + "message": "success" + } + }, + "/api/health": { + "status": 200 + }, + "/api/health/update-ready": { + "status": 200 + } + }, + "trackedDiff": [], + "backupPath": "data/deployment-backups/legacy-update-20261003-075918-g3q8cib5", + "legacyOverridePath": "data/deployment-config/legacy-compose.json", + "workerLimits": { + "Memory": 4294967296, + "MemorySwap": 4294967296, + "NanoCpus": 2000000000, + "PidsLimit": 64, + "ReadonlyRootfs": true + } +} diff --git a/system-update/releases/model-conversion-20261003/test/patch-conversion/results.json b/system-update/releases/model-conversion-20261003/test/patch-conversion/results.json new file mode 100644 index 0000000..a11eb4e --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/patch-conversion/results.json @@ -0,0 +1,64 @@ +{ + "passed": true, + "apiOrigin": "https://demo.51easyai.com", + "projectId": "6ac1e7336b4e2617cabdba76", + "nodeId": "model-conversion-deployment-acceptance", + "taskId": "6ac1e7466b4e2617cabdbb06", + "sourceHash": "f686ed16f4f90cc9b8ad9b5fc7d133d3768b1851620b107dd811fbd85a19f834", + "sourceBytes": 19203544, + "artifactHash": "889709b74d725388f3b225f7b158a0717d0c07fa0a8532fad8358cecf616f581", + "artifactBytes": 714896, + "originalDimensions": { + "width": 20, + "height": 0.20000000298023224, + "depth": 20 + }, + "actualDimensions": { + "width": 20, + "height": 0.19997775554656982, + "depth": 20 + }, + "loadingUnit": "meters", + "converterVersion": "assimp6.0.5-gltf4.3.0-meshopt0.25.0-ktx4.4.2-recipe2", + "statistics": { + "before": { + "triangles": 798848, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 19202712, + "textures": [], + "estimatedTextureGpuBytes": 0 + }, + "after": { + "triangles": 100000, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 1830360, + "textures": [], + "estimatedTextureGpuBytes": 0 + }, + "primary": { + "triangles": 100000, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 1830360, + "textures": [], + "estimatedTextureGpuBytes": 0 + } + }, + "uploadMs": 18502, + "conversionAndDownloadMs": 52444, + "elapsedMs": 71932 +} \ No newline at end of file diff --git a/system-update/releases/model-conversion-20261003/test/patch-deployment.json b/system-update/releases/model-conversion-20261003/test/patch-deployment.json new file mode 100644 index 0000000..d964c9d --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/patch-deployment.json @@ -0,0 +1,337 @@ +{ + "host": "8.218.158.189", + "domain": "demo.51easyai.com", + "deploymentPath": "/root/easyai", + "head": "2a1192eb7ec822773f55af96fa12e06bf96774a8", + "before": { + "head": "f04bb5e4fce8cf17430c2fc0ead77c1127f1d3b1", + "configHashes": { + "docker-compose.yml": "5841891777edbbcbf8aaeff1d3a9ab8288d3488cf1e62d309e62a44484cca801", + ".env": "f81f72ae94056ab0a0d5c685920406ad0cf52eafcd01f33a11ad5c78e43f7d29", + "/etc/nginx/conf.d/51easyai-proxy.conf": "3ee233b6e120892a9b1569ea21fe59081b1b5a917377e6eda435086613315c9f" + }, + "containers": [ + { + "name": "/easyai-web", + "id": "cb5f2943e428474adb4610e44fded3df4e79b0e8089c6aadd05024bc8917e40b", + "imageId": "sha256:4161c653ff66e92e0f24f0b175bb9b3a447f095c0e55b238f480a12ddce2821f", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai:latest", + "state": "running", + "startedAt": "2026-10-02T12:40:16.569346711Z", + "restarts": 0 + }, + { + "name": "/easyai-server", + "id": "b207b401ca01a3368340922d87678250481d1e95d3abb1c41831a97ae3fb029c", + "imageId": "sha256:72ec514ed221c424422542f7922f3962b03de969a65e3ffec058fa7cd70e1fea", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server:latest", + "state": "created", + "startedAt": "0001-01-01T00:00:00Z", + "restarts": 0 + }, + { + "name": "/easyai-updater", + "id": "012bea8f8d5a99a67f55b464b7b6f9c3b404cbbf8b3d10faf0c39b81aaa62f19", + "imageId": "sha256:275e9ff7fb453d16feabfb9b92e1cd603f49c434bf2daa80a9f5ad6f505bffcb", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/easyai-updater:latest", + "state": "running", + "startedAt": "2026-10-02T12:40:15.160868359Z", + "restarts": 0 + }, + { + "name": "/easyai-watchtower-1", + "id": "fa985a32d2b688d341ff92db280b9001685c425675703c083fbfa9503ff0144a", + "imageId": "sha256:04f6afca616ae63c48c860250212b7406ba917b712f4b2ebff5d43ef45578b87", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/watchtower-aliyun:latest", + "state": "running", + "startedAt": "2026-10-02T11:39:34.798099789Z", + "restarts": 0 + }, + { + "name": "/easyai-wsgateway", + "id": "96ea991bfc5931beaeafdefb6ae22ac95e7e5e35d85aa34ee2daecdad3fc9f0c", + "imageId": "sha256:821ed6a69be4771c57a7bf67084455a4c0c7e4c9e201b8e7bcb2dedf1fb229f5", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/wsgateway@sha256:a2b5fb67384c7f0eca7c7a768b5deacb4c0d2195dfbeb6e16ef40d6dc097bf25", + "state": "running", + "startedAt": "2026-10-02T11:36:12.54021925Z", + "restarts": 0 + }, + { + "name": "/agent-memory", + "id": "36cff7dfc04d41bff432ab25d4e28eb618a8e3eb77b22b06b73379bf762b75a9", + "imageId": "sha256:c660e243c9499f9a11a3875c8667692e44dd5fc5c96286f116569571bc41c84d", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/agent-memory:latest", + "state": "running", + "startedAt": "2026-09-24T08:31:06.096138261Z", + "restarts": 0 + }, + { + "name": "/easyai-asg", + "id": "8dd55099f03beeabe2eca98ea28f63f426282e781f8afbe56e4b3687a0d6dd66", + "imageId": "sha256:49f6f61c60a742c3332a7f2848a5dc135adc3eb094f5db11c0e5039afd281b09", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/agent-governance:latest", + "state": "running", + "startedAt": "2026-09-24T08:31:01.812221909Z", + "restarts": 0 + }, + { + "name": "/redis", + "id": "fba236d5fbeef5fe788f95a2dbc1356a6e9aff5e380725f507b94b298ded63f9", + "imageId": "sha256:d9f3c2aa7439bef41152d378fbd0f569f6c751db9b782fb63598cf23fd125c51", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/redis-aliyun:latest", + "state": "running", + "startedAt": "2026-09-10T02:24:31.671562504Z", + "restarts": 0 + }, + { + "name": "/easyai-easyai-web-init-1", + "id": "b0ef7b67e90fa287663c85b469fe701708761b64bbc20eca2ed92841ad57a488", + "imageId": "sha256:adec17f19c7e2e63268a5cede2aa76bdbaccc5430806bf509a844807b0f10dae", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai@sha256:aa84dab8c88d57481e195be1b0633d79d83e43669d169214edfac3779f5cc271", + "state": "exited", + "startedAt": "2026-07-30T07:25:35.56821945Z", + "restarts": 0 + }, + { + "name": "/rabbitmq", + "id": "dc02f6fb960a47e24e75e25f438c10552c2974e206ace60e91ad2e13c79fb351", + "imageId": "sha256:45d1c8fe2d7bef670b67b19768218e34d66ef09c880d177541f34dedc6363535", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/mq:latest", + "state": "running", + "startedAt": "2026-07-21T04:32:55.343273655Z", + "restarts": 0 + }, + { + "name": "/video-edit", + "id": "1f7353e599205647770c4b170d3dc363cb589d9bbbd7a0788e9b400d980e4126", + "imageId": "sha256:0864f11706bd1158ffd30a7c5c2b8e99673ba7d94df984d900add17e5a3004eb", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/videoedit:latest", + "state": "running", + "startedAt": "2026-07-21T04:32:55.732336992Z", + "restarts": 0 + }, + { + "name": "/easyai-pgvector", + "id": "c17b4bcfb926890bc13d4dbfeaf39ff30e4fa30bc904f21321392d9aa08c5724", + "imageId": "sha256:cdc8b3de66a0fbffceef90077fde8845a2346034ad8f309f4022a84039fed955", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/pgvector:0.8.2-pg18-trixie", + "state": "running", + "startedAt": "2026-07-21T04:32:56.784729621Z", + "restarts": 0 + }, + { + "name": "/mongo", + "id": "f5c560c65ea4c2203c69fd45e1c1093cbb9725bcf31c4b97eff205ef7a08690e", + "imageId": "sha256:fb4debd652389d87df781cd0da313bef78f90ed1dca45f3409b58364503e32d0", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/mongo-aliyun:latest", + "state": "running", + "startedAt": "2026-09-01T08:56:08.427872854Z", + "restarts": 1 + }, + { + "name": "/dozzle", + "id": "ca61f6101524051530ee5cf78d075d72f4dbe20e111336567d8c7d60b702c5a9", + "imageId": "sha256:14a70c19c34c366e364b992908d4f387e5d61cf1759d4c914bc4c69c2fa151a7", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/dozzle:latest", + "state": "running", + "startedAt": "2026-07-21T04:32:55.175233142Z", + "restarts": 0 + }, + { + "name": "/sandbox", + "id": "660f96b37109ccd13f62b3b58c7a7925d04acae24147d21aa694231c5105b287", + "imageId": "sha256:167b0fa1056c295f32d45b3a3c5e36691dbf0ba165419de7134721847596df98", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/sandbox:latest", + "state": "running", + "startedAt": "2026-07-21T04:32:57.369808773Z", + "restarts": 0 + } + ] + }, + "after": [ + { + "name": "/easyai-server", + "id": "174c6a6f1021427fef3a7ccbea13f4a8e88d00b944bc997168b0c5146e276deb", + "imageId": "sha256:34707434706bb4369e5c4c10ef02c4349e56b08e98a02db0a484c1c024c37606", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server:3.23.0.20261003.1", + "repoDigests": [ + "registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server@sha256:2b2d7e0cb8270d3540f3562e5debdb6a84a8cd2ae610c7c2f6a991cce1cc681c" + ], + "revision": "be56a7e0ec79d1a1e7420d870709014ed4bf010a", + "health": "healthy", + "restarts": 0, + "ports": { + "3001/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "3001" + } + ] + }, + "networks": { + "easyai_easyai": "172.21.0.6", + "easyai_sandbox-network": "172.20.0.2" + } + }, + { + "name": "/easyai-model-conversion-worker", + "id": "7f8bbdcddb05bafc9618e6fd23644b98a52fa48d9bc7ca8c47b9ef7dd4740903", + "imageId": "sha256:51738088956b41768a4c02dd89eeec746894d5c0becaa85875faa9f454caacf1", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/model-conversion-worker:3.23.0.20261003.1", + "repoDigests": [ + "registry.cn-shanghai.aliyuncs.com/easyaigc/model-conversion-worker@sha256:085fa49d99a06562ce9634bfdd8567efdfe4e38754e9688de81288d2e2578526" + ], + "revision": "83cefbfdf2bc909d11ace9f020b108145844051a", + "health": "healthy", + "restarts": 0, + "ports": {}, + "networks": { + "easyai_easyai": "172.21.0.7" + } + }, + { + "name": "/easyai-web", + "id": "d37dd74eebe36e1156567eb10501356003961a34cb285c3347b3c931c22225bc", + "imageId": "sha256:7518be1d633ff4316ac622523b7ea9f3d35ade61bcbec42ba7262200d181c805", + "image": "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai:3.23.0.20261003.1", + "repoDigests": [ + "registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai@sha256:bb1ff1dc77518ca01b770d03317fbddb0e2bf8eda6c27b70d6dbec0944d8e78e" + ], + "revision": "965c417288c5f09260c6e28254cde62af7683854", + "health": "healthy", + "restarts": 0, + "ports": { + "3010/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "3010" + } + ] + }, + "networks": { + "easyai_easyai": "172.21.0.8" + } + }, + { + "name": "/easyai-updater", + "id": "9fe7cc3b36405ec67909cfaf72abbae8b01abc51f9e38a8cab863f1dbe046cc8", + "imageId": "sha256:275e9ff7fb453d16feabfb9b92e1cd603f49c434bf2daa80a9f5ad6f505bffcb", + "image": "registry.cn-shanghai.aliyuncs.com/easyaigc/easyai-updater:latest", + "repoDigests": [ + "registry.cn-shanghai.aliyuncs.com/easyaigc/easyai-updater@sha256:bbaddb598618ceaaf6696f6c5fe19daf564d983039b70d36a4196cc4aaca385a" + ], + "revision": null, + "health": "healthy", + "restarts": 0, + "ports": {}, + "networks": { + "easyai_easyai": "172.21.0.31" + } + } + ], + "unrelatedContainers": [ + { + "name": "/easyai-watchtower-1", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-wsgateway", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/agent-memory", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-asg", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/redis", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-easyai-web-init-1", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/rabbitmq", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/video-edit", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-pgvector", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/mongo", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/dozzle", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/sandbox", + "sameId": true, + "sameStartedAt": true + } + ], + "settingsPreserved": { + "CONFIG_JWT_SECRET": true, + "WS_AUTH_WS_TICKET_SECRET": true, + "MONGO_INITDB_ROOT_USERNAME": true, + "MONGO_INITDB_ROOT_PASSWORD": true, + "SYSTEM_UPDATE_MODE": true, + "NUXT_PUBLIC_BASE_APIURL": true, + "CONFIG_COMFYUI_QUENE_REDIS_DB": true, + "WATCHTOWER_UPDATE_TARGET": true + }, + "nginxPreserved": true, + "sharedWorkerTokenMatched": true, + "health": { + "/home": { + "status": 200 + }, + "/api/app/version": { + "status": 200, + "body": { + "status": "success", + "data": { + "version": "3.23.0.20261003.1" + }, + "message": "success" + } + }, + "/api/health": { + "status": 200 + }, + "/api/health/update-ready": { + "status": 200 + } + }, + "trackedDiff": [], + "backupPath": "data/deployment-backups/legacy-update-20261003-075918-g3q8cib5", + "legacyOverridePath": "data/deployment-config/legacy-compose.json", + "workerLimits": { + "Memory": 4294967296, + "MemorySwap": 4294967296, + "NanoCpus": 2000000000, + "PidsLimit": 64, + "ReadonlyRootfs": true + } +} diff --git a/system-update/releases/model-conversion-20261003/test/patch-invariants.json b/system-update/releases/model-conversion-20261003/test/patch-invariants.json new file mode 100644 index 0000000..096af7e --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/patch-invariants.json @@ -0,0 +1,70 @@ +{ + "nonTargetContainers": [ + { + "name": "/easyai-updater", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-watchtower-1", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-wsgateway", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/agent-memory", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-asg", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/redis", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-easyai-web-init-1", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/rabbitmq", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/video-edit", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/easyai-pgvector", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/mongo", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/dozzle", + "sameId": true, + "sameStartedAt": true + }, + { + "name": "/sandbox", + "sameId": true, + "sameStartedAt": true + } + ], + "allPreserved": true +} diff --git a/system-update/releases/model-conversion-20261003/test/patch-runtime-samples.json b/system-update/releases/model-conversion-20261003/test/patch-runtime-samples.json new file mode 100644 index 0000000..2dd2187 --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/patch-runtime-samples.json @@ -0,0 +1,353 @@ +{ + "scope": "availability samples during conversion, not a controlled saturation benchmark", + "samples": [ + { + "at": 1791092583.8174427, + "apiStatus": 200, + "apiMs": 5.121792666614056, + "stats": [ + { + "BlockIO": "518MB / 23.1MB", + "CPUPerc": "3.68%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.72%", + "MemUsage": "419.2MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "83.9MB / 41.9MB", + "PIDs": "22" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "1.81%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.17%", + "MemUsage": "113.2MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "18.6MB / 632kB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092585.826095, + "apiStatus": 200, + "apiMs": 2.1822648122906685, + "stats": [ + { + "BlockIO": "518MB / 23.1MB", + "CPUPerc": "2.32%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.35%", + "MemUsage": "405.9MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "84MB / 42MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "106.69%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "6.90%", + "MemUsage": "246.6MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "19.9MB / 658kB", + "PIDs": "23" + } + ] + }, + { + "at": 1791092587.8342638, + "apiStatus": 200, + "apiMs": 6.174998357892036, + "stats": [ + { + "BlockIO": "518MB / 23.1MB", + "CPUPerc": "3.93%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.14%", + "MemUsage": "398.5MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "84.9MB / 42MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "47.24%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.38%", + "MemUsage": "120.9MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.38MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092589.841363, + "apiStatus": 200, + "apiMs": 2.193288877606392, + "stats": [ + { + "BlockIO": "518MB / 23.1MB", + "CPUPerc": "1.85%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.15%", + "MemUsage": "398.8MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "85MB / 42.8MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.19%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.38%", + "MemUsage": "120.9MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092591.8488362, + "apiStatus": 200, + "apiMs": 2.141437493264675, + "stats": [ + { + "BlockIO": "524MB / 23.1MB", + "CPUPerc": "7.53%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.47%", + "MemUsage": "410.2MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "85.9MB / 42.8MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.05%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.38%", + "MemUsage": "120.9MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092593.855171, + "apiStatus": 200, + "apiMs": 2.094441093504429, + "stats": [ + { + "BlockIO": "524MB / 23.1MB", + "CPUPerc": "1.96%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.47%", + "MemUsage": "410.3MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "86.7MB / 42.9MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.01%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.38%", + "MemUsage": "120.9MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092595.868484, + "apiStatus": 200, + "apiMs": 2.0058071240782738, + "stats": [ + { + "BlockIO": "524MB / 23.1MB", + "CPUPerc": "2.22%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.52%", + "MemUsage": "412.1MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "87.1MB / 43MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.00%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.38%", + "MemUsage": "120.9MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092597.8755522, + "apiStatus": 200, + "apiMs": 2.7287527918815613, + "stats": [ + { + "BlockIO": "524MB / 23.1MB", + "CPUPerc": "1.06%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.52%", + "MemUsage": "412.1MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "87.1MB / 43MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.06%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.45%", + "MemUsage": "123.5MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092599.8827128, + "apiStatus": 200, + "apiMs": 2.218537963926792, + "stats": [ + { + "BlockIO": "524MB / 23.1MB", + "CPUPerc": "0.79%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.52%", + "MemUsage": "412MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "87.1MB / 43MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.33%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.45%", + "MemUsage": "123.5MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092601.8916264, + "apiStatus": 200, + "apiMs": 2.156815491616726, + "stats": [ + { + "BlockIO": "524MB / 23.1MB", + "CPUPerc": "0.48%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.52%", + "MemUsage": "412.1MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "87.1MB / 43MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.00%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.45%", + "MemUsage": "123.5MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092603.8980048, + "apiStatus": 200, + "apiMs": 2.1360013633966446, + "stats": [ + { + "BlockIO": "524MB / 23.1MB", + "CPUPerc": "0.58%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.52%", + "MemUsage": "412.1MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "87.1MB / 43MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.01%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.45%", + "MemUsage": "123.5MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + }, + { + "at": 1791092605.9056575, + "apiStatus": 200, + "apiMs": 2.106785774230957, + "stats": [ + { + "BlockIO": "524MB / 23.1MB", + "CPUPerc": "2.49%", + "Container": "easyai-server", + "ID": "174c6a6f1021", + "MemPerc": "11.52%", + "MemUsage": "412.1MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "87.2MB / 43MB", + "PIDs": "22" + }, + { + "BlockIO": "228MB / 0B", + "CPUPerc": "0.00%", + "Container": "easyai-model-conversion-worker", + "ID": "7f8bbdcddb05", + "MemPerc": "3.45%", + "MemUsage": "123.5MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "20MB / 1.39MB", + "PIDs": "12" + } + ] + } + ] +} diff --git a/system-update/releases/model-conversion-20261003/test/patch-worker-access.json b/system-update/releases/model-conversion-20261003/test/patch-worker-access.json new file mode 100644 index 0000000..3261fb5 --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/patch-worker-access.json @@ -0,0 +1,15 @@ +{ + "passed": true, + "apiVersion": "3.23.0.20261003.1", + "results": [ + { + "normalUserToken": false, + "status": 403 + }, + { + "normalUserToken": true, + "status": 403 + } + ], + "paidChannelDisabled": true +} diff --git a/system-update/releases/model-conversion-20261003/test/runtime-samples.json b/system-update/releases/model-conversion-20261003/test/runtime-samples.json new file mode 100644 index 0000000..847f592 --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/runtime-samples.json @@ -0,0 +1,353 @@ +{ + "scope": "availability samples during conversion, not a controlled saturation benchmark", + "samples": [ + { + "at": 1790985749.6740324, + "apiStatus": 200, + "apiMs": 9.280657395720482, + "stats": [ + { + "BlockIO": "947MB / 16.4kB", + "CPUPerc": "1.35%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.88%", + "MemUsage": "460.6MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "28.6MB / 4.45MB", + "PIDs": "23" + }, + { + "BlockIO": "198MB / 0B", + "CPUPerc": "0.00%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.40%", + "MemUsage": "85.68MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "41.8kB / 34kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985751.6805701, + "apiStatus": 200, + "apiMs": 2.5081941857934, + "stats": [ + { + "BlockIO": "947MB / 16.4kB", + "CPUPerc": "1.11%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.88%", + "MemUsage": "460.7MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "28.6MB / 4.47MB", + "PIDs": "23" + }, + { + "BlockIO": "198MB / 0B", + "CPUPerc": "0.36%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.39%", + "MemUsage": "85.44MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "43kB / 35.5kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985753.689231, + "apiStatus": 200, + "apiMs": 2.5477129966020584, + "stats": [ + { + "BlockIO": "947MB / 16.4kB", + "CPUPerc": "0.64%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.84%", + "MemUsage": "459.3MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "28.6MB / 4.47MB", + "PIDs": "23" + }, + { + "BlockIO": "198MB / 0B", + "CPUPerc": "0.01%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.37%", + "MemUsage": "84.81MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "43kB / 35.5kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985755.6954496, + "apiStatus": 200, + "apiMs": 2.4261539801955223, + "stats": [ + { + "BlockIO": "948MB / 16.4kB", + "CPUPerc": "63.81%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.96%", + "MemUsage": "463.6MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "47.9MB / 22.9MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "16.52%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.74%", + "MemUsage": "98.05MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "1.29MB / 48.3kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985757.7105772, + "apiStatus": 200, + "apiMs": 2.4948744103312492, + "stats": [ + { + "BlockIO": "948MB / 16.4kB", + "CPUPerc": "3.27%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.91%", + "MemUsage": "461.8MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "47.9MB / 23.9MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "4.51%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.80%", + "MemUsage": "100MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "2.8MB / 71.3kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985759.7175877, + "apiStatus": 200, + "apiMs": 2.541431225836277, + "stats": [ + { + "BlockIO": "948MB / 13.7MB", + "CPUPerc": "2.51%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.89%", + "MemUsage": "461MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "48MB / 24MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "4.63%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.83%", + "MemUsage": "101.1MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "4.15MB / 96.6kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985761.7252448, + "apiStatus": 200, + "apiMs": 2.9892660677433014, + "stats": [ + { + "BlockIO": "948MB / 19.2MB", + "CPUPerc": "2.02%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.89%", + "MemUsage": "461.1MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "48MB / 24MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "2.86%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.86%", + "MemUsage": "102.3MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "5.49MB / 122kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985763.7413735, + "apiStatus": 200, + "apiMs": 3.0968794599175453, + "stats": [ + { + "BlockIO": "948MB / 19.2MB", + "CPUPerc": "3.07%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.90%", + "MemUsage": "461.2MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "48.1MB / 24MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "4.77%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.91%", + "MemUsage": "104.1MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "7.05MB / 154kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985765.749202, + "apiStatus": 200, + "apiMs": 2.129429019987583, + "stats": [ + { + "BlockIO": "948MB / 19.2MB", + "CPUPerc": "2.94%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.93%", + "MemUsage": "462.5MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "48.2MB / 24.1MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "3.13%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.94%", + "MemUsage": "105.3MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "8.34MB / 188kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985767.7581704, + "apiStatus": 200, + "apiMs": 2.7658026665449142, + "stats": [ + { + "BlockIO": "948MB / 19.2MB", + "CPUPerc": "2.57%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.98%", + "MemUsage": "464.4MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "48.2MB / 24.1MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "2.61%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "2.98%", + "MemUsage": "106.7MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "9.83MB / 222kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985769.769254, + "apiStatus": 200, + "apiMs": 2.3818742483854294, + "stats": [ + { + "BlockIO": "948MB / 19.2MB", + "CPUPerc": "5.82%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.99%", + "MemUsage": "464.6MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "48.3MB / 24.1MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "2.60%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "3.02%", + "MemUsage": "108MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "11.2MB / 248kB", + "PIDs": "12" + } + ] + }, + { + "at": 1790985771.7755136, + "apiStatus": 200, + "apiMs": 1.9480856135487556, + "stats": [ + { + "BlockIO": "948MB / 19.2MB", + "CPUPerc": "3.21%", + "Container": "easyai-server", + "ID": "c1d517b4a096", + "MemPerc": "12.99%", + "MemUsage": "464.5MiB / 3.493GiB", + "Name": "easyai-server", + "NetIO": "48.4MB / 24.2MB", + "PIDs": "23" + }, + { + "BlockIO": "207MB / 0B", + "CPUPerc": "3.36%", + "Container": "easyai-model-conversion-worker", + "ID": "9637b09caee9", + "MemPerc": "3.06%", + "MemUsage": "109.3MiB / 3.493GiB", + "Name": "easyai-model-conversion-worker", + "NetIO": "12.6MB / 277kB", + "PIDs": "12" + } + ] + } + ] +} diff --git a/system-update/releases/model-conversion-20261003/test/skin-animation/results.json b/system-update/releases/model-conversion-20261003/test/skin-animation/results.json new file mode 100644 index 0000000..9b327f2 --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/skin-animation/results.json @@ -0,0 +1,64 @@ +{ + "passed": true, + "apiOrigin": "https://demo.51easyai.com", + "projectId": "6ac046603db0eda177a98d3a", + "nodeId": "model-conversion-deployment-acceptance", + "taskId": "6ac046613db0eda177a98d63", + "sourceHash": "a4725791b49a2be4cc6ca0a9cab0ad919d53d8364e181d4dabf099e80bcd83d1", + "sourceBytes": 1201812, + "artifactHash": "5ab980e9d3555ff4a51756ae8a9b71f5dc8b502d06fa2c726a11cc66cf93f60b", + "artifactBytes": 203652, + "originalDimensions": { + "width": 2, + "height": 2, + "depth": 0 + }, + "actualDimensions": { + "width": 2, + "height": 2, + "depth": 0 + }, + "loadingUnit": "meters", + "converterVersion": "assimp6.0.5-gltf4.3.0-meshopt0.25.0-ktx4.4.2-recipe2", + "statistics": { + "before": { + "triangles": 100001, + "meshes": 1, + "primitives": 1, + "nodes": 3, + "skins": 1, + "animations": 1, + "morphPrimitives": 0, + "geometryBytes": 1200380, + "textures": [], + "estimatedTextureGpuBytes": 0 + }, + "after": { + "triangles": 100001, + "meshes": 1, + "primitives": 1, + "nodes": 3, + "skins": 1, + "animations": 1, + "morphPrimitives": 0, + "geometryBytes": 1200380, + "textures": [], + "estimatedTextureGpuBytes": 0 + }, + "primary": { + "triangles": 100001, + "meshes": 1, + "primitives": 1, + "nodes": 3, + "skins": 1, + "animations": 1, + "morphPrimitives": 0, + "geometryBytes": 1200380, + "textures": [], + "estimatedTextureGpuBytes": 0 + } + }, + "uploadMs": 1007, + "conversionAndDownloadMs": 8241, + "elapsedMs": 10060 +} \ No newline at end of file diff --git a/system-update/releases/model-conversion-20261003/test/texture-4096/results.json b/system-update/releases/model-conversion-20261003/test/texture-4096/results.json new file mode 100644 index 0000000..3d314df --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/texture-4096/results.json @@ -0,0 +1,91 @@ +{ + "passed": true, + "apiOrigin": "https://demo.51easyai.com", + "projectId": "6ac0465b3db0eda177a98cbe", + "nodeId": "model-conversion-deployment-acceptance", + "taskId": "6ac0465c3db0eda177a98ce1", + "sourceHash": "eb2acf6548e5d9e56bb1d2a8c239d24322cb07d9e813b31ebdac3067b6b9ea5c", + "sourceBytes": 354300, + "artifactHash": "f23ff7bc9df4ffecf00a9b72dffaf6daa9066534374d8cb752a9b13f9b03ca05", + "artifactBytes": 29320, + "originalDimensions": { + "width": 2, + "height": 2, + "depth": 0 + }, + "actualDimensions": { + "width": 2, + "height": 2, + "depth": 0 + }, + "loadingUnit": "meters", + "converterVersion": "assimp6.0.5-gltf4.3.0-meshopt0.25.0-ktx4.4.2-recipe2", + "statistics": { + "before": { + "triangles": 2, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 192, + "textures": [ + { + "mimeType": "image/png", + "dimensions": [ + 4096, + 4096 + ], + "bytes": 353126 + } + ], + "estimatedTextureGpuBytes": 89478485.33333333 + }, + "after": { + "triangles": 2, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 192, + "textures": [ + { + "mimeType": "image/png", + "dimensions": [ + 1024, + 1024 + ], + "bytes": 27330 + } + ], + "estimatedTextureGpuBytes": 5592405.333333333 + }, + "primary": { + "triangles": 2, + "meshes": 1, + "primitives": 1, + "nodes": 2, + "skins": 0, + "animations": 0, + "morphPrimitives": 0, + "geometryBytes": 192, + "textures": [ + { + "mimeType": "image/ktx2", + "dimensions": [ + 1024, + 1024 + ], + "bytes": 2643 + } + ], + "estimatedTextureGpuBytes": 5592405.333333333 + } + }, + "uploadMs": 868, + "conversionAndDownloadMs": 3373, + "elapsedMs": 5057 +} \ No newline at end of file diff --git a/system-update/releases/model-conversion-20261003/test/worker-access.json b/system-update/releases/model-conversion-20261003/test/worker-access.json new file mode 100644 index 0000000..a2eb22f --- /dev/null +++ b/system-update/releases/model-conversion-20261003/test/worker-access.json @@ -0,0 +1,13 @@ +{ + "passed": true, + "results": [ + { + "normalUserToken": false, + "status": 403 + }, + { + "normalUserToken": true, + "status": 403 + } + ] +} \ No newline at end of file