From f030aa151603527f231b7f7ce2ec0d85f290cdc5 Mon Sep 17 00:00:00 2001 From: Saad Jutt Date: Mon, 15 Nov 2021 21:30:12 +0500 Subject: [PATCH] chore: bug fixes for session crash details + return code --- api/public/swagger.yaml | 2 +- api/src/controllers/internal/Execution.ts | 6 ++++-- api/src/controllers/internal/Session.ts | 6 ++++-- api/src/controllers/stp.ts | 5 +++-- api/src/routes/api/stp.ts | 5 ++--- api/src/types/Session.ts | 2 +- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/api/public/swagger.yaml b/api/public/swagger.yaml index 3d814f4..03e1461 100644 --- a/api/public/swagger.yaml +++ b/api/public/swagger.yaml @@ -1021,7 +1021,7 @@ paths: type: string example: /Public/somefolder/some.file requestBody: - required: true + required: false content: application/json: schema: diff --git a/api/src/controllers/internal/Execution.ts b/api/src/controllers/internal/Execution.ts index af9efff..d29599c 100644 --- a/api/src/controllers/internal/Execution.ts +++ b/api/src/controllers/internal/Execution.ts @@ -74,11 +74,13 @@ ${program}` await moveFile(codePath + '.bkp', codePath) // we now need to poll the session array - while (!session.completed || !session.crashed) { + while (!session.completed) { await delay(50) } - const log = (await fileExists(logPath)) ? await readFile(logPath) : '' + const log = + ((await fileExists(logPath)) ? await readFile(logPath) : '') + + session.crashed const webout = (await fileExists(weboutPath)) ? await readFile(weboutPath) : '' diff --git a/api/src/controllers/internal/Session.ts b/api/src/controllers/internal/Session.ts index 2cdf03b..c25daf5 100644 --- a/api/src/controllers/internal/Session.ts +++ b/api/src/controllers/internal/Session.ts @@ -83,7 +83,7 @@ export class SessionController { }) .catch((err) => { session.completed = true - session.crashed = true + session.crashed = err.toString() console.log('session crashed', session.id, err) }) @@ -100,7 +100,9 @@ export class SessionController { public async waitForSession(session: Session) { const codeFilePath = path.join(session.path, 'code.sas') - while (await fileExists(codeFilePath)) {} + // TODO: don't wait forever + while ((await fileExists(codeFilePath)) && !session.crashed) {} + console.log('session crashed?', !!session.crashed, session.crashed) session.ready = true return Promise.resolve(session) diff --git a/api/src/controllers/stp.ts b/api/src/controllers/stp.ts index bafb315..460ad0d 100644 --- a/api/src/controllers/stp.ts +++ b/api/src/controllers/stp.ts @@ -64,10 +64,10 @@ export class STPController { @Post('/execute') public async executeReturnJson( @Request() request: express.Request, - @Body() body: ExecuteReturnJsonPayload, + @Body() body?: ExecuteReturnJsonPayload, @Query() _program?: string ): Promise { - const program = _program ?? body._program + const program = _program ?? body?._program return executeReturnJson(request, program!) } } @@ -126,6 +126,7 @@ const executeReturnJson = async ( } } catch (err: any) { throw { + code: 400, status: 'failure', message: 'Job execution failed.', error: typeof err === 'object' ? err.toString() : err diff --git a/api/src/routes/api/stp.ts b/api/src/routes/api/stp.ts index 7f03bca..e4691ff 100644 --- a/api/src/routes/api/stp.ts +++ b/api/src/routes/api/stp.ts @@ -30,10 +30,9 @@ stpRouter.post( fileUploadController.getMulterUploadObject().any(), async (req: any, res: any) => { const { error: errQ, value: query } = executeProgramRawValidation(req.query) - if (errQ) return res.status(400).send(errQ.details[0].message) - const { error: errB, value: body } = executeProgramRawValidation(req.body) - if (errB) return res.status(400).send(errB.details[0].message) + + if (errQ && errB) return res.status(400).send(errB.details[0].message) try { const response = await controller.executeReturnJson( diff --git a/api/src/types/Session.ts b/api/src/types/Session.ts index e8e23fd..cf3e490 100644 --- a/api/src/types/Session.ts +++ b/api/src/types/Session.ts @@ -6,5 +6,5 @@ export interface Session { path: string inUse: boolean completed: boolean - crashed?: boolean + crashed?: string }