@elisra-devops/docgen-data-provider 1.18.0 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/helpers/tfs.d.ts +15 -0
- package/bin/helpers/tfs.js +148 -130
- package/bin/helpers/tfs.js.map +1 -1
- package/bin/modules/TestDataProvider.d.ts +9 -2
- package/bin/modules/TestDataProvider.js +73 -36
- package/bin/modules/TestDataProvider.js.map +1 -1
- package/package.json +1 -1
- package/src/helpers/tfs.ts +166 -131
- package/src/modules/TestDataProvider.ts +93 -55
|
@@ -7,10 +7,13 @@ const tfs_data_2 = require("../models/tfs-data");
|
|
|
7
7
|
const xml2js = require("xml2js");
|
|
8
8
|
const logger_1 = require("../utils/logger");
|
|
9
9
|
const testStepParserHelper_1 = require("../utils/testStepParserHelper");
|
|
10
|
+
const pLimit = require('p-limit');
|
|
10
11
|
class TestDataProvider {
|
|
11
12
|
constructor(orgUrl, token) {
|
|
12
13
|
this.orgUrl = '';
|
|
13
14
|
this.token = '';
|
|
15
|
+
this.cache = new Map(); // Cache for API responses
|
|
16
|
+
this.limit = pLimit(10);
|
|
14
17
|
this.addToMap = (map, key, value) => {
|
|
15
18
|
var _a;
|
|
16
19
|
if (!map.has(key)) {
|
|
@@ -22,25 +25,43 @@ class TestDataProvider {
|
|
|
22
25
|
this.token = token;
|
|
23
26
|
this.testStepParserHelper = new testStepParserHelper_1.default(orgUrl, token);
|
|
24
27
|
}
|
|
28
|
+
async fetchWithCache(url, ttlMs = 60000) {
|
|
29
|
+
if (this.cache.has(url)) {
|
|
30
|
+
const cached = this.cache.get(url);
|
|
31
|
+
if (cached.timestamp + ttlMs > Date.now()) {
|
|
32
|
+
return cached.data;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const result = await tfs_1.TFSServices.getItemContent(url, this.token);
|
|
37
|
+
this.cache.set(url, {
|
|
38
|
+
data: result,
|
|
39
|
+
timestamp: Date.now(),
|
|
40
|
+
});
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
logger_1.default.error(`Error fetching ${url}: ${error.message}`);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
25
48
|
async GetTestSuiteByTestCase(testCaseId) {
|
|
26
49
|
let url = `${this.orgUrl}/_apis/testplan/suites?testCaseId=${testCaseId}`;
|
|
27
|
-
|
|
28
|
-
return testCaseData;
|
|
50
|
+
return this.fetchWithCache(url);
|
|
29
51
|
}
|
|
30
|
-
//get all test plans in the project
|
|
31
52
|
async GetTestPlans(project) {
|
|
32
53
|
let testPlanUrl = `${this.orgUrl}${project}/_apis/test/plans`;
|
|
33
|
-
return
|
|
54
|
+
return this.fetchWithCache(testPlanUrl);
|
|
34
55
|
}
|
|
35
|
-
//async get data test
|
|
36
|
-
// get all test suits in projct test plan
|
|
37
56
|
async GetTestSuites(project, planId) {
|
|
38
57
|
let testsuitesUrl = this.orgUrl + project + '/_apis/test/Plans/' + planId + '/suites';
|
|
39
58
|
try {
|
|
40
|
-
|
|
41
|
-
|
|
59
|
+
return this.fetchWithCache(testsuitesUrl);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
logger_1.default.error(`Failed to get test suites: ${e}`);
|
|
63
|
+
return null;
|
|
42
64
|
}
|
|
43
|
-
catch (e) { }
|
|
44
65
|
}
|
|
45
66
|
async GetTestSuitesForPlan(project, planid) {
|
|
46
67
|
if (!project) {
|
|
@@ -50,45 +71,56 @@ class TestDataProvider {
|
|
|
50
71
|
throw new Error('Plan not selected');
|
|
51
72
|
}
|
|
52
73
|
let url = this.orgUrl + '/' + project + '/_api/_testManagement/GetTestSuitesForPlan?__v=5&planId=' + planid;
|
|
53
|
-
|
|
54
|
-
return suites;
|
|
74
|
+
return this.fetchWithCache(url);
|
|
55
75
|
}
|
|
56
76
|
async GetTestSuitesByPlan(project, planId, recursive) {
|
|
57
77
|
let suiteId = Number(planId) + 1;
|
|
58
|
-
|
|
59
|
-
return suites;
|
|
78
|
+
return this.GetTestSuiteById(project, planId, suiteId.toString(), recursive);
|
|
60
79
|
}
|
|
61
|
-
//gets all testsuits recorsivly under test suite
|
|
62
80
|
async GetTestSuiteById(project, planId, suiteId, recursive) {
|
|
63
81
|
let testSuites = await this.GetTestSuitesForPlan(project, planId);
|
|
64
|
-
// GetTestSuites(project, planId);
|
|
65
82
|
helper_1.Helper.suitList = [];
|
|
66
83
|
let dataSuites = helper_1.Helper.findSuitesRecursive(planId, this.orgUrl, project, testSuites.testSuites, suiteId, recursive);
|
|
67
84
|
helper_1.Helper.first = true;
|
|
68
|
-
// let levledSuites: any = Helper.buildSuiteslevel(dataSuites);
|
|
69
85
|
return dataSuites;
|
|
70
86
|
}
|
|
71
|
-
|
|
72
|
-
async GetTestCasesBySuites(project, planId, suiteId, recursiv, includeRequirements, CustomerRequirementId, stepResultDetailsMap) {
|
|
87
|
+
async GetTestCasesBySuites(project, planId, suiteId, recursive, includeRequirements, CustomerRequirementId, stepResultDetailsMap) {
|
|
73
88
|
let testCasesList = new Array();
|
|
74
89
|
const requirementToTestCaseTraceMap = new Map();
|
|
75
90
|
const testCaseToRequirementsTraceMap = new Map();
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
91
|
+
// const startTime = performance.now();
|
|
92
|
+
let suitesTestCasesList = await this.GetTestSuiteById(project, planId, suiteId, recursive);
|
|
93
|
+
// Create array of promises that each return their test cases
|
|
94
|
+
const testCaseListPromises = suitesTestCasesList.map((suite) => this.limit(async () => {
|
|
95
|
+
try {
|
|
96
|
+
const testCases = await this.GetTestCases(project, planId, suite.id);
|
|
97
|
+
// const structureStartTime = performance.now();
|
|
98
|
+
const testCasesWithSteps = await this.StructureTestCase(project, testCases, suite, includeRequirements, CustomerRequirementId, requirementToTestCaseTraceMap, testCaseToRequirementsTraceMap, stepResultDetailsMap);
|
|
99
|
+
// logger.debug(
|
|
100
|
+
// `Performance: structured suite ${suite.id} in ${performance.now() - structureStartTime}ms`
|
|
101
|
+
// );
|
|
102
|
+
// Return the results instead of modifying shared array
|
|
103
|
+
return testCasesWithSteps || [];
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
logger_1.default.error(`Error processing suite ${suite.id}: ${error}`);
|
|
107
|
+
return []; // Return empty array on error
|
|
108
|
+
}
|
|
109
|
+
}));
|
|
110
|
+
// Wait for all promises and only then combine the results
|
|
111
|
+
const results = await Promise.all(testCaseListPromises);
|
|
112
|
+
testCasesList = results.flat(); // Combine all results into a single array
|
|
113
|
+
// logger.debug(`Performance: GetTestCasesBySuites completed in ${performance.now() - startTime}ms`);
|
|
83
114
|
return { testCasesList, requirementToTestCaseTraceMap, testCaseToRequirementsTraceMap };
|
|
84
115
|
}
|
|
85
116
|
async StructureTestCase(project, testCases, suite, includeRequirements, CustomerRequirementId, requirementToTestCaseTraceMap, testCaseToRequirementsTraceMap, stepResultDetailsMap) {
|
|
86
117
|
let url = this.orgUrl + project + '/_workitems/edit/';
|
|
87
|
-
let testCasesUrlList =
|
|
118
|
+
let testCasesUrlList = [];
|
|
88
119
|
logger_1.default.debug(`Trying to structure Test case for ${project} suite: ${suite.id}:${suite.name}`);
|
|
89
120
|
try {
|
|
90
|
-
if (!testCases) {
|
|
91
|
-
|
|
121
|
+
if (!testCases || !testCases.value || testCases.count === 0) {
|
|
122
|
+
logger_1.default.warn(`No test cases found for suite: ${suite.id}`);
|
|
123
|
+
return [];
|
|
92
124
|
}
|
|
93
125
|
for (let i = 0; i < testCases.count; i++) {
|
|
94
126
|
try {
|
|
@@ -96,7 +128,7 @@ class TestDataProvider {
|
|
|
96
128
|
let newurl = !(stepDetailObject === null || stepDetailObject === void 0 ? void 0 : stepDetailObject.testCaseRevision)
|
|
97
129
|
? testCases.value[i].testCase.url + '?$expand=All'
|
|
98
130
|
: `${testCases.value[i].testCase.url}/revisions/${stepDetailObject.testCaseRevision}?$expand=All`;
|
|
99
|
-
let test = await
|
|
131
|
+
let test = await this.fetchWithCache(newurl);
|
|
100
132
|
let testCase = new tfs_data_2.TestCase();
|
|
101
133
|
testCase.title = test.fields['System.Title'];
|
|
102
134
|
testCase.area = test.fields['System.AreaPath'];
|
|
@@ -119,7 +151,7 @@ class TestDataProvider {
|
|
|
119
151
|
// Only proceed if the URL contains 'workItems'
|
|
120
152
|
if (relation.url.includes('/workItems/')) {
|
|
121
153
|
try {
|
|
122
|
-
let relatedItemContent = await
|
|
154
|
+
let relatedItemContent = await this.fetchWithCache(relation.url);
|
|
123
155
|
// Check if the WorkItemType is "Requirement" before adding to relations
|
|
124
156
|
if (relatedItemContent.fields['System.WorkItemType'] === 'Requirement') {
|
|
125
157
|
const newRequirementRelation = this.createNewRequirement(CustomerRequirementId, relatedItemContent);
|
|
@@ -148,8 +180,8 @@ class TestDataProvider {
|
|
|
148
180
|
testCasesUrlList.push(testCase);
|
|
149
181
|
}
|
|
150
182
|
catch (_a) {
|
|
151
|
-
const errorMsg = `ran into an issue while
|
|
152
|
-
logger_1.default.error(`errorMsg`);
|
|
183
|
+
const errorMsg = `ran into an issue while retrieving testCase ${testCases.value[i].testCase.id}`;
|
|
184
|
+
logger_1.default.error(`Error: ${errorMsg}`);
|
|
153
185
|
throw new Error(errorMsg);
|
|
154
186
|
}
|
|
155
187
|
}
|
|
@@ -205,15 +237,13 @@ class TestDataProvider {
|
|
|
205
237
|
}
|
|
206
238
|
async GetTestCases(project, planId, suiteId) {
|
|
207
239
|
let testCaseUrl = this.orgUrl + project + '/_apis/test/Plans/' + planId + '/suites/' + suiteId + '/testcases/';
|
|
208
|
-
let testCases = await
|
|
240
|
+
let testCases = await this.fetchWithCache(testCaseUrl);
|
|
209
241
|
logger_1.default.debug(`test cases for plan ${planId} and ${suiteId} were ${testCases ? 'found' : 'not found'}`);
|
|
210
242
|
return testCases;
|
|
211
243
|
}
|
|
212
|
-
//gets all test point in a test case
|
|
213
244
|
async GetTestPoint(project, planId, suiteId, testCaseId) {
|
|
214
245
|
let testPointUrl = `${this.orgUrl}${project}/_apis/test/Plans/${planId}/Suites/${suiteId}/points?testCaseId=${testCaseId}`;
|
|
215
|
-
|
|
216
|
-
return testPoints;
|
|
246
|
+
return this.fetchWithCache(testPointUrl);
|
|
217
247
|
}
|
|
218
248
|
async CreateTestRun(projectName, testRunName, testPlanId, testPointId) {
|
|
219
249
|
try {
|
|
@@ -320,6 +350,13 @@ class TestDataProvider {
|
|
|
320
350
|
let res = await tfs_1.TFSServices.postRequest(url, this.token, 'Post', data, null);
|
|
321
351
|
return res;
|
|
322
352
|
}
|
|
353
|
+
/**
|
|
354
|
+
* Clears the cache to free memory
|
|
355
|
+
*/
|
|
356
|
+
clearCache() {
|
|
357
|
+
this.cache.clear();
|
|
358
|
+
logger_1.default.debug('Cache cleared');
|
|
359
|
+
}
|
|
323
360
|
}
|
|
324
361
|
exports.default = TestDataProvider;
|
|
325
362
|
//# sourceMappingURL=TestDataProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestDataProvider.js","sourceRoot":"","sources":["../../src/modules/TestDataProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TestDataProvider.js","sourceRoot":"","sources":["../../src/modules/TestDataProvider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/helpers/tfs.ts
CHANGED
|
@@ -1,16 +1,34 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
1
|
+
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
|
|
2
2
|
import logger from '../utils/logger';
|
|
3
3
|
|
|
4
4
|
export class TFSServices {
|
|
5
|
+
// Connection pooling
|
|
6
|
+
private static connectionPool = {
|
|
7
|
+
httpAgent: new (require('http').Agent)({
|
|
8
|
+
keepAlive: true,
|
|
9
|
+
maxSockets: 50, // Allow more connections
|
|
10
|
+
keepAliveMsecs: 30000, // Keep connections alive longer
|
|
11
|
+
}),
|
|
12
|
+
httpsAgent: new (require('https').Agent)({
|
|
13
|
+
keepAlive: true,
|
|
14
|
+
maxSockets: 50,
|
|
15
|
+
keepAliveMsecs: 30000,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Axios instance with connection reuse
|
|
20
|
+
private static axiosInstance: AxiosInstance = axios.create({
|
|
21
|
+
httpAgent: this.connectionPool.httpAgent,
|
|
22
|
+
httpsAgent: this.connectionPool.httpsAgent,
|
|
23
|
+
});
|
|
24
|
+
|
|
5
25
|
public static async downloadZipFile(url: string, pat: string): Promise<any> {
|
|
6
26
|
try {
|
|
7
|
-
|
|
27
|
+
const res = await this.axiosInstance.request({
|
|
8
28
|
url: url,
|
|
9
29
|
headers: { 'Content-Type': 'application/zip' },
|
|
10
|
-
auth: {
|
|
11
|
-
|
|
12
|
-
password: pat,
|
|
13
|
-
},
|
|
30
|
+
auth: { username: '', password: pat },
|
|
31
|
+
timeout: 15000, // Increased timeout for large files
|
|
14
32
|
});
|
|
15
33
|
return res;
|
|
16
34
|
} catch (e) {
|
|
@@ -27,52 +45,22 @@ export class TFSServices {
|
|
|
27
45
|
customHeaders: any = {},
|
|
28
46
|
printError: boolean = true
|
|
29
47
|
): Promise<any> {
|
|
30
|
-
|
|
48
|
+
const config: AxiosRequestConfig = {
|
|
31
49
|
headers: customHeaders,
|
|
32
50
|
method: requestMethod,
|
|
33
|
-
auth: {
|
|
34
|
-
username: '',
|
|
35
|
-
password: pat,
|
|
36
|
-
},
|
|
51
|
+
auth: { username: '', password: pat },
|
|
37
52
|
data: data,
|
|
38
53
|
responseType: 'arraybuffer', // Important for binary data
|
|
39
|
-
timeout:
|
|
54
|
+
timeout: 8000, // Increased timeout for images
|
|
40
55
|
};
|
|
41
|
-
let json;
|
|
42
|
-
let attempts = 0;
|
|
43
|
-
const maxAttempts = 3;
|
|
44
|
-
|
|
45
|
-
logger.silly(`making request:
|
|
46
|
-
url: ${url}
|
|
47
|
-
config: ${JSON.stringify(config)}`);
|
|
48
56
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const mimeType = contentType.split(';')[0].trim(); // Extracts "image/png"
|
|
57
|
-
return `data:${mimeType};base64,${base64String}`;
|
|
58
|
-
} catch (e: any) {
|
|
59
|
-
attempts++;
|
|
60
|
-
if (e.message.includes('ETIMEDOUT') && attempts < maxAttempts) {
|
|
61
|
-
logger.warn(`Request timed out. Retrying attempt ${attempts} of ${maxAttempts}...`);
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
if (printError) {
|
|
65
|
-
if (e.response) {
|
|
66
|
-
logger.error(`Error fetching image from Azure DevOps at ${url}: ${e.message}`);
|
|
67
|
-
logger.error(`Status: ${e.response.status}`);
|
|
68
|
-
logger.error(`Response Data: ${JSON.stringify(e.response.data)}`);
|
|
69
|
-
} else {
|
|
70
|
-
logger.error(`Error fetching image from Azure DevOps at ${url}: ${e.message}`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
throw e;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
57
|
+
return this.executeWithRetry(url, config, printError, (response) => {
|
|
58
|
+
// Convert binary data to Base64
|
|
59
|
+
const base64String = Buffer.from(response.data, 'binary').toString('base64');
|
|
60
|
+
const contentType = response.headers['content-type'] || 'application/octet-stream';
|
|
61
|
+
const mimeType = contentType.split(';')[0].trim();
|
|
62
|
+
return `data:${mimeType};base64,${base64String}`;
|
|
63
|
+
});
|
|
76
64
|
}
|
|
77
65
|
|
|
78
66
|
public static async getItemContent(
|
|
@@ -83,87 +71,37 @@ export class TFSServices {
|
|
|
83
71
|
customHeaders: any = {},
|
|
84
72
|
printError: boolean = true
|
|
85
73
|
): Promise<any> {
|
|
86
|
-
|
|
74
|
+
// Clean URL
|
|
75
|
+
const cleanUrl = url.replace(/ /g, '%20');
|
|
76
|
+
|
|
77
|
+
const config: AxiosRequestConfig = {
|
|
87
78
|
headers: customHeaders,
|
|
88
79
|
method: requestMethod,
|
|
89
|
-
auth: {
|
|
90
|
-
username: '',
|
|
91
|
-
password: pat,
|
|
92
|
-
},
|
|
80
|
+
auth: { username: '', password: pat },
|
|
93
81
|
data: data,
|
|
94
|
-
timeout:
|
|
82
|
+
timeout: 10000, // More reasonable timeout
|
|
95
83
|
};
|
|
96
|
-
let json;
|
|
97
|
-
let attempts = 0;
|
|
98
|
-
const maxAttempts = 3;
|
|
99
|
-
url = url.replace(/ /g, '%20');
|
|
100
|
-
logger.silly(`making request:
|
|
101
|
-
url: ${url}
|
|
102
|
-
config: ${JSON.stringify(config)}`);
|
|
103
|
-
|
|
104
|
-
while (attempts < maxAttempts) {
|
|
105
|
-
try {
|
|
106
|
-
let result = await axios(url, config);
|
|
107
|
-
json = JSON.parse(JSON.stringify(result.data));
|
|
108
|
-
return json;
|
|
109
|
-
} catch (e: any) {
|
|
110
|
-
logger.warn(`error fetching item content from azure devops at ${url}`);
|
|
111
|
-
logger.warn(`error: ${JSON.stringify(e.response?.data?.message)}`);
|
|
112
|
-
if (e.response?.data?.message.includes('could not be found')) {
|
|
113
|
-
logger.info(`File does not exist, or you do not have permissions to read it.`);
|
|
114
|
-
return undefined;
|
|
115
|
-
}
|
|
116
84
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
(e.response?.data?.message?.includes('timeout') && attempts < maxAttempts)
|
|
122
|
-
) {
|
|
123
|
-
logger.warn(`Request timed out. Retrying attempt ${attempts} of ${maxAttempts}...`);
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
if (printError) {
|
|
127
|
-
if (e.response) {
|
|
128
|
-
// Log detailed error information including the URL
|
|
129
|
-
logger.error(`Error making request to Azure DevOps at ${url}: ${e.message}`);
|
|
130
|
-
logger.error(`Status: ${e.response.status}`);
|
|
131
|
-
logger.error(`Response Data: ${JSON.stringify(e.response.data?.message)}`);
|
|
132
|
-
} else {
|
|
133
|
-
// Handle other errors (network, etc.)
|
|
134
|
-
logger.error(`Error making request to Azure DevOps at ${url}: ${e.message}`);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
throw e;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
85
|
+
return this.executeWithRetry(cleanUrl, config, printError, (response) => {
|
|
86
|
+
// Direct return of data without extra JSON parsing
|
|
87
|
+
return response.data;
|
|
88
|
+
});
|
|
140
89
|
}
|
|
141
90
|
|
|
142
91
|
public static async getJfrogRequest(url: string, header?: any) {
|
|
143
|
-
|
|
92
|
+
const config: AxiosRequestConfig = {
|
|
144
93
|
method: 'GET',
|
|
94
|
+
headers: header,
|
|
95
|
+
timeout: 8000, // Reasonable timeout
|
|
145
96
|
};
|
|
146
|
-
if (header) {
|
|
147
|
-
config['headers'] = header;
|
|
148
|
-
}
|
|
149
97
|
|
|
150
|
-
let json;
|
|
151
98
|
try {
|
|
152
|
-
|
|
153
|
-
|
|
99
|
+
const result = await this.axiosInstance.request(config);
|
|
100
|
+
return result.data;
|
|
154
101
|
} catch (e: any) {
|
|
155
|
-
|
|
156
|
-
// Log detailed error information including the URL
|
|
157
|
-
logger.error(`Error making request Jfrog at ${url}: ${e.message}`);
|
|
158
|
-
logger.error(`Status: ${e.response.status}`);
|
|
159
|
-
logger.error(`Response Data: ${JSON.stringify(e.response.data)}`);
|
|
160
|
-
} else {
|
|
161
|
-
// Handle other errors (network, etc.)
|
|
162
|
-
logger.error(`Error making request to Jfrog at ${url}: ${e.message}`);
|
|
163
|
-
}
|
|
102
|
+
this.logDetailedError(e, url);
|
|
164
103
|
throw e;
|
|
165
104
|
}
|
|
166
|
-
return json;
|
|
167
105
|
}
|
|
168
106
|
|
|
169
107
|
public static async postRequest(
|
|
@@ -173,32 +111,129 @@ export class TFSServices {
|
|
|
173
111
|
data: any,
|
|
174
112
|
customHeaders: any = { headers: { 'Content-Type': 'application/json' } }
|
|
175
113
|
): Promise<any> {
|
|
176
|
-
|
|
114
|
+
const config: AxiosRequestConfig = {
|
|
177
115
|
headers: customHeaders,
|
|
178
116
|
method: requestMethod,
|
|
179
|
-
auth: {
|
|
180
|
-
username: '',
|
|
181
|
-
password: pat,
|
|
182
|
-
},
|
|
117
|
+
auth: { username: '', password: pat },
|
|
183
118
|
data: data,
|
|
119
|
+
timeout: 10000, // More reasonable timeout
|
|
184
120
|
};
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
121
|
+
|
|
122
|
+
// Use shorter log format for better performance
|
|
123
|
+
logger.silly(`Request: ${url} [${requestMethod}]`);
|
|
124
|
+
|
|
189
125
|
try {
|
|
190
|
-
result = await
|
|
126
|
+
const result = await this.axiosInstance.request(config);
|
|
127
|
+
return result;
|
|
191
128
|
} catch (e: any) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
129
|
+
this.logDetailedError(e, url);
|
|
130
|
+
throw e;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Execute a request with intelligent retry logic
|
|
136
|
+
*/
|
|
137
|
+
private static async executeWithRetry(
|
|
138
|
+
url: string,
|
|
139
|
+
config: AxiosRequestConfig,
|
|
140
|
+
printError: boolean,
|
|
141
|
+
responseProcessor: (response: any) => any
|
|
142
|
+
): Promise<any> {
|
|
143
|
+
let attempts = 0;
|
|
144
|
+
const maxAttempts = 3;
|
|
145
|
+
const baseDelay = 500; // Start with 500ms delay
|
|
146
|
+
|
|
147
|
+
while (true) {
|
|
148
|
+
try {
|
|
149
|
+
const result = await this.axiosInstance.request({ ...config, url });
|
|
150
|
+
return responseProcessor(result);
|
|
151
|
+
} catch (e: any) {
|
|
152
|
+
attempts++;
|
|
153
|
+
const errorMessage = this.getErrorMessage(e);
|
|
154
|
+
|
|
155
|
+
// Handle not found errors
|
|
156
|
+
if (errorMessage.includes('could not be found')) {
|
|
157
|
+
logger.info(`File does not exist, or you do not have permissions to read it.`);
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Check if we should retry
|
|
162
|
+
if (attempts < maxAttempts && this.isRetryableError(e)) {
|
|
163
|
+
// Calculate exponential backoff with jitter
|
|
164
|
+
const jitter = Math.random() * 0.3 + 0.85; // Between 0.85 and 1.15
|
|
165
|
+
const delay = Math.min(baseDelay * Math.pow(2, attempts - 1) * jitter, 5000);
|
|
166
|
+
|
|
167
|
+
logger.warn(`Request failed. Retrying in ${Math.round(delay)}ms (${attempts}/${maxAttempts})`);
|
|
168
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Log error if needed
|
|
173
|
+
if (printError) {
|
|
174
|
+
this.logDetailedError(e, url);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
throw e;
|
|
200
178
|
}
|
|
201
179
|
}
|
|
202
|
-
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Check if an error is retryable
|
|
184
|
+
*/
|
|
185
|
+
private static isRetryableError(error: any): boolean {
|
|
186
|
+
// Network errors
|
|
187
|
+
if (error.code === 'ECONNRESET' || error.code === 'ETIMEDOUT' || error.message.includes('timeout')) {
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Server errors (5xx)
|
|
192
|
+
if (error.response?.status >= 500) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Rate limiting (429)
|
|
197
|
+
if (error.response?.status === 429) {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Log detailed error information
|
|
206
|
+
*/
|
|
207
|
+
private static logDetailedError(error: any, url: string): void {
|
|
208
|
+
if (error.response) {
|
|
209
|
+
logger.error(`Error for ${url}: ${error.message}`);
|
|
210
|
+
logger.error(`Status: ${error.response.status}`);
|
|
211
|
+
|
|
212
|
+
if (error.response.data) {
|
|
213
|
+
if (typeof error.response.data === 'string') {
|
|
214
|
+
logger.error(`Response: ${error.response.data.substring(0, 200)}`);
|
|
215
|
+
} else {
|
|
216
|
+
const dataMessage =
|
|
217
|
+
error.response.data.message || JSON.stringify(error.response.data).substring(0, 200);
|
|
218
|
+
logger.error(`Response: ${dataMessage}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
} else {
|
|
222
|
+
logger.error(`Error for ${url}: ${error.message}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private static getErrorMessage(error: any): string {
|
|
227
|
+
if (error.response?.data?.message) {
|
|
228
|
+
return JSON.stringify(error.response.data.message);
|
|
229
|
+
} else if (error.response?.data) {
|
|
230
|
+
return JSON.stringify(error.response.data);
|
|
231
|
+
} else if (error.response) {
|
|
232
|
+
return `HTTP ${error.response.status}`;
|
|
233
|
+
} else if (error.message) {
|
|
234
|
+
return error.message;
|
|
235
|
+
} else {
|
|
236
|
+
return 'Unknown error occurred';
|
|
237
|
+
}
|
|
203
238
|
}
|
|
204
239
|
}
|