Skip to content

Commit 88519c1

Browse files
authored
Fix telemetry SDK intialization warnings (microsoft#158612)
1 parent 052b1e4 commit 88519c1

File tree

4 files changed

+25
-22
lines changed

4 files changed

+25
-22
lines changed

src/vs/platform/telemetry/browser/1dsAppender.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import type { AppInsightsCore } from '@microsoft/1ds-core-js';
7-
import { AbstractOneDataSystemAppender } from 'vs/platform/telemetry/common/1dsAppender';
6+
import { AbstractOneDataSystemAppender, IAppInsightsCore } from 'vs/platform/telemetry/common/1dsAppender';
87

98

109
export class OneDataSystemWebAppender extends AbstractOneDataSystemAppender {
1110
constructor(
1211
isInternalTelemetry: boolean,
1312
eventPrefix: string,
1413
defaultData: { [key: string]: any } | null,
15-
iKeyOrClientFactory: string | (() => AppInsightsCore), // allow factory function for testing
14+
iKeyOrClientFactory: string | (() => IAppInsightsCore), // allow factory function for testing
1615
) {
1716
super(isInternalTelemetry, eventPrefix, defaultData, iKeyOrClientFactory);
1817

src/vs/platform/telemetry/common/1dsAppender.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,23 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import type { AppInsightsCore, IExtendedConfiguration } from '@microsoft/1ds-core-js';
6+
import type { IExtendedConfiguration, IExtendedTelemetryItem, ITelemetryItem, ITelemetryUnloadState } from '@microsoft/1ds-core-js';
77
import type { IChannelConfiguration, IXHROverride, PostChannel } from '@microsoft/1ds-post-js';
88
import { onUnexpectedError } from 'vs/base/common/errors';
99
import { mixin } from 'vs/base/common/objects';
1010
import { ITelemetryAppender, validateTelemetryData } from 'vs/platform/telemetry/common/telemetryUtils';
1111

12+
// Interface type which is a subset of @microsoft/1ds-core-js AppInsightsCore.
13+
// Allows us to more easily build mock objects for testing as the interface is quite large and we only need a few properties.
14+
export interface IAppInsightsCore {
15+
pluginVersionString: string;
16+
track(item: ITelemetryItem | IExtendedTelemetryItem): void;
17+
unload(isAsync: boolean, unloadComplete: (unloadState: ITelemetryUnloadState) => void): void;
18+
}
19+
1220
const endpointUrl = 'https://mobile.events.data.microsoft.com/OneCollector/1.0';
1321

14-
async function getClient(instrumentationKey: string, addInternalFlag?: boolean, xhrOverride?: IXHROverride): Promise<AppInsightsCore> {
22+
async function getClient(instrumentationKey: string, addInternalFlag?: boolean, xhrOverride?: IXHROverride): Promise<IAppInsightsCore> {
1523
const oneDs = await import('@microsoft/1ds-core-js');
1624
const postPlugin = await import('@microsoft/1ds-post-js');
1725
const appInsightsCore = new oneDs.AppInsightsCore();
@@ -57,15 +65,15 @@ async function getClient(instrumentationKey: string, addInternalFlag?: boolean,
5765
// TODO @lramos15 maybe make more in line with src/vs/platform/telemetry/browser/appInsightsAppender.ts with caching support
5866
export abstract class AbstractOneDataSystemAppender implements ITelemetryAppender {
5967

60-
protected _aiCoreOrKey: AppInsightsCore | string | undefined;
61-
private _asyncAiCore: Promise<AppInsightsCore> | null;
68+
protected _aiCoreOrKey: IAppInsightsCore | string | undefined;
69+
private _asyncAiCore: Promise<IAppInsightsCore> | null;
6270
protected readonly endPointUrl = endpointUrl;
6371

6472
constructor(
6573
private readonly _isInternalTelemetry: boolean,
6674
private _eventPrefix: string,
6775
private _defaultData: { [key: string]: any } | null,
68-
iKeyOrClientFactory: string | (() => AppInsightsCore), // allow factory function for testing
76+
iKeyOrClientFactory: string | (() => IAppInsightsCore), // allow factory function for testing
6977
private _xhrOverride?: IXHROverride
7078
) {
7179
if (!this._defaultData) {
@@ -80,7 +88,7 @@ export abstract class AbstractOneDataSystemAppender implements ITelemetryAppende
8088
this._asyncAiCore = null;
8189
}
8290

83-
private _withAIClient(callback: (aiCore: AppInsightsCore) => void): void {
91+
private _withAIClient(callback: (aiCore: IAppInsightsCore) => void): void {
8492
if (!this._aiCoreOrKey) {
8593
return;
8694
}

src/vs/platform/telemetry/node/1dsAppender.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import type { AppInsightsCore } from '@microsoft/1ds-core-js';
76
import type { IPayloadData, IXHROverride } from '@microsoft/1ds-post-js';
87
import * as https from 'https';
9-
import { AbstractOneDataSystemAppender } from 'vs/platform/telemetry/common/1dsAppender';
8+
import { AbstractOneDataSystemAppender, IAppInsightsCore } from 'vs/platform/telemetry/common/1dsAppender';
109

1110

1211
export class OneDataSystemAppender extends AbstractOneDataSystemAppender {
@@ -15,7 +14,7 @@ export class OneDataSystemAppender extends AbstractOneDataSystemAppender {
1514
isInternalTelemetry: boolean,
1615
eventPrefix: string,
1716
defaultData: { [key: string]: any } | null,
18-
iKeyOrClientFactory: string | (() => AppInsightsCore), // allow factory function for testing
17+
iKeyOrClientFactory: string | (() => IAppInsightsCore), // allow factory function for testing
1918
) {
2019
// Override the way events get sent since node doesn't have XHTMLRequest
2120
const customHttpXHROverride: IXHROverride = {

src/vs/platform/telemetry/test/browser/1dsAppender.test.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,23 @@
22
* Copyright (c) Microsoft Corporation. All rights reserved.
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
5-
import { AppInsightsCore } from '@microsoft/1ds-core-js';
5+
import { ITelemetryItem, ITelemetryUnloadState } from '@microsoft/1ds-core-js';
66
import * as assert from 'assert';
77
import { OneDataSystemWebAppender } from 'vs/platform/telemetry/browser/1dsAppender';
8+
import { IAppInsightsCore } from 'vs/platform/telemetry/common/1dsAppender';
89

9-
class AppInsightsCoreMock extends AppInsightsCore {
10-
public override config: any;
10+
class AppInsightsCoreMock implements IAppInsightsCore {
11+
pluginVersionString: string = 'Test Runner';
1112
public events: any[] = [];
1213
public IsTrackingPageView: boolean = false;
1314
public exceptions: any[] = [];
1415

15-
constructor() {
16-
super();
17-
}
18-
19-
public override track(event: any) {
16+
public track(event: ITelemetryItem) {
2017
this.events.push(event.baseData);
2118
}
2219

23-
public override flush(options: any): void {
24-
// called on dispose
20+
public unload(isAsync: boolean, unloadComplete: (unloadState: ITelemetryUnloadState) => void): void {
21+
// No-op
2522
}
2623
}
2724

0 commit comments

Comments
 (0)