8755553f7d
Storage Persistence Guard / storage-persistence-audit (push) Has been cancelled
Client Quality Gates / Shared client and Web (pull_request) Has been cancelled
Client Quality Gates / macOS Desktop (pull_request) Has been cancelled
Storage Persistence Guard / storage-persistence-audit (pull_request) Has been cancelled
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
"""Abort a deployment when ONLYOFFICE still has live collaborative editors."""
|
||
|
||
import asyncio
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
|
||
PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
||
sys.path.insert(0, str(PROJECT_ROOT))
|
||
|
||
from fastapi import HTTPException # noqa: E402
|
||
|
||
from app.core.config import settings # noqa: E402
|
||
from app.db.session import SessionLocal # noqa: E402
|
||
from app.services.onlyoffice_collaboration_service import list_live_editing_sessions # noqa: E402
|
||
|
||
|
||
async def async_main() -> int:
|
||
if not settings.ONLYOFFICE_ENABLED:
|
||
print("ONLYOFFICE 未启用,跳过在线编辑会话检查")
|
||
return 0
|
||
try:
|
||
async with SessionLocal() as db:
|
||
active = await list_live_editing_sessions(db)
|
||
except HTTPException as exc:
|
||
print(f"无法确认 ONLYOFFICE 在线编辑状态:{exc.detail}", file=sys.stderr)
|
||
return 1
|
||
|
||
if not active:
|
||
print("未检测到 ONLYOFFICE 在线编辑者")
|
||
return 0
|
||
print("检测到仍在进行的 ONLYOFFICE 在线编辑,会中止本次部署:", file=sys.stderr)
|
||
for title, count in active:
|
||
print(f"- {title}:{count} 人在线", file=sys.stderr)
|
||
print("请通知用户退出编辑器,等待最终保存完成后重新执行部署。", file=sys.stderr)
|
||
return 2
|
||
|
||
|
||
def main() -> None:
|
||
raise SystemExit(asyncio.run(async_main()))
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|