mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Report enabled extensions (#1451)
* Report enabled extensions Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> * Add missing semicolons Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> * Refactoring Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> * Add missing semicolon Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
This commit is contained in:
parent
19150fca84
commit
0a5e7a048d
@ -8,6 +8,7 @@ export default class TelemetryMainExtension extends LensMainExtension {
|
|||||||
console.log("telemetry main extension activated");
|
console.log("telemetry main extension activated");
|
||||||
tracker.start();
|
tracker.start();
|
||||||
tracker.reportPeriodically();
|
tracker.reportPeriodically();
|
||||||
|
tracker.watchExtensions();
|
||||||
await telemetryPreferencesStore.loadExtension(this);
|
await telemetryPreferencesStore.loadExtension(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,8 @@ import ua from "universal-analytics";
|
|||||||
import Analytics from "analytics-node";
|
import Analytics from "analytics-node";
|
||||||
import { machineIdSync } from "node-machine-id";
|
import { machineIdSync } from "node-machine-id";
|
||||||
import { telemetryPreferencesStore } from "./telemetry-preferences-store";
|
import { telemetryPreferencesStore } from "./telemetry-preferences-store";
|
||||||
|
import { reaction, IReactionDisposer } from "mobx";
|
||||||
|
import { comparer } from "mobx";
|
||||||
|
|
||||||
export class Tracker extends Util.Singleton {
|
export class Tracker extends Util.Singleton {
|
||||||
static readonly GA_ID = "UA-159377374-1"
|
static readonly GA_ID = "UA-159377374-1"
|
||||||
@ -18,6 +20,7 @@ export class Tracker extends Util.Singleton {
|
|||||||
protected userAgent: string;
|
protected userAgent: string;
|
||||||
protected anonymousId: string;
|
protected anonymousId: string;
|
||||||
protected os: string
|
protected os: string
|
||||||
|
protected disposers: IReactionDisposer[]
|
||||||
|
|
||||||
protected reportInterval: NodeJS.Timeout
|
protected reportInterval: NodeJS.Timeout
|
||||||
|
|
||||||
@ -35,6 +38,7 @@ export class Tracker extends Util.Singleton {
|
|||||||
this.analytics = new Analytics(Tracker.SEGMENT_KEY, { flushAt: 1 });
|
this.analytics = new Analytics(Tracker.SEGMENT_KEY, { flushAt: 1 });
|
||||||
this.visitor.set("dl", "https://telemetry.k8slens.dev");
|
this.visitor.set("dl", "https://telemetry.k8slens.dev");
|
||||||
this.visitor.set("ua", this.userAgent);
|
this.visitor.set("ua", this.userAgent);
|
||||||
|
this.disposers = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
@ -49,6 +53,21 @@ export class Tracker extends Util.Singleton {
|
|||||||
EventBus.appEventBus.addListener(handler);
|
EventBus.appEventBus.addListener(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
watchExtensions() {
|
||||||
|
let previousExtensions = App.getEnabledExtensions();
|
||||||
|
this.disposers.push(reaction(() => App.getEnabledExtensions(), (currentExtensions) => {
|
||||||
|
const removedExtensions = previousExtensions.filter(x => !currentExtensions.includes(x));
|
||||||
|
removedExtensions.forEach(ext => {
|
||||||
|
this.event("extension", "disable", { extension: ext });
|
||||||
|
});
|
||||||
|
const newExtensions = currentExtensions.filter(x => !previousExtensions.includes(x));
|
||||||
|
newExtensions.forEach(ext => {
|
||||||
|
this.event("extension", "enable", { extension: ext });
|
||||||
|
})
|
||||||
|
previousExtensions = currentExtensions;
|
||||||
|
}, { equals: comparer.structural }));
|
||||||
|
}
|
||||||
|
|
||||||
reportPeriodically() {
|
reportPeriodically() {
|
||||||
this.reportInterval = setInterval(() => {
|
this.reportInterval = setInterval(() => {
|
||||||
this.reportData();
|
this.reportData();
|
||||||
@ -66,6 +85,9 @@ export class Tracker extends Util.Singleton {
|
|||||||
if (this.reportInterval) {
|
if (this.reportInterval) {
|
||||||
clearInterval(this.reportInterval);
|
clearInterval(this.reportInterval);
|
||||||
}
|
}
|
||||||
|
this.disposers.forEach(disposer => {
|
||||||
|
disposer();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async isTelemetryAllowed(): Promise<boolean> {
|
protected async isTelemetryAllowed(): Promise<boolean> {
|
||||||
@ -79,7 +101,8 @@ export class Tracker extends Util.Singleton {
|
|||||||
appVersion: App.version,
|
appVersion: App.version,
|
||||||
os: this.os,
|
os: this.os,
|
||||||
clustersCount: clustersList.length,
|
clustersCount: clustersList.length,
|
||||||
workspacesCount: Store.workspaceStore.enabledWorkspacesList.length
|
workspacesCount: Store.workspaceStore.enabledWorkspacesList.length,
|
||||||
|
extensions: App.getEnabledExtensions()
|
||||||
});
|
});
|
||||||
|
|
||||||
clustersList.forEach((cluster) => {
|
clustersList.forEach((cluster) => {
|
||||||
|
|||||||
@ -1,4 +1,8 @@
|
|||||||
import { getAppVersion } from "../../common/utils";
|
import { getAppVersion } from "../../common/utils";
|
||||||
|
import { extensionsStore } from "../extensions-store";
|
||||||
|
|
||||||
export const version = getAppVersion();
|
export const version = getAppVersion();
|
||||||
export { isSnap, isWindows, isMac, isLinux, appName, slackUrl, issuesTrackerUrl } from "../../common/vars";
|
export { isSnap, isWindows, isMac, isLinux, appName, slackUrl, issuesTrackerUrl } from "../../common/vars";
|
||||||
|
export function getEnabledExtensions(): string[] {
|
||||||
|
return extensionsStore.enabledExtensions;
|
||||||
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import type { LensExtensionId } from "./lens-extension";
|
import type { LensExtensionId } from "./lens-extension";
|
||||||
import type { ExtensionLoader } from "./extension-loader";
|
import type { ExtensionLoader } from "./extension-loader";
|
||||||
import { BaseStore } from "../common/base-store";
|
import { BaseStore } from "../common/base-store";
|
||||||
import { action, observable, reaction, toJS } from "mobx";
|
import { action, computed, observable, reaction, toJS } from "mobx";
|
||||||
|
|
||||||
export interface LensExtensionsStoreModel {
|
export interface LensExtensionsStoreModel {
|
||||||
extensions: Record<LensExtensionId, LensExtensionState>;
|
extensions: Record<LensExtensionId, LensExtensionState>;
|
||||||
@ -9,6 +9,7 @@ export interface LensExtensionsStoreModel {
|
|||||||
|
|
||||||
export interface LensExtensionState {
|
export interface LensExtensionState {
|
||||||
enabled?: boolean;
|
enabled?: boolean;
|
||||||
|
name: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
||||||
@ -18,6 +19,17 @@ export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@computed
|
||||||
|
get enabledExtensions() {
|
||||||
|
const extensions: string[] = [];
|
||||||
|
this.state.forEach((state, id) => {
|
||||||
|
if (state.enabled) {
|
||||||
|
extensions.push(state.name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return extensions;
|
||||||
|
}
|
||||||
|
|
||||||
protected state = observable.map<LensExtensionId, LensExtensionState>();
|
protected state = observable.map<LensExtensionId, LensExtensionState>();
|
||||||
|
|
||||||
protected getState(extensionLoader: ExtensionLoader) {
|
protected getState(extensionLoader: ExtensionLoader) {
|
||||||
@ -25,6 +37,7 @@ export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
|
|||||||
return Array.from(extensionLoader.userExtensions).reduce((state, [extId, ext]) => {
|
return Array.from(extensionLoader.userExtensions).reduce((state, [extId, ext]) => {
|
||||||
state[extId] = {
|
state[extId] = {
|
||||||
enabled: ext.isEnabled,
|
enabled: ext.isEnabled,
|
||||||
|
name: ext.manifest.name,
|
||||||
};
|
};
|
||||||
return state;
|
return state;
|
||||||
}, state);
|
}, state);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user