Skip to content

Commit cc8c3f7

Browse files
committed
Add timeout option to API requests and update monitor configurations
1 parent e2ef8ae commit cc8c3f7

File tree

4 files changed

+29
-5
lines changed

4 files changed

+29
-5
lines changed

Common/Utils/API.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import URL from "../Types/API/URL";
1111
import Dictionary from "../Types/Dictionary";
1212
import APIException from "../Types/Exception/ApiException";
1313
import { JSONArray, JSONObject } from "../Types/JSON";
14-
import axios, { AxiosError, AxiosResponse } from "axios";
14+
import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from "axios";
1515
import Sleep from "../Types/Sleep";
1616

1717
export interface RequestOptions {
1818
retries?: number | undefined;
1919
exponentialBackoff?: boolean | undefined;
20+
timeout?: number | undefined;
2021
}
2122

2223
export default class API {
@@ -383,12 +384,18 @@ export default class API {
383384
while (currentRetry <= maxRetries) {
384385
currentRetry++;
385386
try {
386-
result = await axios({
387+
const axiosOptions: AxiosRequestConfig = {
387388
method: method,
388389
url: url.toString(),
389390
headers: finalHeaders,
390391
data: finalBody,
391-
});
392+
};
393+
394+
if (options?.timeout) {
395+
axiosOptions.timeout = options.timeout;
396+
}
397+
398+
result = await axios(axiosOptions);
392399

393400
break;
394401
} catch (e) {

Probe/Utils/Monitors/Monitor.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import API from "Common/Utils/API";
2929
import LocalCache from "Common/Server/Infrastructure/LocalCache";
3030
import logger from "Common/Server/Utils/Logger";
3131
import Monitor from "Common/Models/DatabaseModels/Monitor";
32+
import PositiveNumber from "Common/Types/PositiveNumber";
3233

3334
export default class MonitorUtil {
3435
public static async probeMonitor(
@@ -151,6 +152,7 @@ export default class MonitorUtil {
151152
{
152153
retry: 5,
153154
monitorId: monitor.id!,
155+
timeout: new PositiveNumber(60000), // 60 seconds
154156
},
155157
);
156158

@@ -167,6 +169,7 @@ export default class MonitorUtil {
167169
{
168170
retry: 5,
169171
monitorId: monitor.id!,
172+
timeout: new PositiveNumber(60000), // 60 seconds
170173
},
171174
);
172175

@@ -203,6 +206,7 @@ export default class MonitorUtil {
203206
{
204207
retry: 5,
205208
monitorId: monitor.id!,
209+
timeout: new PositiveNumber(60000), // 60 seconds
206210
},
207211
);
208212

@@ -278,6 +282,7 @@ export default class MonitorUtil {
278282
{
279283
retry: 5,
280284
monitorId: monitor.id!,
285+
timeout: new PositiveNumber(60000), // 60 seconds
281286
},
282287
);
283288

@@ -305,6 +310,7 @@ export default class MonitorUtil {
305310
isHeadRequest: MonitorUtil.isHeadRequest(monitorStep),
306311
monitorId: monitor.id!,
307312
retry: 5,
313+
timeout: new PositiveNumber(60000), // 60 seconds
308314
},
309315
);
310316

@@ -345,6 +351,7 @@ export default class MonitorUtil {
345351
monitorId: monitor.id!,
346352
requestType: monitorStep.data?.requestType || HTTPMethod.GET,
347353
retry: 5,
354+
timeout: new PositiveNumber(60000), // 60 seconds
348355
},
349356
);
350357

Probe/Utils/Monitors/MonitorTypes/ApiMonitor.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export default class ApiMonitor {
3636
currentRetryCount?: number | undefined;
3737
monitorId?: ObjectID | undefined;
3838
isOnlineCheckRequest?: boolean | undefined;
39+
timeout?: PositiveNumber; // timeout in milliseconds
3940
},
4041
): Promise<APIResponse | null> {
4142
if (!options) {
@@ -62,6 +63,10 @@ export default class ApiMonitor {
6263
url,
6364
options.requestBody || undefined,
6465
options.requestHeaders || undefined,
66+
undefined,
67+
{
68+
timeout: options.timeout?.toNumber() || 5000,
69+
},
6570
);
6671

6772
if (
@@ -75,6 +80,10 @@ export default class ApiMonitor {
7580
url,
7681
options.requestBody || undefined,
7782
options.requestHeaders || undefined,
83+
undefined,
84+
{
85+
timeout: options.timeout?.toNumber() || 5000,
86+
},
7887
);
7988
}
8089

Probe/Utils/Monitors/MonitorTypes/WebsiteMonitor.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export default class WebsiteMonitor {
3333
currentRetryCount?: number | undefined;
3434
monitorId?: ObjectID | undefined;
3535
isOnlineCheckRequest?: boolean | undefined;
36+
timeout?: PositiveNumber; // timeout in milliseconds
3637
},
3738
): Promise<ProbeWebsiteResponse | null> {
3839
if (!options) {
@@ -59,7 +60,7 @@ export default class WebsiteMonitor {
5960
let startTime: [number, number] = process.hrtime();
6061
let result: WebsiteResponse = await WebsiteRequest.fetch(url, {
6162
isHeadRequest: options.isHeadRequest,
62-
timeout: 30000,
63+
timeout: options.timeout?.toNumber() || 5000,
6364
});
6465

6566
if (
@@ -70,7 +71,7 @@ export default class WebsiteMonitor {
7071
startTime = process.hrtime();
7172
result = await WebsiteRequest.fetch(url, {
7273
isHeadRequest: false,
73-
timeout: 30000,
74+
timeout: options.timeout?.toNumber() || 5000,
7475
});
7576
}
7677

0 commit comments

Comments
 (0)