Skip to content

Commit 5067821

Browse files
mustard-mhjeanp413
andauthored
Bring telemetry inside proxy IDE-142 (#72)
* Bring telemetry inside proxy * Add common telemetry --------- Co-authored-by: Jean Pierre <[email protected]>
1 parent 4ec45fc commit 5067821

22 files changed

+583
-419
lines changed

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"description": "Gitpod Support",
55
"publisher": "gitpod",
66
"version": "0.0.115",
7-
"daemonVersion": "0.0.9",
87
"license": "MIT",
98
"icon": "resources/gitpod.png",
109
"repository": {

src/authentication/authentication.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Keychain from '../common/keychain';
99
import GitpodServer from './gitpodServer';
1010
import { arrayEquals } from '../common/utils';
1111
import { Disposable } from '../common/dispose';
12-
import { ITelemetryService, UserFlowTelemetryProperties } from '../services/telemetryService';
12+
import { ITelemetryService, UserFlowTelemetryProperties } from '../common/telemetry';
1313
import { INotificationService } from '../services/notificationService';
1414
import { ILogService } from '../services/logService';
1515
import { Configuration } from '../configuration';

src/authentication/gitpodServer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as vscode from 'vscode';
7-
import { PromiseAdapter, promiseFromEvent } from '../common/utils';
7+
import { PromiseAdapter, promiseFromEvent } from '../common/event';
88
import { withServerApi } from '../internalApi';
99
import pkceChallenge from 'pkce-challenge';
1010
import { v4 as uuid } from 'uuid';
1111
import { Disposable } from '../common/dispose';
1212
import { INotificationService } from '../services/notificationService';
13-
import { UserFlowTelemetryProperties } from '../services/telemetryService';
13+
import { UserFlowTelemetryProperties } from '../common/telemetry';
1414
import { ILogService } from '../services/logService';
1515

1616
interface ExchangeTokenResponse {

src/commands/logs.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import * as vscode from 'vscode';
1111
import { Command } from '../commandManager';
1212
import { ILogService } from '../services/logService';
1313
import { INotificationService } from '../services/notificationService';
14-
import { ITelemetryService, UserFlowTelemetryProperties } from '../services/telemetryService';
14+
import { ITelemetryService, UserFlowTelemetryProperties } from '../common/telemetry';
1515
import { HostService } from '../services/hostService';
1616

1717
interface IFile {

src/common/event.ts

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Gitpod. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { EventEmitter, Event, Disposable } from 'vscode';
7+
8+
export function filterEvent<T>(event: Event<T>, filter: (e: T) => boolean): Event<T> {
9+
return (listener, thisArgs = null, disposables?) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables);
10+
}
11+
12+
/**
13+
* Given an event, returns another event which only fires once.
14+
*
15+
* @param event The event source for the new event.
16+
*/
17+
export function onceEvent<T>(event: Event<T>): Event<T> {
18+
return (listener, thisArgs = null, disposables?) => {
19+
// we need this, in case the event fires during the listener call
20+
let didFire = false;
21+
let result: Disposable | undefined = undefined;
22+
result = event(e => {
23+
if (didFire) {
24+
return;
25+
} else if (result) {
26+
result.dispose();
27+
} else {
28+
didFire = true;
29+
}
30+
31+
return listener.call(thisArgs, e);
32+
}, null, disposables);
33+
34+
if (didFire) {
35+
result.dispose();
36+
}
37+
38+
return result;
39+
};
40+
}
41+
42+
const passthrough = (value: any, resolve: (value?: any) => void) => resolve(value);
43+
44+
export interface PromiseAdapter<T, U> {
45+
(
46+
value: T,
47+
resolve:
48+
(value: U | PromiseLike<U>) => void,
49+
reject:
50+
(reason: any) => void
51+
): any;
52+
}
53+
54+
/**
55+
* Return a promise that resolves with the next emitted event, or with some future
56+
* event as decided by an adapter.
57+
*
58+
* If specified, the adapter is a function that will be called with
59+
* `(event, resolve, reject)`. It will be called once per event until it resolves or
60+
* rejects.
61+
*
62+
* The default adapter is the passthrough function `(value, resolve) => resolve(value)`.
63+
*
64+
* @param event the event
65+
* @param adapter controls resolution of the returned promise
66+
* @returns a promise that resolves or rejects as specified by the adapter
67+
*/
68+
export function promiseFromEvent<T, U>(
69+
event: Event<T>,
70+
adapter: PromiseAdapter<T, U> = passthrough): { promise: Promise<U>; cancel: EventEmitter<void> } {
71+
let subscription: Disposable;
72+
let cancel = new EventEmitter<void>();
73+
return {
74+
promise: new Promise<U>((resolve, reject) => {
75+
cancel.event(_ => reject('Cancelled'));
76+
subscription = event((value: T) => {
77+
try {
78+
Promise.resolve(adapter(value, resolve, reject))
79+
.catch(reject);
80+
} catch (error) {
81+
reject(error);
82+
}
83+
});
84+
}).then(
85+
(result: U) => {
86+
subscription.dispose();
87+
return result;
88+
},
89+
error => {
90+
subscription.dispose();
91+
throw error;
92+
}
93+
),
94+
cancel
95+
};
96+
}
97+
98+
export function eventToPromise<T>(event: Event<T>): Promise<T> {
99+
return new Promise(resolve => onceEvent(event)(resolve));
100+
}

0 commit comments

Comments
 (0)