diff --git a/web-ui/arthasWebConsole/.env.tunnel b/web-ui/arthasWebConsole/.env.tunnel new file mode 100644 index 000000000..5aaf1f490 --- /dev/null +++ b/web-ui/arthasWebConsole/.env.tunnel @@ -0,0 +1,2 @@ +# NODE_ENV=production +VITE_AGENT=true \ No newline at end of file diff --git a/web-ui/arthasWebConsole/.env.ui b/web-ui/arthasWebConsole/.env.ui new file mode 100644 index 000000000..04da6f0fd --- /dev/null +++ b/web-ui/arthasWebConsole/.env.ui @@ -0,0 +1,2 @@ +# NODE_ENV=production +VITE_AGENT=false \ No newline at end of file diff --git a/web-ui/arthasWebConsole/package.json b/web-ui/arthasWebConsole/package.json index 1b8e5e03d..f8032dde4 100644 --- a/web-ui/arthasWebConsole/package.json +++ b/web-ui/arthasWebConsole/package.json @@ -3,8 +3,10 @@ "private": false, "version": "0.1.4", "scripts": { - "dev": "vite --port 8000", - "build": "vue-tsc --noEmit && vite build", + "dev": "vite --port 8000 --mode ui", + "dev:tunnel": "vite --port 8000 --mode tunnel", + "build": "vue-tsc --noEmit && vite build --mode ui", + "build:tunnel": "vue-tsc --noEmit && vite build --mode tunnel", "preview": "vite preview" }, "dependencies": { @@ -31,6 +33,6 @@ "tailwindcss": "^3.1.4", "typescript": "^4.7.4", "vite": "^2.9.9", - "vue-tsc": "^0.34.7" + "vue-tsc": "1.0.8" } } diff --git a/web-ui/arthasWebConsole/src/App.vue b/web-ui/arthasWebConsole/src/App.vue index a2d4481d5..0e6ed4adf 100644 --- a/web-ui/arthasWebConsole/src/App.vue +++ b/web-ui/arthasWebConsole/src/App.vue @@ -2,7 +2,7 @@ import { onMounted, ref } from "vue"; import { Terminal } from "xterm" import { FitAddon } from 'xterm-addon-fit'; -import {WebglAddon} from "xterm-addon-webgl" +import { WebglAddon } from "xterm-addon-webgl" let ws: WebSocket | undefined; @@ -14,9 +14,11 @@ const ip = ref("") const port = ref('') const iframe = ref(true) const fullSc = ref(true) +const agentID = ref('') +const isTunnel = import.meta.env.VITE_AGENT === 'true' const fitAddon = new FitAddon(); const webglAddon = new WebglAddon(); -let xterm = new Terminal({allowProposedApi: true}) +let xterm = new Terminal({ allowProposedApi: true }) onMounted(() => { ip.value = getUrlParam('ip') ?? window.location.hostname; @@ -27,7 +29,7 @@ onMounted(() => { startConnect(true); window.addEventListener('resize', function () { if (ws !== undefined && ws !== null) { - const {cols, rows} = fitAddon.proposeDimensions()! + const { cols, rows } = fitAddon.proposeDimensions()! ws.send(JSON.stringify({ action: 'resize', cols, rows: rows })); fitAddon.fit(); } @@ -56,7 +58,7 @@ function initWs(silent: boolean) { let scrollback = getUrlParam('scrollback') ?? '0'; - const {cols, rows} = initXterm(scrollback) + const { cols, rows } = initXterm(scrollback) xterm.onData(function (data) { ws?.send(JSON.stringify({ action: 'read', data: data })) }); @@ -85,7 +87,7 @@ function initXterm(scrollback: string) { scrollback: isValidNumber(scrollNumber) ? scrollNumber : DEFAULT_SCROLL_BACK }); xterm.loadAddon(fitAddon) - + xterm.open(document.getElementById('terminal')!); xterm.loadAddon(webglAddon) @@ -136,8 +138,8 @@ function disconnect() { function xtermFullScreen() { var ele = document.getElementById('terminal-card')!; requestFullScreen(ele); - ele.onfullscreenchange = (e:Event)=>{ - fitAddon.fit() + ele.onfullscreenchange = (e: Event) => { + fitAddon.fit() } } @@ -162,8 +164,8 @@ function requestFullScreen(element: HTMLElement) {