diff --git a/src/SASViyaApiClient.ts b/src/SASViyaApiClient.ts index a8dbc9f..5b64703 100644 --- a/src/SASViyaApiClient.ts +++ b/src/SASViyaApiClient.ts @@ -51,6 +51,10 @@ export class SASViyaApiClient { ) private folderMap = new Map() + public appendRequest(response: any, program: string, debug: boolean) { + this.requestClient!.appendRequest(response, program, debug) + } + public get debug() { return this._debug } diff --git a/src/SASjs.ts b/src/SASjs.ts index 5924985..5249f7f 100644 --- a/src/SASjs.ts +++ b/src/SASjs.ts @@ -879,19 +879,13 @@ export default class SASjs { } public getSasRequests() { - const requests = [ - ...this.webJobExecutor!.getRequests(), - ...this.computeJobExecutor!.getRequests(), - ...this.jesJobExecutor!.getRequests() - ] + const requests = [...this.requestClient!.getRequests()] const sortedRequests = requests.sort(compareTimestamps) return sortedRequests } public clearSasRequests() { - this.webJobExecutor!.clearRequests() - this.computeJobExecutor!.clearRequests() - this.jesJobExecutor!.clearRequests() + this.requestClient!.clearRequests() } private setupConfiguration() { diff --git a/src/job-execution/ComputeJobExecutor.ts b/src/job-execution/ComputeJobExecutor.ts index 46d84be..d0a6ba6 100644 --- a/src/job-execution/ComputeJobExecutor.ts +++ b/src/job-execution/ComputeJobExecutor.ts @@ -35,14 +35,12 @@ export class ComputeJobExecutor extends BaseJobExecutor { expectWebout ) .then((response) => { - this.appendRequest(response, sasJob, config.debug) - + this.sasViyaApiClient.appendRequest(response, sasJob, config.debug) resolve(response.result) }) .catch(async (e: Error) => { if (e instanceof ComputeJobExecutionError) { - this.appendRequest(e, sasJob, config.debug) - + this.sasViyaApiClient.appendRequest(e, sasJob, config.debug) reject(new ErrorResponse(e?.message, e)) } diff --git a/src/job-execution/JesJobExecutor.ts b/src/job-execution/JesJobExecutor.ts index d924cfd..f266f44 100644 --- a/src/job-execution/JesJobExecutor.ts +++ b/src/job-execution/JesJobExecutor.ts @@ -27,7 +27,7 @@ export class JesJobExecutor extends BaseJobExecutor { this.sasViyaApiClient ?.executeJob(sasJob, config.contextName, config.debug, data, authConfig) .then((response: any) => { - this.appendRequest(response, sasJob, config.debug) + this.sasViyaApiClient.appendRequest(response, sasJob, config.debug) let responseObject = {} @@ -49,7 +49,7 @@ export class JesJobExecutor extends BaseJobExecutor { }) .catch(async (e: Error) => { if (e instanceof JobExecutionError) { - this.appendRequest(e, sasJob, config.debug) + this.sasViyaApiClient.appendRequest(e, sasJob, config.debug) reject(new ErrorResponse(e?.message, e)) } diff --git a/src/job-execution/JobExecutor.ts b/src/job-execution/JobExecutor.ts index ffcdace..426bf59 100644 --- a/src/job-execution/JobExecutor.ts +++ b/src/job-execution/JobExecutor.ts @@ -15,8 +15,6 @@ export interface JobExecutor { extraResponseAttributes?: ExtraResponseAttributes[] ) => Promise resendWaitingRequests: () => Promise - getRequests: () => SASjsRequest[] - clearRequests: () => void } export abstract class BaseJobExecutor implements JobExecutor { @@ -46,54 +44,7 @@ export abstract class BaseJobExecutor implements JobExecutor { return } - getRequests = () => this.requests - - clearRequests = () => { - this.requests = [] - } - protected appendWaitingRequest(request: ExecuteFunction) { this.waitingRequests.push(request) } - - protected appendRequest(response: any, program: string, debug: boolean) { - let sourceCode = '' - let generatedCode = '' - let sasWork = null - - if (debug) { - if (response?.log) { - sourceCode = parseSourceCode(response.log) - generatedCode = parseGeneratedCode(response.log) - - if (response?.result) { - sasWork = response.result.WORK - } else { - sasWork = response.log - } - } else if (response?.result) { - sourceCode = parseSourceCode(response.result) - generatedCode = parseGeneratedCode(response.result) - sasWork = response.result.WORK - } - } - - const stringifiedResult = - typeof response?.result === 'string' - ? response?.result - : JSON.stringify(response?.result, null, 2) - - this.requests.push({ - logFile: response?.log || stringifiedResult || response, - serviceLink: program, - timestamp: new Date(), - sourceCode, - generatedCode, - SASWORK: sasWork - }) - - if (this.requests.length > 20) { - this.requests.splice(0, 1) - } - } } diff --git a/src/job-execution/WebJobExecutor.ts b/src/job-execution/WebJobExecutor.ts index d3b6faf..6650f91 100644 --- a/src/job-execution/WebJobExecutor.ts +++ b/src/job-execution/WebJobExecutor.ts @@ -113,13 +113,13 @@ export class WebJobExecutor extends BaseJobExecutor { const requestPromise = new Promise((resolve, reject) => { this.requestClient!.post(apiUrl, formData, undefined) .then(async (res: any) => { + this.requestClient!.appendRequest(res, sasJob, config.debug) if (this.serverType === ServerType.SasViya && config.debug) { const jsonResponse = await parseSasViyaDebugResponse( res.result, this.requestClient, this.serverUrl ) - this.appendRequest(res, sasJob, config.debug) resolve(jsonResponse) } if (this.serverType === ServerType.Sas9 && config.debug) { @@ -128,17 +128,14 @@ export class WebJobExecutor extends BaseJobExecutor { jsonResponse = parseWeboutResponse(res.result, apiUrl) getValidJson(jsonResponse) - this.appendRequest(res, sasJob, config.debug) resolve(res.result) } - this.appendRequest(res, sasJob, config.debug) getValidJson(res.result as string) resolve(res.result) }) .catch(async (e: Error) => { if (e instanceof JobExecutionError) { - this.appendRequest(e, sasJob, config.debug) - + this.requestClient!.appendRequest(e, sasJob, config.debug) reject(new ErrorResponse(e?.message, e)) } diff --git a/src/request/RequestClient.ts b/src/request/RequestClient.ts index 28c5512..fc7143c 100644 --- a/src/request/RequestClient.ts +++ b/src/request/RequestClient.ts @@ -8,10 +8,11 @@ import { InternalServerError, JobExecutionError } from '../types/errors' +import { SASjsRequest } from '../types' import { parseWeboutResponse } from '../utils/parseWeboutResponse' import { prefixMessage } from '@sasjs/utils/error' import { SAS9AuthError } from '../types/errors/SAS9AuthError' -import { getValidJson } from '../utils' +import { parseGeneratedCode, parseSourceCode } from '../utils' export interface HttpClient { get( @@ -47,6 +48,8 @@ export interface HttpClient { } export class RequestClient implements HttpClient { + private requests: SASjsRequest[] = [] + protected csrfToken: CsrfToken = { headerName: '', value: '' } protected fileUploadCsrfToken: CsrfToken | undefined protected httpClient: AxiosInstance @@ -83,6 +86,53 @@ export class RequestClient implements HttpClient { return this.httpClient.defaults.baseURL || '' } + public getRequests = () => this.requests + + public clearRequests = () => { + this.requests = [] + } + + public appendRequest(response: any, program: string, debug: boolean) { + let sourceCode = '' + let generatedCode = '' + let sasWork = null + + if (debug) { + if (response?.log) { + sourceCode = parseSourceCode(response.log) + generatedCode = parseGeneratedCode(response.log) + + if (response?.result) { + sasWork = response.result.WORK + } else { + sasWork = response.log + } + } else if (response?.result) { + sourceCode = parseSourceCode(response.result) + generatedCode = parseGeneratedCode(response.result) + sasWork = response.result.WORK + } + } + + const stringifiedResult = + typeof response?.result === 'string' + ? response?.result + : JSON.stringify(response?.result, null, 2) + + this.requests.push({ + logFile: response?.log || stringifiedResult || response, + serviceLink: program, + timestamp: new Date(), + sourceCode, + generatedCode, + SASWORK: sasWork + }) + + if (this.requests.length > 20) { + this.requests.splice(0, 1) + } + } + public async get( url: string, accessToken: string | undefined,