提交 8258fe17 编写于 作者: J Joao Moreno

extract IdleMonitor from telemetry service

上级 d9bb9abf
......@@ -4,29 +4,14 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import { UserStatus, IIdleMonitor } from 'vs/base/common/idleMonitor';
import {TimeoutTimer} from 'vs/base/common/async';
import Event, {Emitter} from 'vs/base/common/event';
import {Disposable, IDisposable} from 'vs/base/common/lifecycle';
import {Disposable} from 'vs/base/common/lifecycle';
import * as dom from 'vs/base/browser/dom';
export enum UserStatus {
Idle,
Active
}
export interface IIdleMonitor extends IDisposable {
status: UserStatus;
onStatusChange: Event<UserStatus>;
}
export const DEFAULT_IDLE_TIME = 60 * 60 * 1000; // 60 minutes
export class NeverIdleMonitor implements IIdleMonitor {
status = UserStatus.Active;
onStatusChange = new Emitter().event;
dispose() {}
}
export class IdleMonitor extends Disposable implements IIdleMonitor {
private _lastActiveTime: number;
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import Event, { Emitter } from 'vs/base/common/event';
import { IDisposable } from 'vs/base/common/lifecycle';
export enum UserStatus {
Idle,
Active
}
export interface IIdleMonitor extends IDisposable {
status: UserStatus;
onStatusChange: Event<UserStatus>;
}
export class NeverIdleMonitor implements IIdleMonitor {
status = UserStatus.Active;
onStatusChange = new Emitter().event;
dispose() {}
}
\ No newline at end of file
......@@ -11,7 +11,7 @@ import {ITelemetryService, ITelemetryAppender, ITelemetryInfo} from 'vs/platform
import {optional} from 'vs/platform/instantiation/common/instantiation';
import {IConfigurationService} from 'vs/platform/configuration/common/configuration';
import {IConfigurationRegistry, Extensions} from 'vs/platform/configuration/common/configurationRegistry';
import {IIdleMonitor, IdleMonitor, UserStatus} from 'vs/base/browser/idleMonitor';
import {IIdleMonitor, UserStatus} from 'vs/base/common/idleMonitor';
import {TPromise} from 'vs/base/common/winjs.base';
import {IDisposable, dispose} from 'vs/base/common/lifecycle';
import {TimeKeeper, ITimerEvent} from 'vs/base/common/timer';
......@@ -20,8 +20,8 @@ import {Registry} from 'vs/platform/platform';
export interface ITelemetryServiceConfig {
appender: ITelemetryAppender[];
hardIdleMonitor?: IIdleMonitor;
softIdleMonitor?: IIdleMonitor;
hardIdleMonitor: IIdleMonitor;
softIdleMonitor: IIdleMonitor;
commonProperties?: TPromise<{ [name: string]: any }>;
piiPaths?: string[];
userOptIn?: boolean;
......@@ -49,6 +49,8 @@ export class TelemetryService implements ITelemetryService {
) {
this._configuration = mixin(config, <ITelemetryServiceConfig>{
appender: [],
hardIdleMonitor: null,
softIdleMonitor: null,
commonProperties: TPromise.as({}),
piiPaths: [],
userOptIn: true
......@@ -71,14 +73,12 @@ export class TelemetryService implements ITelemetryService {
this._disposables.push(this._timeKeeper);
this._disposables.push(this._timeKeeper.addListener(events => this._onTelemetryTimerEventStop(events)));
this._hardIdleMonitor = this._configuration.hardIdleMonitor || new IdleMonitor();
// TODO@joao remove
this._disposables.push(this._hardIdleMonitor);
this._hardIdleMonitor = this._configuration.hardIdleMonitor;
this._softIdleMonitor = this._configuration.softIdleMonitor;
this._softIdleMonitor = this._configuration.softIdleMonitor || new IdleMonitor(TelemetryService.SOFT_IDLE_TIME);
this._disposables.push(this._softIdleMonitor.onStatusChange(status => this._onIdleStatus(status)));
// TODO@joao remove
this._disposables.push(this._softIdleMonitor);
if (this._softIdleMonitor) {
this._disposables.push(this._softIdleMonitor.onStatusChange(status => this._onIdleStatus(status)));
}
if (this._configurationService) {
this._updateUserOptIn();
......
......@@ -20,7 +20,8 @@ import timer = require('vs/base/common/timer');
import {Workbench} from 'vs/workbench/browser/workbench';
import {Storage, inMemoryLocalStorageInstance} from 'vs/workbench/common/storage';
import {ITelemetryService, NullTelemetryService} from 'vs/platform/telemetry/common/telemetry';
import {TelemetryService} from 'vs/platform/telemetry/browser/telemetryService';
import {TelemetryService, ITelemetryServiceConfig} from 'vs/platform/telemetry/browser/telemetryService';
import {IdleMonitor} from 'vs/base/browser/idleMonitor';
import ErrorTelemetry from 'vs/platform/telemetry/browser/errorTelemetry';
import {createAppender} from 'vs/platform/telemetry/node/appInsightsAppender';
import {resolveCommonProperties} from 'vs/platform/telemetry/node/commonProperties';
......@@ -214,15 +215,23 @@ export class WorkbenchShell {
// Telemetry
if (this.configuration.env.isBuilt && !this.configuration.env.extensionDevelopmentPath && !!this.configuration.env.enableTelemetry) {
const config = {
appender: createAppender(this.configuration.env),
const appender = createAppender(this.configuration.env);
const hardIdleMonitor = new IdleMonitor();
const softIdleMonitor = new IdleMonitor(TelemetryService.SOFT_IDLE_TIME);
const config: ITelemetryServiceConfig = {
appender,
hardIdleMonitor,
softIdleMonitor,
commonProperties: resolveCommonProperties(this.storageService, this.contextService),
piiPaths: [this.configuration.env.appRoot, this.configuration.env.userExtensionsHome]
};
const telemetryService = instantiationService.createInstance(TelemetryService, config);
const errorTelemetry = new ErrorTelemetry(telemetryService);
this.telemetryService = telemetryService;
disposables.add(telemetryService, errorTelemetry, ...config.appender);
disposables.add(telemetryService, errorTelemetry, hardIdleMonitor, softIdleMonitor, ...appender);
} else {
this.telemetryService = NullTelemetryService;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册