From 75a03bdecf8fa92c819bcd74dae9c900ee03a045 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Wed, 28 Sep 2016 14:37:51 +0200 Subject: [PATCH] fixes #11779 --- src/vs/base/common/errors.ts | 16 ++++++++++++++++ .../node/extensionGalleryService.ts | 13 ++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/vs/base/common/errors.ts b/src/vs/base/common/errors.ts index ee0a4c84e79..33f9a32b6e1 100644 --- a/src/vs/base/common/errors.ts +++ b/src/vs/base/common/errors.ts @@ -168,4 +168,20 @@ export function create(message: string, options: IErrorOptions = {}): Error { } return result; +} + +export function getErrorMessage(err: any): string { + if (!err) { + return 'Error'; + } + + if (err.message) { + return err.message; + } + + if (err.stack) { + return err.stack.split('\n')[0]; + } + + return String(err); } \ No newline at end of file diff --git a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts index 46d64cc3f90..17879689c42 100644 --- a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts @@ -8,6 +8,7 @@ import { tmpdir } from 'os'; import * as path from 'path'; import { TPromise } from 'vs/base/common/winjs.base'; import { distinct } from 'vs/base/common/arrays'; +import { getErrorMessage } from 'vs/base/common/errors'; import { ArraySet } from 'vs/base/common/set'; import { IGalleryExtension, IExtensionGalleryService, IQueryOptions, SortBy, SortOrder, IExtensionManifest } from 'vs/platform/extensionManagement/common/extensionManagement'; import { getGalleryExtensionTelemetryData } from 'vs/platform/extensionManagement/common/extensionTelemetry'; @@ -489,12 +490,18 @@ export class ExtensionGalleryService implements IExtensionGalleryService { parsedUrl.query['redirect'] = 'true'; const cdnUrl = url.format(parsedUrl); + const cdnOptions = assign({}, options, { url: cdnUrl }); - return this.requestService.request(assign({}, options, { url: cdnUrl })) + return this.requestService.request(cdnOptions) .then(context => context.res.statusCode === 200 ? context : TPromise.wrapError('expected 200')) - .then(null, () => { + .then(null, err => { + this.telemetryService.publicLog('galleryService:requestError', { cdn: true, message: getErrorMessage(err) }); this.telemetryService.publicLog('galleryService:cdnFallback', { url: cdnUrl }); - return this.requestService.request(options); + + return this.requestService.request(options).then(null, err => { + this.telemetryService.publicLog('galleryService:requestError', { cdn: false, message: getErrorMessage(err) }); + return TPromise.wrapError(err); + }); }); }