1
0
mirror of https://github.com/sasjs/adapter.git synced 2025-12-11 09:24:35 +00:00

Merge branch 'api-execution' into issue17

This commit is contained in:
Mihajlo Medjedovic
2020-07-31 19:08:39 +02:00
2 changed files with 57 additions and 17 deletions

View File

@@ -313,6 +313,7 @@ export class SASViyaApiClient {
} }
).then((res: any) => res.result.items.map((i: any) => i.line).join("\n")); ).then((res: any) => res.result.items.map((i: any) => i.line).join("\n"));
} }
return { result: jobResult?.result, log }; return { result: jobResult?.result, log };
// } else { // } else {
// console.error( // console.error(
@@ -621,7 +622,6 @@ export class SASViyaApiClient {
if (!this.rootFolder) { if (!this.rootFolder) {
await this.populateRootFolder(accessToken); await this.populateRootFolder(accessToken);
} }
if (!this.rootFolder) { if (!this.rootFolder) {
throw new Error("Root folder was not found"); throw new Error("Root folder was not found");
} }
@@ -869,10 +869,7 @@ export class SASViyaApiClient {
const rootFolder = await this.request<Folder>( const rootFolder = await this.request<Folder>(
`${this.serverUrl}${url}`, `${this.serverUrl}${url}`,
requestInfo requestInfo
).catch((e) => { );
error = e;
return null;
});
this.rootFolder = rootFolder?.result || null; this.rootFolder = rootFolder?.result || null;
if (error) { if (error) {

View File

@@ -51,7 +51,9 @@ export default class SASjs {
private loginUrl: string = ""; private loginUrl: string = "";
private csrfTokenApi: CsrfToken | null = null; private csrfTokenApi: CsrfToken | null = null;
private csrfTokenWeb: CsrfToken | null = null; private csrfTokenWeb: CsrfToken | null = null;
private retryCountRequest: number = 0; private retryCountWeb: number = 0;
private retryCountComputeApi: number = 0;
private retryCountJeseApi: number = 0;
private sasjsRequests: SASjsRequest[] = []; private sasjsRequests: SASjsRequest[] = [];
private sasjsWaitingRequests: SASjsWaitingRequest[] = []; private sasjsWaitingRequests: SASjsWaitingRequest[] = [];
private userName: string = ""; private userName: string = "";
@@ -438,6 +440,8 @@ export default class SASjs {
loginRequiredCallback, loginRequiredCallback,
accessToken accessToken
); );
this.retryCountComputeApi = 0;
} else { } else {
requestResponse = await this.executeJobViaJesApi( requestResponse = await this.executeJobViaJesApi(
sasJob, sasJob,
@@ -446,6 +450,8 @@ export default class SASjs {
loginRequiredCallback, loginRequiredCallback,
accessToken accessToken
); );
this.retryCountJeseApi = 0;
} }
} else { } else {
requestResponse = await this.executeJobViaWeb( requestResponse = await this.executeJobViaWeb(
@@ -539,8 +545,7 @@ export default class SASjs {
sasjsWaitingRequest.requestPromise.promise = new Promise( sasjsWaitingRequest.requestPromise.promise = new Promise(
async (resolve, reject) => { async (resolve, reject) => {
resolve( this.sasViyaApiClient
await this.sasViyaApiClient
?.executeComputeJob( ?.executeComputeJob(
sasJob, sasJob,
config.contextName, config.contextName,
@@ -554,9 +559,29 @@ export default class SASjs {
} else { } else {
this.appendSasjsRequest(response, sasJob, null); this.appendSasjsRequest(response, sasJob, null);
} }
return JSON.parse(response!.result);
resolve(JSON.parse(response!.result));
}) })
.catch((e) => { .catch(async (e) => {
if (needsRetry(JSON.stringify(e))) {
if (this.retryCountComputeApi < requestRetryLimit) {
let retryResponse = await this.executeJobViaComputeApi(
sasJob,
data,
config,
loginRequiredCallback,
accessToken
);
this.retryCountComputeApi++;
resolve(retryResponse);
} else {
this.retryCountComputeApi = 0;
reject({ MESSAGE: "Compute API retry requests limit reached" });
}
}
if (e && e.status === 401) { if (e && e.status === 401) {
if (loginRequiredCallback) loginRequiredCallback(true); if (loginRequiredCallback) loginRequiredCallback(true);
sasjsWaitingRequest.requestPromise.resolve = resolve; sasjsWaitingRequest.requestPromise.resolve = resolve;
@@ -567,7 +592,6 @@ export default class SASjs {
reject({ MESSAGE: e || "Job execution failed" }); reject({ MESSAGE: e || "Job execution failed" });
} }
}) })
);
} }
); );
return sasjsWaitingRequest.requestPromise.promise; return sasjsWaitingRequest.requestPromise.promise;
@@ -618,9 +642,28 @@ export default class SASjs {
} }
return JSON.parse(response!.result); return JSON.parse(response!.result);
}) })
.catch((e) => .catch(async (e) => {
if (needsRetry(JSON.stringify(e))) {
if (this.retryCountJeseApi < requestRetryLimit) {
let retryResponse = await this.executeJobViaJesApi(
sasJob,
data,
config,
loginRequiredCallback,
accessToken
);
this.retryCountJeseApi++;
resolve(retryResponse);
} else {
this.retryCountJeseApi = 0;
reject({ MESSAGE: "Jes API retry requests limit reached" });
}
}
reject({ MESSAGE: (e && e.message) || "Job execution failed" }) reject({ MESSAGE: (e && e.message) || "Job execution failed" })
) })
); );
} }
} }
@@ -769,18 +812,18 @@ export default class SASjs {
(needsRetry(responseText) || isRedirected) && (needsRetry(responseText) || isRedirected) &&
!isLogInRequired(responseText) !isLogInRequired(responseText)
) { ) {
if (this.retryCountRequest < requestRetryLimit) { if (this.retryCountWeb < requestRetryLimit) {
this.retryCountRequest++; this.retryCountWeb++;
this.request(sasJob, data).then( this.request(sasJob, data).then(
(res: any) => resolve(res), (res: any) => resolve(res),
(err: any) => reject(err) (err: any) => reject(err)
); );
} else { } else {
this.retryCountRequest = 0; this.retryCountWeb = 0;
reject(responseText); reject(responseText);
} }
} else { } else {
this.retryCountRequest = 0; this.retryCountWeb = 0;
this.parseLogFromResponse(responseText, program); this.parseLogFromResponse(responseText, program);
if (isLogInRequired(responseText)) { if (isLogInRequired(responseText)) {