This commit is contained in:
xiaojunnuo
2024-10-31 10:32:05 +08:00
parent f92935d93f
commit ee65c9f47d
10 changed files with 140 additions and 49 deletions

View File

@@ -42,19 +42,20 @@ function setGlobalProxy(opts) {
}
class HttpError extends Error {
// eslint-disable-next-line constructor-super
constructor(error) {
super(error || error.message);
if (!error) {
return;
}
super(error.message);
if (error.message.indexOf('ssl3_get_record:wrong version number') >= 0) {
this.message = error.message;
if (this.message && this.message.indexOf('ssl3_get_record:wrong version number') >= 0) {
this.message = 'http协议错误服务端要求http协议请检查是否使用了https请求';
}
this.name = error.name;
this.code = error.code;
this.cause = error.cause;
if (error.response) {
this.status = error.response.status;
@@ -62,6 +63,9 @@ class HttpError extends Error {
this.response = {
data: error.response.data,
};
if (!this.message) {
this.message = this.statusText;
}
}
let url = '';
@@ -73,12 +77,18 @@ class HttpError extends Error {
params: error.config.params,
data: error.config.data,
};
url = error.config.baseURL + error.config.url;
url = (error.config.baseURL || '') + error.config.url;
}
if (url) {
this.message = `${this.message}:${url}`;
}
// const { stack, cause } = error;
delete this.cause;
delete this.stack;
// this.cause = cause;
// this.stack = stack;
delete error.stack;
delete error.cause;
delete error.response;
delete error.config;
delete error.request;

View File

@@ -114,17 +114,19 @@ instance.interceptors.response.use(null, async (error) => {
const code = response ? `HTTP ${response.status}` : error.code;
log(`Caught ${code}, retry attempt ${config.retryAttempt}/${retryMaxAttempts} to URL ${config.url}`);
const retryAfter = (retryDefaultDelay * config.retryAttempt);
/* Attempt to parse Retry-After header, fallback to default delay */
let retryAfter = response ? parseRetryAfterHeader(response.headers['retry-after']) : 0;
const headerRetryAfter = response ? parseRetryAfterHeader(response.headers['retry-after']) : 0;
if (retryAfter > 0) {
log(`Found retry-after response header with value: ${response.headers['retry-after']}, waiting ${retryAfter} seconds`);
}
else {
retryAfter = (retryDefaultDelay * config.retryAttempt);
log(`Unable to locate or parse retry-after response header, waiting ${retryAfter} seconds`);
if (headerRetryAfter > 0) {
const waitMinutes = (headerRetryAfter / 60).toFixed(1);
log(`Found retry-after response header with value: ${response.headers['retry-after']}, waiting ${waitMinutes} minutes`);
log(JSON.stringify(response.data));
return Promise.reject(new Agents.HttpError(error));
}
log(`waiting ${retryAfter} seconds`);
/* Wait and retry the request */
await new Promise((resolve) => { setTimeout(resolve, (retryAfter * 1000)); });
return instance(config);

View File

@@ -17,7 +17,7 @@ export class HttpError extends Error {
if (!error) {
return;
}
super(error.message);
super(error.message || error.response?.statusText);
if (error?.message?.indexOf('ssl3_get_record:wrong version number') >= 0) {
this.message = 'http协议错误服务端要求http协议请检查是否使用了https请求';
@@ -25,7 +25,6 @@ export class HttpError extends Error {
this.name = error.name;
this.code = error.code;
this.cause = error.cause;
this.status = error.response?.status;
this.statusText = error.response?.statusText;
@@ -38,7 +37,7 @@ export class HttpError extends Error {
};
let url = error.config?.url;
if (error.config?.baseURL) {
url = error.config?.baseURL + url;
url = (error.config?.baseURL || '') + url;
}
if (url) {
this.message = `${this.message} : url=${url}`;
@@ -48,6 +47,9 @@ export class HttpError extends Error {
data: error.response?.data,
};
// const { stack, cause } = error;
// this.cause = cause;
// this.stack = stack;
delete error.response;
delete error.config;
delete error.request;

View File

@@ -117,7 +117,8 @@ export class RunHistory {
}
logError(runnable: Runnable, e: Error) {
// @ts-ignore
delete e.stack;
delete e.cause;
const errorInfo = runnable.runnableType === "step" ? e : e.message;
this._loggers[runnable.id].error(`[${runnable.runnableType}] [${runnable.title}]<id:${runnable.id}> `, errorInfo);
}