From af539927139d63da439dfde23bab467e69ae92a8 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Tue, 16 Dec 2025 16:35:19 +0800 Subject: [PATCH] =?UTF-8?q?1.33=20=E6=97=A5=E5=BF=97=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../websocket/log/ILogStreamStrategy.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/framework/websocket/log/ILogStreamStrategy.java diff --git a/backend/src/main/java/com/qqchen/deploy/backend/framework/websocket/log/ILogStreamStrategy.java b/backend/src/main/java/com/qqchen/deploy/backend/framework/websocket/log/ILogStreamStrategy.java new file mode 100644 index 00000000..0ffd6598 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/framework/websocket/log/ILogStreamStrategy.java @@ -0,0 +1,60 @@ +package com.qqchen.deploy.backend.framework.websocket.log; + +import com.qqchen.deploy.backend.deploy.enums.RuntimeTypeEnum; +import org.springframework.web.socket.WebSocketSession; + +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * 日志流策略接口 + * 定义不同运行时类型的日志流获取方式 + * + * @author Framework + * @since 2025-12-16 + */ +public interface ILogStreamStrategy { + + /** + * 支持的运行时类型 + * + * @return 运行时类型 + */ + RuntimeTypeEnum supportedType(); + + /** + * 执行日志流推送 + * 此方法应该持续读取日志并通过callback推送到前端 + * + * @param session WebSocket会话 + * @param target 日志流目标信息 + * @param paused 暂停标志(实现应定期检查此标志) + * @param callback 日志行回调接口 + * @throws Exception 流式推送失败时抛出 + */ + void streamLogs(WebSocketSession session, + LogStreamTarget target, + AtomicBoolean paused, + LogLineCallback callback) throws Exception; + + /** + * 停止日志流并清理资源 + * 当WebSocket连接关闭时调用,确保SSH连接等资源被正确释放 + * + * @param sessionId WebSocket会话ID + */ + void stop(String sessionId); + + /** + * 日志行回调接口 + */ + @FunctionalInterface + interface LogLineCallback { + /** + * 发送日志行 + * + * @param timestamp 时间戳 + * @param content 日志内容 + */ + void sendLogLine(String timestamp, String content); + } +}