fix: expiryCheck error handling

This commit is contained in:
Lin, Hung-Shin committed 2023-11-22 11:26:03 +08:00
1 parent cd03277fd4
commit 3cebcddc91
3 files changed
+31 -18

No files matched your search

+2
View File
@@ -35,10 +35,12 @@ const Session = model(
user: {
type: Schema.ObjectId,
ref: 'User',
required: true,
},
quest: {
type: String,
ref: 'Quest',
required: true,
},
containerId: String,
status: {
+1 -1
View File
@@ -76,7 +76,7 @@ export async function deleteContainer(id) {
try {
await container.stop()
} catch (error) {
console.log(error)
console.warn('Failed to stop container', id)
}
await container.remove()
}
+28 -17
View File
@@ -3,6 +3,28 @@ import { Session } from '@linux-odyssey/models'
import config from '../config.js'
import { deleteContainer } from './docker.js'
async function disableSession(session) {
try {
await deleteContainer(session.containerId)
} catch (err) {
// If the container doesn't exist, we can ignore the error
if (err.statusCode !== 404) {
throw new Error(
`Failed to delete container ${session.containerId} for session ${session._id}`
)
}
}
if (session.status === 'active') {
session.status = 'inactive'
}
session.containerId = null
try {
await session.save()
} catch (err) {
throw new Error(`Failed to save session ${session._id}\n${err}`)
}
}
export async function removeExpired() {
// Find all sessions that are containerId is not null and lastActivityAt is
// less than the current time minus the expiry time
@@ -13,25 +35,14 @@ export async function removeExpired() {
lastActivityAt: { $lt: new Date(Date.now() - config.containerExpiry) },
})
await Promise.all(
sessions.map(async (session) => {
console.log('Expiring session: ', session._id, session.containerId)
try {
await deleteContainer(session.containerId)
} catch (err) {
if (err.statusCode !== 404) {
throw err
}
}
if (session.status === 'active') {
session.status = 'inactive'
}
session.containerId = null
await session.save()
})
sessions.map((session) =>
disableSession(session).catch((err) => {
throw new Error(`Failed to expire session: ${session._id}\n${err}`)
})
)
)
console.log('Done checking for expired sessions')
} catch (err) {
console.error(err)
console.error('Remove expiring failed:', err)
}
}