simplify
This commit is contained in:
parent
6701c31a3a
commit
0ba73b6dac
|
|
@ -57,11 +57,11 @@ function retryConnection() {
|
||||||
connected = false
|
connected = false
|
||||||
|
|
||||||
if (retries >= MAX_RETRIES) {
|
if (retries >= MAX_RETRIES) {
|
||||||
addErrorMessage(`!! Failed to reconnect ${retries} times. Server is down.`)
|
addErrorMessage(`Failed to reconnect ${retries} times. Server is down.`)
|
||||||
if (ws) ws.onclose = () => { }
|
if (ws) ws.onclose = () => { }
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
retries++
|
retries++
|
||||||
addErrorMessage(`!! Connection lost. Retrying...`)
|
addErrorMessage(`Connection lost. Retrying...`)
|
||||||
setTimeout(startConnection, 2000)
|
setTimeout(startConnection, 2000)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import { transpile, isFile, tilde } from "./utils"
|
||||||
import { serveApp } from "./webapp"
|
import { serveApp } from "./webapp"
|
||||||
import { initDNS } from "./dns"
|
import { initDNS } from "./dns"
|
||||||
import { commands, commandPath, loadCommandModule } from "./commands"
|
import { commands, commandPath, loadCommandModule } from "./commands"
|
||||||
import { runInSession, processExecOutput } from "./shell"
|
import { runCommandFn } from "./shell"
|
||||||
import { send, addWebsocket, removeWebsocket, closeWebsockets } from "./websocket"
|
import { send, addWebsocket, removeWebsocket, closeWebsockets } from "./websocket"
|
||||||
|
|
||||||
import { Layout } from "./html/layout"
|
import { Layout } from "./html/layout"
|
||||||
|
|
@ -98,12 +98,9 @@ app.on(["GET", "POST"], ["/cmd/:name"], async c => {
|
||||||
try {
|
try {
|
||||||
const mod = await loadCommandModule(cmd)
|
const mod = await loadCommandModule(cmd)
|
||||||
if (!mod || !mod[method])
|
if (!mod || !mod[method])
|
||||||
return c.json({ error: `No ${method} export in ${cmd}` }, 500)
|
return c.json({ status: "error", output: `No ${method} export in ${cmd}` }, 500)
|
||||||
|
|
||||||
return c.json(await runInSession(sessionId, async () => {
|
return c.json(await runCommandFn(sessionId, async () => mod[method](c)))
|
||||||
const [status, output] = processExecOutput(await mod[method](c))
|
|
||||||
return { status, output }
|
|
||||||
}))
|
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
return c.json({ status: "error", output: e.message || e.toString() }, 500)
|
return c.json({ status: "error", output: e.message || e.toString() }, 500)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
15
src/shell.ts
15
src/shell.ts
|
|
@ -29,9 +29,20 @@ export async function runCommand(sessionId: string, taskId: string, input: strin
|
||||||
return { status, output }
|
return { status, output }
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function runInSession(sessionId: string, fn: () => Promise<any>) {
|
export async function runCommandFn(sessionId: string, fn: () => Promise<CommandResult>) {
|
||||||
|
let status: "ok" | "error" = "ok"
|
||||||
|
let output: CommandOutput = ""
|
||||||
const state = getState(sessionId)
|
const state = getState(sessionId)
|
||||||
return await ALS.run(state, async () => await fn())
|
|
||||||
|
try {
|
||||||
|
const execOutput = await ALS.run(state, async () => await fn())
|
||||||
|
;[status, output] = processExecOutput(execOutput)
|
||||||
|
} catch (err) {
|
||||||
|
status = "error"
|
||||||
|
output = errorMessage(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return { status, output }
|
||||||
}
|
}
|
||||||
|
|
||||||
async function exec(cmd: string, args: string[]): Promise<["ok" | "error", CommandOutput]> {
|
async function exec(cmd: string, args: string[]): Promise<["ok" | "error", CommandOutput]> {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user