mirror of
https://github.com/sasjs/adapter.git
synced 2026-01-07 12:30:06 +00:00
fix: move parseSasViyaDebugResponse method to utils folder
This commit is contained in:
@@ -8,7 +8,11 @@ import { generateFileUploadForm } from '../file/generateFileUploadForm'
|
|||||||
import { generateTableUploadForm } from '../file/generateTableUploadForm'
|
import { generateTableUploadForm } from '../file/generateTableUploadForm'
|
||||||
import { RequestClient } from '../request/RequestClient'
|
import { RequestClient } from '../request/RequestClient'
|
||||||
import { SASViyaApiClient } from '../SASViyaApiClient'
|
import { SASViyaApiClient } from '../SASViyaApiClient'
|
||||||
import { isRelativePath, isValidJson } from '../utils'
|
import {
|
||||||
|
isRelativePath,
|
||||||
|
isValidJson,
|
||||||
|
parseSasViyaDebugResponse
|
||||||
|
} from '../utils'
|
||||||
import { BaseJobExecutor } from './JobExecutor'
|
import { BaseJobExecutor } from './JobExecutor'
|
||||||
import { parseWeboutResponse } from '../utils/parseWeboutResponse'
|
import { parseWeboutResponse } from '../utils/parseWeboutResponse'
|
||||||
|
|
||||||
@@ -95,8 +99,10 @@ export class WebJobExecutor extends BaseJobExecutor {
|
|||||||
this.requestClient!.post(apiUrl, formData, undefined)
|
this.requestClient!.post(apiUrl, formData, undefined)
|
||||||
.then(async (res) => {
|
.then(async (res) => {
|
||||||
if (this.serverType === ServerType.SasViya && config.debug) {
|
if (this.serverType === ServerType.SasViya && config.debug) {
|
||||||
const jsonResponse = await this.parseSasViyaDebugResponse(
|
const jsonResponse = await parseSasViyaDebugResponse(
|
||||||
res.result as string
|
res.result as string,
|
||||||
|
this.requestClient,
|
||||||
|
this.serverUrl
|
||||||
)
|
)
|
||||||
this.appendRequest(res, sasJob, config.debug)
|
this.appendRequest(res, sasJob, config.debug)
|
||||||
resolve(jsonResponse)
|
resolve(jsonResponse)
|
||||||
@@ -151,20 +157,6 @@ export class WebJobExecutor extends BaseJobExecutor {
|
|||||||
return requestPromise
|
return requestPromise
|
||||||
}
|
}
|
||||||
|
|
||||||
private parseSasViyaDebugResponse = async (response: string) => {
|
|
||||||
const iframeStart = response.split(
|
|
||||||
'<iframe style="width: 99%; height: 500px" src="'
|
|
||||||
)[1]
|
|
||||||
const jsonUrl = iframeStart ? iframeStart.split('"></iframe>')[0] : null
|
|
||||||
if (!jsonUrl) {
|
|
||||||
throw new Error('Unable to find webout file URL.')
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.requestClient
|
|
||||||
.get(this.serverUrl + jsonUrl, undefined)
|
|
||||||
.then((res) => res.result)
|
|
||||||
}
|
|
||||||
|
|
||||||
private async getJobUri(sasJob: string) {
|
private async getJobUri(sasJob: string) {
|
||||||
if (!this.sasViyaApiClient) return ''
|
if (!this.sasViyaApiClient) return ''
|
||||||
let uri = ''
|
let uri = ''
|
||||||
|
|||||||
@@ -13,3 +13,4 @@ export * from './splitChunks'
|
|||||||
export * from './parseWeboutResponse'
|
export * from './parseWeboutResponse'
|
||||||
export * from './fetchLogByChunks'
|
export * from './fetchLogByChunks'
|
||||||
export * from './isValidJson'
|
export * from './isValidJson'
|
||||||
|
export * from './parseViyaDebugResponse'
|
||||||
|
|||||||
29
src/utils/parseViyaDebugResponse.ts
Normal file
29
src/utils/parseViyaDebugResponse.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { RequestClient } from '../request/RequestClient'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When querying a Viya job using the Web approach (as opposed to using the APIs) with _DEBUG enabled,
|
||||||
|
* the first response contains the log with the content in an iframe. Therefore when debug is enabled,
|
||||||
|
* and the serverType is VIYA, and useComputeApi is null (WEB), we call this function to extract the
|
||||||
|
* (_webout) content from the iframe.
|
||||||
|
* @param response - first response from viya job
|
||||||
|
* @param requestClient
|
||||||
|
* @param serverUrl
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export const parseSasViyaDebugResponse = async (
|
||||||
|
response: string,
|
||||||
|
requestClient: RequestClient,
|
||||||
|
serverUrl: string
|
||||||
|
) => {
|
||||||
|
const iframeStart = response.split(
|
||||||
|
'<iframe style="width: 99%; height: 500px" src="'
|
||||||
|
)[1]
|
||||||
|
const jsonUrl = iframeStart ? iframeStart.split('"></iframe>')[0] : null
|
||||||
|
if (!jsonUrl) {
|
||||||
|
throw new Error('Unable to find webout file URL.')
|
||||||
|
}
|
||||||
|
|
||||||
|
return requestClient
|
||||||
|
.get(serverUrl + jsonUrl, undefined)
|
||||||
|
.then((res) => res.result)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user