新增 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 重连机制
51 lines
1.4 KiB
Python
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)
|