diff --git a/orion-visor-ui/src/api/exec/exec-log.ts b/orion-visor-ui/src/api/exec/exec-log.ts index bd15063b..b7aaf332 100644 --- a/orion-visor-ui/src/api/exec/exec-log.ts +++ b/orion-visor-ui/src/api/exec/exec-log.ts @@ -32,7 +32,6 @@ export interface ExecLogQueryResponse extends TableData, ExecLogQueryExtraRespon startTime: number; finishTime: number; hostIdList: Array; - hosts: Array; } /** diff --git a/orion-visor-ui/src/components/exec/log/panel/log-appender.ts b/orion-visor-ui/src/components/exec/log/panel/log-appender.ts index c753943d..85ca5644 100644 --- a/orion-visor-ui/src/components/exec/log/panel/log-appender.ts +++ b/orion-visor-ui/src/components/exec/log/panel/log-appender.ts @@ -13,7 +13,7 @@ import { Terminal } from '@xterm/xterm'; import { FitAddon } from '@xterm/addon-fit'; import { SearchAddon } from '@xterm/addon-search'; import { WebLinksAddon } from '@xterm/addon-web-links'; -import { WebglAddon } from '@xterm/addon-webgl'; +import { CanvasAddon } from '@xterm/addon-canvas'; import { Unicode11Addon } from '@xterm/addon-unicode11'; // 执行日志 appender 实现 @@ -129,20 +129,20 @@ export default class LogAppender implements ILogAppender { // 初始化插件 initAddons(terminal: Terminal): XtermAddons { const fit = new FitAddon(); + const canvas = new CanvasAddon(); const search = new SearchAddon(); - const webgl = new WebglAddon(); const weblink = new WebLinksAddon(); const unicode = new Unicode11Addon(); terminal.loadAddon(fit); + terminal.loadAddon(canvas); terminal.loadAddon(search); - terminal.loadAddon(webgl); terminal.loadAddon(weblink); terminal.loadAddon(unicode); terminal.unicode.activeVersion = '11'; return { fit, + canvas, search, - webgl, weblink, unicode } as XtermAddons; @@ -177,7 +177,7 @@ export default class LogAppender implements ILogAppender { if (this.client?.readyState === WebSocket.OPEN) { this.client?.send('p'); } - }, 15000); + }, 15000) as unknown as number; } // 设置当前元素 diff --git a/orion-visor-ui/src/views/host/terminal/handler/ssh-session.ts b/orion-visor-ui/src/views/host/terminal/handler/ssh-session.ts index a0638480..88917381 100644 --- a/orion-visor-ui/src/views/host/terminal/handler/ssh-session.ts +++ b/orion-visor-ui/src/views/host/terminal/handler/ssh-session.ts @@ -33,10 +33,14 @@ export default class SshSession extends BaseSession implements ISshSession { private readonly addons: XtermAddons; + private readonly canUseWebgl: boolean; + constructor(tab: TerminalPanelTabItem, - channel: ITerminalChannel) { + channel: ITerminalChannel, + canUseWebgl: boolean) { super(PanelSessionType.SSH.type, tab); this.channel = channel; + this.canUseWebgl = canUseWebgl; this.status = TerminalStatus.CONNECTING; this.inst = undefined as unknown as Terminal; this.handler = undefined as unknown as ISshSessionHandler; @@ -173,7 +177,7 @@ export default class SshSession extends BaseSession implements ISshSession { if (preference.pluginsSetting.enableWeblinkPlugin) { this.addons.weblink = new WebLinksAddon(); } - if (preference.pluginsSetting.enableWebglPlugin) { + if (preference.pluginsSetting.enableWebglPlugin && this.canUseWebgl) { // WebGL 渲染插件 this.addons.webgl = new WebglAddon(true); } else { diff --git a/orion-visor-ui/src/views/host/terminal/handler/terminal-session-manager.ts b/orion-visor-ui/src/views/host/terminal/handler/terminal-session-manager.ts index 274ab071..1dd519d0 100644 --- a/orion-visor-ui/src/views/host/terminal/handler/terminal-session-manager.ts +++ b/orion-visor-ui/src/views/host/terminal/handler/terminal-session-manager.ts @@ -37,8 +37,14 @@ export default class TerminalSessionManager implements ITerminalSessionManager { async openSsh(tab: TerminalPanelTabItem, domRef: XtermDomRef) { // 初始化客户端 await this.initChannel(); + // 获取会话数量 + const sshSessionLen = Object.values(this.sessions) + .filter(s => s?.type === PanelSessionType.SSH.type) + .length; + // 检查 webgl 数量 + const canUseWebgl = (sshSessionLen || 0) <= (navigator.hardwareConcurrency || 0) / 2; // 新建会话 - const session = new SshSession(tab, this.channel); + const session = new SshSession(tab, this.channel, canUseWebgl); // 初始化 session.init(domRef); // 等待前端渲染完成