mirror of
https://github.com/sasjs/server.git
synced 2025-12-10 11:24:35 +00:00
Merge pull request #377 from sasjs/issue-373-stp-fix
feat(api): enabled query params in stp/trigger endpoint
This commit is contained in:
@@ -603,21 +603,6 @@ components:
|
|||||||
- sessionId
|
- sessionId
|
||||||
type: object
|
type: object
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
TriggerProgramPayload:
|
|
||||||
properties:
|
|
||||||
_program:
|
|
||||||
type: string
|
|
||||||
description: 'Location of SAS program'
|
|
||||||
example: /Public/somefolder/some.file
|
|
||||||
expiresAfterMins:
|
|
||||||
type: number
|
|
||||||
format: double
|
|
||||||
description: "Amount of minutes after the completion of the program when the session must be\ndestroyed."
|
|
||||||
example: 15
|
|
||||||
required:
|
|
||||||
- _program
|
|
||||||
type: object
|
|
||||||
additionalProperties: false
|
|
||||||
LoginPayload:
|
LoginPayload:
|
||||||
properties:
|
properties:
|
||||||
username:
|
username:
|
||||||
@@ -1936,8 +1921,8 @@ paths:
|
|||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/TriggerProgramResponse'
|
$ref: '#/components/schemas/TriggerProgramResponse'
|
||||||
description: 'Trigger Program on the Specified Runtime'
|
description: 'Trigger Program on the Specified Runtime.'
|
||||||
summary: 'Triggers program and returns SessionId immediately - does not wait for program completion'
|
summary: 'Triggers program and returns SessionId immediately - does not wait for program completion.'
|
||||||
tags:
|
tags:
|
||||||
- STP
|
- STP
|
||||||
security:
|
security:
|
||||||
@@ -1945,19 +1930,31 @@ paths:
|
|||||||
bearerAuth: []
|
bearerAuth: []
|
||||||
parameters:
|
parameters:
|
||||||
-
|
-
|
||||||
description: 'Location of code in SASjs Drive'
|
description: 'Location of code in SASjs Drive.'
|
||||||
in: query
|
in: query
|
||||||
name: _program
|
name: _program
|
||||||
required: false
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
example: /Projects/myApp/some/program
|
example: /Projects/myApp/some/program
|
||||||
requestBody:
|
-
|
||||||
required: true
|
description: 'Optional query param for setting debug mode.'
|
||||||
content:
|
in: query
|
||||||
application/json:
|
name: _debug
|
||||||
schema:
|
required: false
|
||||||
$ref: '#/components/schemas/TriggerProgramPayload'
|
schema:
|
||||||
|
format: double
|
||||||
|
type: number
|
||||||
|
example: 131
|
||||||
|
-
|
||||||
|
description: 'Optional query param for setting amount of minutes after the completion of the program when the session must be destroyed.'
|
||||||
|
in: query
|
||||||
|
name: expiresAfterMins
|
||||||
|
required: false
|
||||||
|
schema:
|
||||||
|
format: double
|
||||||
|
type: number
|
||||||
|
example: 15
|
||||||
/:
|
/:
|
||||||
get:
|
get:
|
||||||
operationId: Home
|
operationId: Home
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ interface ExecutePostRequestPayload {
|
|||||||
|
|
||||||
interface TriggerProgramPayload {
|
interface TriggerProgramPayload {
|
||||||
/**
|
/**
|
||||||
* Location of SAS program
|
* Location of SAS program.
|
||||||
* @example "/Public/somefolder/some.file"
|
* @example "/Public/somefolder/some.file"
|
||||||
*/
|
*/
|
||||||
_program: string
|
_program: string
|
||||||
@@ -32,6 +32,10 @@ interface TriggerProgramPayload {
|
|||||||
* @example 15
|
* @example 15
|
||||||
*/
|
*/
|
||||||
expiresAfterMins?: number
|
expiresAfterMins?: number
|
||||||
|
/**
|
||||||
|
* Query param for setting debug mode.
|
||||||
|
*/
|
||||||
|
_debug?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
interface TriggerProgramResponse {
|
interface TriggerProgramResponse {
|
||||||
@@ -108,19 +112,23 @@ export class STPController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trigger Program on the Specified Runtime
|
* Trigger Program on the Specified Runtime.
|
||||||
* @summary Triggers program and returns SessionId immediately - does not wait for program completion
|
* @summary Triggers program and returns SessionId immediately - does not wait for program completion.
|
||||||
* @param _program Location of code in SASjs Drive
|
* @param _program Location of code in SASjs Drive.
|
||||||
|
* @param expiresAfterMins Optional query param for setting amount of minutes after the completion of the program when the session must be destroyed.
|
||||||
|
* @param _debug Optional query param for setting debug mode.
|
||||||
* @example _program "/Projects/myApp/some/program"
|
* @example _program "/Projects/myApp/some/program"
|
||||||
* @param expiresAfterMins Amount of minutes after the completion of the program when the session must be destroyed
|
* @example _debug 131
|
||||||
* @example expiresAfterMins 15
|
* @example expiresAfterMins 15
|
||||||
*/
|
*/
|
||||||
@Post('/trigger')
|
@Post('/trigger')
|
||||||
public async triggerProgram(
|
public async triggerProgram(
|
||||||
@Request() request: express.Request,
|
@Request() request: express.Request,
|
||||||
@Body() body: TriggerProgramPayload
|
@Query() _program: string,
|
||||||
|
@Query() _debug?: number,
|
||||||
|
@Query() expiresAfterMins?: number
|
||||||
): Promise<TriggerProgramResponse> {
|
): Promise<TriggerProgramResponse> {
|
||||||
return triggerProgram(request, body)
|
return triggerProgram(request, { _program, _debug, expiresAfterMins })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,14 +171,18 @@ const execute = async (
|
|||||||
|
|
||||||
const triggerProgram = async (
|
const triggerProgram = async (
|
||||||
req: express.Request,
|
req: express.Request,
|
||||||
{ _program, expiresAfterMins }: TriggerProgramPayload
|
{ _program, _debug, expiresAfterMins }: TriggerProgramPayload
|
||||||
): Promise<TriggerProgramResponse> => {
|
): Promise<TriggerProgramResponse> => {
|
||||||
try {
|
try {
|
||||||
const vars = { ...req.body }
|
// put _program query param into vars object
|
||||||
const filesNamesMap = req.files?.length
|
const vars: { [key: string]: string | number } = { _program }
|
||||||
? makeFilesNamesMap(req.files as MulterFile[])
|
|
||||||
: null
|
// if present add _debug query param to vars object
|
||||||
const otherArgs = { filesNamesMap: filesNamesMap }
|
if (_debug) {
|
||||||
|
vars._debug = _debug
|
||||||
|
}
|
||||||
|
|
||||||
|
// get code path and runTime
|
||||||
const { codePath, runTime } = await getRunTimeAndFilePath(_program)
|
const { codePath, runTime } = await getRunTimeAndFilePath(_program)
|
||||||
|
|
||||||
// get session controller based on runTime
|
// get session controller based on runTime
|
||||||
@@ -191,7 +203,6 @@ const triggerProgram = async (
|
|||||||
runTime,
|
runTime,
|
||||||
preProgramVariables: getPreProgramVariables(req),
|
preProgramVariables: getPreProgramVariables(req),
|
||||||
vars,
|
vars,
|
||||||
otherArgs,
|
|
||||||
session
|
session
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -73,12 +73,17 @@ stpRouter.post(
|
|||||||
)
|
)
|
||||||
|
|
||||||
stpRouter.post('/trigger', async (req, res) => {
|
stpRouter.post('/trigger', async (req, res) => {
|
||||||
const { error, value: body } = triggerProgramValidation(req.body)
|
const { error, value: query } = triggerProgramValidation(req.query)
|
||||||
|
|
||||||
if (error) return res.status(400).send(error.details[0].message)
|
if (error) return res.status(400).send(error.details[0].message)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await controller.triggerProgram(req, body)
|
const response = await controller.triggerProgram(
|
||||||
|
req,
|
||||||
|
query._program,
|
||||||
|
query._debug,
|
||||||
|
query.expiresAfterMins
|
||||||
|
)
|
||||||
|
|
||||||
res.status(200)
|
res.status(200)
|
||||||
res.send(response)
|
res.send(response)
|
||||||
|
|||||||
Reference in New Issue
Block a user