aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/helpers/requests.ts
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-11-16 11:17:52 +0100
committerChocobozzz <me@florianbigard.com>2021-11-16 11:34:24 +0100
commit3455c2656e257ae3d9b4169af58b6889d9904148 (patch)
tree72ef7035ffd9030cffe8e73d7c1265241c120173 /server/helpers/requests.ts
parentac03618098e430acb21c075bdba57ce6d377b12d (diff)
downloadPeerTube-3455c2656e257ae3d9b4169af58b6889d9904148.tar.gz
PeerTube-3455c2656e257ae3d9b4169af58b6889d9904148.tar.zst
PeerTube-3455c2656e257ae3d9b4169af58b6889d9904148.zip
Test and log request retries
Diffstat (limited to 'server/helpers/requests.ts')
-rw-r--r--server/helpers/requests.ts18
1 files changed, 9 insertions, 9 deletions
diff --git a/server/helpers/requests.ts b/server/helpers/requests.ts
index 6e80995ad..fc77ebd35 100644
--- a/server/helpers/requests.ts
+++ b/server/helpers/requests.ts
@@ -1,5 +1,5 @@
1import { createWriteStream, remove } from 'fs-extra' 1import { createWriteStream, remove } from 'fs-extra'
2import got, { CancelableRequest, Options as GotOptions, RequestError, Response } from 'got' 2import got, { CancelableRequest, NormalizedOptions, Options as GotOptions, RequestError, Response } from 'got'
3import { HttpProxyAgent, HttpsProxyAgent } from 'hpagent' 3import { HttpProxyAgent, HttpsProxyAgent } from 'hpagent'
4import { join } from 'path' 4import { join } from 'path'
5import { CONFIG } from '../initializers/config' 5import { CONFIG } from '../initializers/config'
@@ -16,6 +16,7 @@ const httpSignature = require('@peertube/http-signature')
16export interface PeerTubeRequestError extends Error { 16export interface PeerTubeRequestError extends Error {
17 statusCode?: number 17 statusCode?: number
18 responseBody?: any 18 responseBody?: any
19 responseHeaders?: any
19} 20}
20 21
21type PeerTubeRequestOptions = { 22type PeerTubeRequestOptions = {
@@ -99,6 +100,12 @@ const peertubeGot = got.extend({
99 }, httpSignatureOptions) 100 }, httpSignatureOptions)
100 } 101 }
101 } 102 }
103 ],
104
105 beforeRetry: [
106 (_options: NormalizedOptions, error: RequestError, retryCount: number) => {
107 logger.debug('Retrying request to %s.', error.request.requestUrl, { retryCount, error: buildRequestError(error), ...lTags() })
108 }
102 ] 109 ]
103 } 110 }
104}) 111})
@@ -107,7 +114,6 @@ function doRequest (url: string, options: PeerTubeRequestOptions = {}) {
107 const gotOptions = buildGotOptions(options) 114 const gotOptions = buildGotOptions(options)
108 115
109 return peertubeGot(url, gotOptions) 116 return peertubeGot(url, gotOptions)
110 .on('retry', logRetryFactory(url))
111 .catch(err => { throw buildRequestError(err) }) 117 .catch(err => { throw buildRequestError(err) })
112} 118}
113 119
@@ -115,7 +121,6 @@ function doJSONRequest <T> (url: string, options: PeerTubeRequestOptions = {}) {
115 const gotOptions = buildGotOptions(options) 121 const gotOptions = buildGotOptions(options)
116 122
117 return peertubeGot<T>(url, { ...gotOptions, responseType: 'json' }) 123 return peertubeGot<T>(url, { ...gotOptions, responseType: 'json' })
118 .on('retry', logRetryFactory(url))
119 .catch(err => { throw buildRequestError(err) }) 124 .catch(err => { throw buildRequestError(err) })
120} 125}
121 126
@@ -246,14 +251,9 @@ function buildRequestError (error: RequestError) {
246 251
247 if (error.response) { 252 if (error.response) {
248 newError.responseBody = error.response.body 253 newError.responseBody = error.response.body
254 newError.responseHeaders = error.response.headers
249 newError.statusCode = error.response.statusCode 255 newError.statusCode = error.response.statusCode
250 } 256 }
251 257
252 return newError 258 return newError
253} 259}
254
255function logRetryFactory (url: string) {
256 return (retryCount: number, error: RequestError) => {
257 logger.debug('Retrying request to %s.', url, { retryCount, error, ...lTags() })
258 }
259}