mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-08 19:40:11 +08:00
fix: error handling of container failures
This commit is contained in:
1 parent
3fdbca89f3
commit
8b5f7175a7
2 files changed
+30
-33
No files matched your search
+29
-27
@@ -19,31 +19,13 @@ function removeFromSession(sessionId, event, callback) {
|
||||
}
|
||||
|
||||
export function pushToSession(sessionId, event, data) {
|
||||
console.log('Push:', sessionId, event)
|
||||
const callbacks = sessions.get((sessionId, event))
|
||||
console.debug('Callbacks:', sessionId, callbacks.length)
|
||||
if (callbacks) {
|
||||
callbacks.forEach((callback) => callback(data))
|
||||
}
|
||||
}
|
||||
|
||||
export default (server) => {
|
||||
const io = new Server(server)
|
||||
|
||||
io.use(async (socket, next) => {
|
||||
console.log('Authenticating...')
|
||||
try {
|
||||
const user = await defaultUser()
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
socket.user = user
|
||||
next()
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
next(err)
|
||||
}
|
||||
})
|
||||
|
||||
io.on('connection', async (socket) => {
|
||||
async function connectClient(socket) {
|
||||
console.log('Connected to the client.')
|
||||
const sessionId = socket.handshake.query.session_id
|
||||
if (!sessionId) {
|
||||
@@ -51,9 +33,8 @@ export default (server) => {
|
||||
socket.disconnect()
|
||||
return
|
||||
}
|
||||
let session
|
||||
try {
|
||||
session = await Session.findOne({
|
||||
|
||||
const session = await Session.findOne({
|
||||
_id: sessionId,
|
||||
user: socket.user,
|
||||
status: 'active',
|
||||
@@ -63,17 +44,20 @@ export default (server) => {
|
||||
socket.disconnect()
|
||||
return
|
||||
}
|
||||
|
||||
const token = await genSessionJWT(session)
|
||||
|
||||
let container
|
||||
let stream
|
||||
try {
|
||||
container = await getAndStartContainer(session.containerId)
|
||||
stream = await attachContainer(container, { token })
|
||||
} catch (err) {
|
||||
socket.send(err.message)
|
||||
socket.disconnect()
|
||||
return
|
||||
}
|
||||
|
||||
const token = await genSessionJWT(session)
|
||||
|
||||
const container = await getAndStartContainer(session.containerId)
|
||||
const stream = await attachContainer(container, { token })
|
||||
|
||||
stream.socket.on('data', (chunk) => {
|
||||
socket.emit('terminal', chunk.toString())
|
||||
})
|
||||
@@ -98,5 +82,23 @@ export default (server) => {
|
||||
})
|
||||
|
||||
socket.send(`${container.id}\n`)
|
||||
}
|
||||
|
||||
export default (server) => {
|
||||
const io = new Server(server)
|
||||
|
||||
io.use(async (socket, next) => {
|
||||
console.log('Authenticating...')
|
||||
try {
|
||||
const user = await defaultUser()
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
socket.user = user
|
||||
next()
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
next(err)
|
||||
}
|
||||
})
|
||||
|
||||
io.on('connection', connectClient)
|
||||
}
|
||||
@@ -35,16 +35,11 @@ export async function createContainer(name) {
|
||||
|
||||
export async function getAndStartContainer(id) {
|
||||
console.log(`Getting container: ${id}`)
|
||||
let container
|
||||
try {
|
||||
container = engine.getContainer(id)
|
||||
const container = engine.getContainer(id)
|
||||
if (!(await container.inspect()).State.Running) {
|
||||
await container.start()
|
||||
}
|
||||
return container
|
||||
} catch (error) {
|
||||
throw new Error(`Container not found: ${id}`)
|
||||
}
|
||||
}
|
||||
|
||||
export async function attachContainer(container, { token }) {
|
||||
|
||||
Reference in new issue
Block a user