ForcePilot/backend/package/yuxi/channel/extensions/signal/probe.py
Kris 6713dc2d0d feat(channel): 添加 Signal 渠道扩展
新增 Signal 渠道扩展,支持在 Yuxi 平台中集成 Signal 加密即时通讯渠道。

包含以下功能模块:
- client: Signal 客户端封装
- daemon: signald 守护进程管理
- config_schema: 配置模式
- send: 消息发送
- accounts: 账户管理
- account_management: 账户综合管理
- access_policy: 访问策略
- identity: 身份管理
- profiles: 用户资料
- groups: 群组管理
- format: 消息格式转换
- normalize: 消息规范化
- dedupe: 消息去重
- monitor: 渠道状态监控
- probe: 健康探测
- sse_reconnect: SSE 重连机制
2026-05-21 11:41:55 +08:00

51 lines
1.4 KiB
Python

import logging
import time
from dataclasses import dataclass
from yuxi.channel.extensions.signal.client import SignalRpcClient
logger = logging.getLogger(__name__)
@dataclass
class SignalProbeResult:
ok: bool
status: str
error: str | None = None
elapsed_ms: int = 0
version: str | None = None
async def probe_signal(base_url: str, timeout_ms: float = 7500) -> SignalProbeResult:
t0 = time.monotonic()
client = SignalRpcClient(base_url, timeout=timeout_ms / 1000)
try:
check_ok = await client.check(timeout_ms=1000)
except Exception as e:
elapsed = int((time.monotonic() - t0) * 1000)
return SignalProbeResult(ok=False, status="error", error=str(e), elapsed_ms=elapsed)
if not check_ok:
elapsed = int((time.monotonic() - t0) * 1000)
return SignalProbeResult(
ok=False,
status="unreachable",
error="Daemon check failed",
elapsed_ms=elapsed,
)
try:
version = await client.version()
except Exception as e:
elapsed = int((time.monotonic() - t0) * 1000)
return SignalProbeResult(
ok=True,
status="ok",
error=f"Version query failed: {e}",
elapsed_ms=elapsed,
)
elapsed = int((time.monotonic() - t0) * 1000)
return SignalProbeResult(ok=True, status="ok", elapsed_ms=elapsed, version=version)