diff options
Diffstat (limited to 'server/helpers/requests.ts')
-rw-r--r-- | server/helpers/requests.ts | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/server/helpers/requests.ts b/server/helpers/requests.ts index 57299eee1..6e80995ad 100644 --- a/server/helpers/requests.ts +++ b/server/helpers/requests.ts | |||
@@ -6,9 +6,11 @@ import { CONFIG } from '../initializers/config' | |||
6 | import { ACTIVITY_PUB, BINARY_CONTENT_TYPES, PEERTUBE_VERSION, REQUEST_TIMEOUT, WEBSERVER } from '../initializers/constants' | 6 | import { ACTIVITY_PUB, BINARY_CONTENT_TYPES, PEERTUBE_VERSION, REQUEST_TIMEOUT, WEBSERVER } from '../initializers/constants' |
7 | import { pipelinePromise } from './core-utils' | 7 | import { pipelinePromise } from './core-utils' |
8 | import { processImage } from './image-utils' | 8 | import { processImage } from './image-utils' |
9 | import { logger } from './logger' | 9 | import { logger, loggerTagsFactory } from './logger' |
10 | import { getProxy, isProxyEnabled } from './proxy' | 10 | import { getProxy, isProxyEnabled } from './proxy' |
11 | 11 | ||
12 | const lTags = loggerTagsFactory('request') | ||
13 | |||
12 | const httpSignature = require('@peertube/http-signature') | 14 | const httpSignature = require('@peertube/http-signature') |
13 | 15 | ||
14 | export interface PeerTubeRequestError extends Error { | 16 | export interface PeerTubeRequestError extends Error { |
@@ -48,7 +50,7 @@ const peertubeGot = got.extend({ | |||
48 | promiseOrStream.on('downloadProgress', progress => { | 50 | promiseOrStream.on('downloadProgress', progress => { |
49 | if (progress.transferred > bodyLimit && progress.percent !== 1) { | 51 | if (progress.transferred > bodyLimit && progress.percent !== 1) { |
50 | const message = `Exceeded the download limit of ${bodyLimit} B` | 52 | const message = `Exceeded the download limit of ${bodyLimit} B` |
51 | logger.warn(message) | 53 | logger.warn(message, lTags()) |
52 | 54 | ||
53 | // CancelableRequest | 55 | // CancelableRequest |
54 | if (promiseOrStream.cancel) { | 56 | if (promiseOrStream.cancel) { |
@@ -105,6 +107,7 @@ function doRequest (url: string, options: PeerTubeRequestOptions = {}) { | |||
105 | const gotOptions = buildGotOptions(options) | 107 | const gotOptions = buildGotOptions(options) |
106 | 108 | ||
107 | return peertubeGot(url, gotOptions) | 109 | return peertubeGot(url, gotOptions) |
110 | .on('retry', logRetryFactory(url)) | ||
108 | .catch(err => { throw buildRequestError(err) }) | 111 | .catch(err => { throw buildRequestError(err) }) |
109 | } | 112 | } |
110 | 113 | ||
@@ -112,6 +115,7 @@ function doJSONRequest <T> (url: string, options: PeerTubeRequestOptions = {}) { | |||
112 | const gotOptions = buildGotOptions(options) | 115 | const gotOptions = buildGotOptions(options) |
113 | 116 | ||
114 | return peertubeGot<T>(url, { ...gotOptions, responseType: 'json' }) | 117 | return peertubeGot<T>(url, { ...gotOptions, responseType: 'json' }) |
118 | .on('retry', logRetryFactory(url)) | ||
115 | .catch(err => { throw buildRequestError(err) }) | 119 | .catch(err => { throw buildRequestError(err) }) |
116 | } | 120 | } |
117 | 121 | ||
@@ -131,7 +135,7 @@ async function doRequestAndSaveToFile ( | |||
131 | ) | 135 | ) |
132 | } catch (err) { | 136 | } catch (err) { |
133 | remove(destPath) | 137 | remove(destPath) |
134 | .catch(err => logger.error('Cannot remove %s after request failure.', destPath, { err })) | 138 | .catch(err => logger.error('Cannot remove %s after request failure.', destPath, { err, ...lTags() })) |
135 | 139 | ||
136 | throw buildRequestError(err) | 140 | throw buildRequestError(err) |
137 | } | 141 | } |
@@ -157,7 +161,7 @@ function getAgent () { | |||
157 | 161 | ||
158 | const proxy = getProxy() | 162 | const proxy = getProxy() |
159 | 163 | ||
160 | logger.info('Using proxy %s.', proxy) | 164 | logger.info('Using proxy %s.', proxy, lTags()) |
161 | 165 | ||
162 | const proxyAgentOptions = { | 166 | const proxyAgentOptions = { |
163 | keepAlive: true, | 167 | keepAlive: true, |
@@ -229,6 +233,7 @@ function buildGotOptions (options: PeerTubeRequestOptions) { | |||
229 | timeout: REQUEST_TIMEOUT, | 233 | timeout: REQUEST_TIMEOUT, |
230 | json: options.json, | 234 | json: options.json, |
231 | searchParams: options.searchParams, | 235 | searchParams: options.searchParams, |
236 | retry: 2, | ||
232 | headers, | 237 | headers, |
233 | context | 238 | context |
234 | } | 239 | } |
@@ -246,3 +251,9 @@ function buildRequestError (error: RequestError) { | |||
246 | 251 | ||
247 | return newError | 252 | return newError |
248 | } | 253 | } |
254 | |||
255 | function logRetryFactory (url: string) { | ||
256 | return (retryCount: number, error: RequestError) => { | ||
257 | logger.debug('Retrying request to %s.', url, { retryCount, error, ...lTags() }) | ||
258 | } | ||
259 | } | ||