1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-04 11:10:05 +00:00

feat(pollJobState): added ability to configure poll options

This commit is contained in:
Yury Shkoda
2020-11-30 10:21:49 +03:00
parent 505d85c256
commit 1b117a67aa
4 changed files with 38 additions and 11 deletions

View File

@@ -17,7 +17,8 @@ import {
CsrfToken,
EditContextInput,
ErrorResponse,
JobDefinition
JobDefinition,
PollOptions
} from './types'
import { formatDataForRequest } from './utils/formatDataForRequest'
import { SessionManager } from './SessionManager'
@@ -428,6 +429,7 @@ export class SASViyaApiClient {
* @param debug - when set to true, the log will be returned.
* @param expectWebout - when set to true, the automatic _webout fileref will be checked for content, and that content returned. This fileref is used when the Job contains a SASjs web request (as opposed to executing arbitrary SAS code).
* @param waitForResult - when set to true, function will return the session
* @param pollOptions - an object that represents poll interval and maximum amount of attempts.
*/
public async executeScript(
jobPath: string,
@@ -437,7 +439,8 @@ export class SASViyaApiClient {
data = null,
debug: boolean = false,
expectWebout = false,
waitForResult = true
waitForResult = true,
pollOptions?: PollOptions
): Promise<any> {
try {
const headers: any = {
@@ -543,7 +546,12 @@ export class SASViyaApiClient {
)
}
const jobStatus = await this.pollJobState(postedJob, etag, accessToken)
const jobStatus = await this.pollJobState(
postedJob,
etag,
accessToken,
pollOptions
)
const { result: currentJob } = await this.request<Job>(
`${this.serverUrl}/compute/sessions/${executionSessionId}/jobs/${postedJob.id}`,
@@ -949,6 +957,7 @@ export class SASViyaApiClient {
* @param accessToken - an optional access token for an authorized user.
* @param waitForResult - a boolean indicating if the function should wait for a result.
* @param expectWebout - a boolean indicating whether to expect a _webout response.
* @param pollOptions - an object that represents poll interval and maximum amount of attempts.
*/
public async executeComputeJob(
sasJob: string,
@@ -957,7 +966,8 @@ export class SASViyaApiClient {
data?: any,
accessToken?: string,
waitForResult = true,
expectWebout = false
expectWebout = false,
pollOptions?: PollOptions
) {
if (isRelativePath(sasJob) && !this.rootFolderName) {
throw new Error(
@@ -1042,7 +1052,8 @@ export class SASViyaApiClient {
data,
debug,
expectWebout,
waitForResult
waitForResult,
pollOptions
)
}
@@ -1238,10 +1249,17 @@ export class SASViyaApiClient {
private async pollJobState(
postedJob: any,
etag: string | null,
accessToken?: string
accessToken?: string,
pollOptions?: PollOptions
) {
const MAX_POLL_COUNT = 1000
const POLL_INTERVAL = 100
let MAX_POLL_COUNT = 1000
let POLL_INTERVAL = 100
if (pollOptions) {
MAX_POLL_COUNT = pollOptions.MAX_POLL_COUNT
POLL_INTERVAL = pollOptions.POLL_INTERVAL
}
let postedJobState = ''
let pollCount = 0
const headers: any = {

View File

@@ -32,7 +32,8 @@ import {
CsrfToken,
UploadFile,
EditContextInput,
ErrorResponse
ErrorResponse,
PollOptions
} from './types'
import { SASViyaApiClient } from './SASViyaApiClient'
import { SAS9ApiClient } from './SAS9ApiClient'
@@ -711,13 +712,15 @@ export default class SASjs {
* @param accessToken - a valid access token that is authorised to execute compute jobs.
* The access token is not required when the user is authenticated via the browser.
* @param waitForResult - a boolean that indicates whether the function needs to wait for execution to complete.
* @param pollOptions - an object that represents poll interval and maximum amount of attempts.
*/
public async startComputeJob(
sasJob: string,
data: any,
config: any = {},
accessToken?: string,
waitForResult?: boolean
waitForResult?: boolean,
pollOptions?: PollOptions
) {
config = {
...this.sasjsConfig,
@@ -738,7 +741,8 @@ export default class SASjs {
data,
accessToken,
!!waitForResult,
false
false,
pollOptions
)
}

4
src/types/PollOptions.ts Normal file
View File

@@ -0,0 +1,4 @@
export interface PollOptions {
MAX_POLL_COUNT: number
POLL_INTERVAL: number
}

View File

@@ -12,3 +12,4 @@ export * from './SASjsWaitingRequest'
export * from './ServerType'
export * from './Session'
export * from './UploadFile'
export * from './PollOptions'