From b83565b135a41449ff98586a989e7eb9fe317a51 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 24 Feb 2023 15:58:31 +0100 Subject: [PATCH] Improve network requests logging (#175258) (#175325) --- src/vs/code/node/cliProcessMain.ts | 2 -- .../electron-main/nativeHostMainService.ts | 7 ++--- .../request/browser/requestService.ts | 10 +++--- .../platform/request/node/requestService.ts | 31 ++++++++++--------- .../node/remoteExtensionHostAgentCli.ts | 1 + 5 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index dff743e9eac..bf01f4d1811 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -142,8 +142,6 @@ class CliMain extends Disposable { const diskFileSystemProvider = this._register(new DiskFileSystemProvider(logService)); fileService.registerProvider(Schemas.file, diskFileSystemProvider); - // State - // Uri Identity const uriIdentityService = new UriIdentityService(fileService); services.set(IUriIdentityService, uriIdentityService); diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts index 91e1efc080f..70781f7fa86 100644 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts @@ -730,11 +730,8 @@ export class NativeHostMainService extends Disposable implements INativeHostMain async resolveProxy(windowId: number | undefined, url: string): Promise { const window = this.windowById(windowId); const session = window?.win?.webContents?.session; - if (session) { - return session.resolveProxy(url); - } else { - return undefined; - } + + return session?.resolveProxy(url); } findFreePort(windowId: number | undefined, startPort: number, giveUpAfter: number, timeout: number, stride = 1): Promise { diff --git a/src/vs/platform/request/browser/requestService.ts b/src/vs/platform/request/browser/requestService.ts index 09c9baec136..95b0c28df12 100644 --- a/src/vs/platform/request/browser/requestService.ts +++ b/src/vs/platform/request/browser/requestService.ts @@ -25,20 +25,20 @@ export class RequestService implements IRequestService { } async request(options: IRequestOptions, token: CancellationToken): Promise { - this.logService.trace('RequestService#request (browser) - begin', options.url); + this.logService.trace(`RequestService#request (browser) - begin: ${options.type} ${options.url}`); if (!options.proxyAuthorization) { options.proxyAuthorization = this.configurationService.getValue('http.proxyAuthorization'); } try { - const res = await request(options, token); + const result = await request(options, token); - this.logService.trace('RequestService#request (browser) - success', options.url); + this.logService.trace(`RequestService#request (browser) - end: ${options.type} ${options.url} ${result.res.statusCode}`); - return res; + return result; } catch (error) { - this.logService.error('RequestService#request (browser) - error', options.url, error); + this.logService.error(`RequestService#request (browser) - error: ${options.type} ${options.url} ${error}`); throw error; } diff --git a/src/vs/platform/request/node/requestService.ts b/src/vs/platform/request/node/requestService.ts index 3cab0d4fd07..684f2644397 100644 --- a/src/vs/platform/request/node/requestService.ts +++ b/src/vs/platform/request/node/requestService.ts @@ -68,13 +68,14 @@ export class RequestService extends Disposable implements IRequestService { private configure() { const config = this.configurationService.getValue('http'); + this.proxyUrl = config?.proxy; this.strictSSL = !!config?.proxyStrictSSL; this.authorization = config?.proxyAuthorization; } async request(options: NodeRequestOptions, token: CancellationToken): Promise { - this.logService.trace('RequestService#request (node) - begin', options.url); + this.logService.trace(`RequestService#request (${options.isChromiumNetwork ? 'electron' : 'nodejs'}) - begin: ${options.type} ${options.url}`); const { proxyUrl, strictSSL } = this; @@ -84,7 +85,7 @@ export class RequestService extends Disposable implements IRequestService { } catch (error) { if (!this.shellEnvErrorLogged) { this.shellEnvErrorLogged = true; - this.logService.error('RequestService#request (node) resolving shell environment failed', error); + this.logService.error(`RequestService#request (${options.isChromiumNetwork ? 'electron' : 'nodejs'}) - resolving shell environment failed: ${error}`); } } @@ -105,13 +106,13 @@ export class RequestService extends Disposable implements IRequestService { } try { - const res = await this._request(options, token); + const result = await this.doRequest(options, token); - this.logService.trace('RequestService#request (node) - success', options.url); + this.logService.trace(`RequestService#request (${options.isChromiumNetwork ? 'electron' : 'nodejs'}) - end: ${options.type} ${options.url} ${result.res.statusCode}`); - return res; + return result; } catch (error) { - this.logService.trace('RequestService#request (node) - error', options.url, error); + this.logService.error(`RequestService#request (${options.isChromiumNetwork ? 'electron' : 'nodejs'}) - error: ${options.type} ${options.url} ${error}`); throw error; } @@ -120,13 +121,12 @@ export class RequestService extends Disposable implements IRequestService { private async getNodeRequest(options: IRequestOptions): Promise { const endpoint = parseUrl(options.url!); const module = endpoint.protocol === 'https:' ? await import('https') : await import('http'); + return module.request; } - private _request(options: NodeRequestOptions, token: CancellationToken): Promise { - - return Promises.withAsyncBody(async (c, e) => { - + private doRequest(options: NodeRequestOptions, token: CancellationToken): Promise { + return Promises.withAsyncBody(async (resolve, reject) => { const endpoint = parseUrl(options.url!); const rawRequest = options.getRawRequest ? options.getRawRequest(options) @@ -150,11 +150,11 @@ export class RequestService extends Disposable implements IRequestService { const req = rawRequest(opts, (res: http.IncomingMessage) => { const followRedirects: number = isNumber(options.followRedirects) ? options.followRedirects : 3; if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && followRedirects > 0 && res.headers['location']) { - this._request({ + this.doRequest({ ...options, url: res.headers['location'], followRedirects: followRedirects - 1 - }, token).then(c, e); + }, token).then(resolve, reject); } else { let stream: streams.ReadableStreamEvents = res; @@ -167,11 +167,11 @@ export class RequestService extends Disposable implements IRequestService { stream = res.pipe(createGunzip()); } - c({ res, stream: streamToBufferReadableStream(stream) } as IRequestContext); + resolve({ res, stream: streamToBufferReadableStream(stream) } as IRequestContext); } }); - req.on('error', e); + req.on('error', reject); if (options.timeout) { req.setTimeout(options.timeout); @@ -194,7 +194,8 @@ export class RequestService extends Disposable implements IRequestService { token.onCancellationRequested(() => { req.abort(); - e(new CancellationError()); + + reject(new CancellationError()); }); }); } diff --git a/src/vs/server/node/remoteExtensionHostAgentCli.ts b/src/vs/server/node/remoteExtensionHostAgentCli.ts index f3512d89ed3..c0a770ad3aa 100644 --- a/src/vs/server/node/remoteExtensionHostAgentCli.ts +++ b/src/vs/server/node/remoteExtensionHostAgentCli.ts @@ -85,6 +85,7 @@ class CliMain extends Disposable { const environmentService = new ServerEnvironmentService(this.args, productService); services.set(IServerEnvironmentService, environmentService); + const logService = new LogService(new SpdLogLogger(RemoteExtensionLogFileName, join(environmentService.logsPath, `${RemoteExtensionLogFileName}.log`), true, false, getLogLevel(environmentService))); services.set(ILogService, logService); logService.trace(`Remote configuration data at ${this.remoteDataFolder}`);