feat: add ops center and node onboarding flow

This commit is contained in:
Your Name
2026-04-18 23:52:51 +08:00
parent 246838ae4c
commit b9c29481b5
142 changed files with 89727 additions and 186 deletions

View File

@@ -0,0 +1,93 @@
import json
import unittest
from datetime import datetime
from app.services.ops_release_service import _serialize_release_row, _serialize_rollout_row
class OpsReleaseServiceContractTests(unittest.TestCase):
def test_serialize_release_row_adds_contract_aliases(self) -> None:
row = (
9,
"2026.04.18+bd6bcb2",
"stable",
"bd6bcb2",
"ready",
"https://example.com/domaincheck.tar.gz",
"sha256:test",
"release notes",
json.dumps(
{
"source": "package",
"manifest": {
"artifact_kind": "tarball",
"package_name": "domaincheck-2026.04.18+bd6bcb2.tgz",
"included_services": ["domaincheck-api", "domaincheck-worker"],
"rollback_hint": "切回上一个 current",
},
}
),
"www",
datetime(2026, 4, 18, 9, 0, 0),
datetime(2026, 4, 18, 9, 5, 0),
datetime(2026, 4, 18, 9, 6, 0),
)
payload = _serialize_release_row(row)
self.assertEqual("已就绪", payload["status_label"])
self.assertIn("已就绪", payload["summary_text"])
self.assertEqual("release_hub", payload["focus_ref"]["kind"])
self.assertEqual(9, payload["focus_ref"]["release_id"])
self.assertEqual("release_detail", payload["focus_ref"]["section"])
self.assertEqual("tarball", payload["manifest"]["artifact_kind"])
self.assertEqual("domaincheck-2026.04.18+bd6bcb2.tgz", payload["manifest"]["package_name"])
self.assertEqual(["domaincheck-api", "domaincheck-worker"], payload["manifest"]["included_services"])
def test_serialize_rollout_row_adds_contract_aliases(self) -> None:
row = (
11,
9,
"rollout-20260418090000-a1b2",
json.dumps({"region": "mainland", "role": "worker"}),
json.dumps(
{
"items": [
{"node_code": "mainland-worker-01", "region": "mainland", "role": "worker"},
{"node_code": "mainland-worker-02", "region": "mainland", "role": "worker"},
]
}
),
json.dumps({"execution_mode": "ssh", "batch_size": 1}),
"running",
1,
2,
2,
1,
json.dumps(
{
"status": "running",
"launched_targets": 1,
"remaining_targets": 1,
"active_jobs": 1,
"current_batch_index": 1,
"batches_total": 2,
}
),
"web-ui",
datetime(2026, 4, 18, 9, 10, 0),
datetime(2026, 4, 18, 9, 11, 0),
)
payload = _serialize_rollout_row(row)
self.assertEqual("执行中", payload["status_label"])
self.assertEqual(["mainland-worker-01", "mainland-worker-02"], payload["target_node_codes"])
self.assertIn("当前已覆盖 1/2 台节点", payload["summary_text"])
self.assertEqual("release_rollout", payload["focus_ref"]["kind"])
self.assertEqual(11, payload["focus_ref"]["rollout_id"])
self.assertEqual("rollout_jobs", payload["focus_ref"]["section"])
if __name__ == "__main__":
unittest.main()