ForcePilot/backend/package/yuxi/channels/services/ws_logger.py
Kris 7a972055b7 feat: 新增渠道服务基础框架与核心工具类
新增大量渠道适配器相关的协议、策略、工具类与基础设施代码,包括:
1.  多协议定义:认证、消息、配置、网关等核心接口
2.  策略模块:上下文、群聊、去重、防抖等业务策略
3.  工具集:重试、去重、文本分块、消息格式化等SDK工具
4.  基础设施:外部进程管理、事件广播、熔断机制等
5.  账户与管道系统:账户管理、消息处理管道实现
6.  运行时服务:状态收集、维护任务、日志等后台服务
2026-05-12 00:53:57 +08:00

53 lines
1.3 KiB
Python

from __future__ import annotations
import time
from collections import deque
from dataclasses import dataclass, field
@dataclass
class WsLogEntry:
conn_id: str
session_id: str
channel_id: str | None = None
account_id: str | None = None
address: str = ""
timestamp: float = field(default_factory=time.time)
action: str = ""
details: dict = field(default_factory=dict)
class WsLogger:
def __init__(self, max_entries: int = 1000):
self.entries: deque[WsLogEntry] = deque(maxlen=max_entries)
def log(
self,
*,
conn_id: str = "",
session_id: str = "",
channel_id: str | None = None,
account_id: str | None = None,
address: str = "",
action: str = "",
details: dict | None = None,
) -> None:
self.entries.append(
WsLogEntry(
conn_id=conn_id,
session_id=session_id,
channel_id=channel_id,
account_id=account_id,
address=address,
action=action,
details=details or {},
)
)
def recent(self, n: int = 100) -> list[WsLogEntry]:
entries = list(self.entries)
return entries[-n:]
def clear(self) -> None:
self.entries.clear()