fix(core): runtime control of telemetry (#10663)
This commit is contained in:
@@ -1,4 +1,20 @@
|
||||
import { mixpanel, sentry } from '@affine/track';
|
||||
import { APP_SETTINGS_STORAGE_KEY } from '@toeverything/infra';
|
||||
|
||||
mixpanel.init();
|
||||
sentry.init();
|
||||
|
||||
if (typeof localStorage !== 'undefined') {
|
||||
let enabled = true;
|
||||
const settingsStr = localStorage.getItem(APP_SETTINGS_STORAGE_KEY);
|
||||
|
||||
if (settingsStr) {
|
||||
const parsed = JSON.parse(settingsStr);
|
||||
enabled = parsed.enableTelemetry;
|
||||
}
|
||||
|
||||
if (!enabled) {
|
||||
mixpanel.opt_out_tracking();
|
||||
sentry.disable();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import { enableAutoTrack, mixpanel, sentry } from '@affine/track';
|
||||
import { appSettingAtom } from '@toeverything/infra';
|
||||
import { useAtomValue } from 'jotai/react';
|
||||
import { useLayoutEffect } from 'react';
|
||||
import { useEffect } from 'react';
|
||||
|
||||
export function Telemetry() {
|
||||
const settings = useAtomValue(appSettingAtom);
|
||||
useLayoutEffect(() => {
|
||||
|
||||
useEffect(() => {
|
||||
if (settings.enableTelemetry === false) {
|
||||
sentry.disable();
|
||||
mixpanel.opt_out_tracking();
|
||||
@@ -16,5 +17,6 @@ export function Telemetry() {
|
||||
return enableAutoTrack(document.body, mixpanel.track);
|
||||
}
|
||||
}, [settings.enableTelemetry]);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -8,39 +8,42 @@ import {
|
||||
} from 'react-router-dom';
|
||||
|
||||
function createSentry() {
|
||||
let enabled = true;
|
||||
let client: Sentry.BrowserClient | undefined;
|
||||
const wrapped = {
|
||||
init() {
|
||||
// https://docs.sentry.io/platforms/javascript/guides/react/#configure
|
||||
Sentry.init({
|
||||
enabled: enabled,
|
||||
dsn: process.env.SENTRY_DSN,
|
||||
debug: BUILD_CONFIG.debug ?? false,
|
||||
environment: process.env.BUILD_TYPE ?? 'development',
|
||||
integrations: [
|
||||
Sentry.reactRouterV6BrowserTracingIntegration({
|
||||
useEffect,
|
||||
useLocation,
|
||||
useNavigationType,
|
||||
createRoutesFromChildren,
|
||||
matchRoutes,
|
||||
}),
|
||||
],
|
||||
beforeSend(event) {
|
||||
return enabled ? event : null;
|
||||
},
|
||||
});
|
||||
Sentry.setTags({
|
||||
distribution: BUILD_CONFIG.distribution,
|
||||
appVersion: BUILD_CONFIG.appVersion,
|
||||
editorVersion: BUILD_CONFIG.editorVersion,
|
||||
});
|
||||
if (!globalThis.SENTRY_RELEASE) {
|
||||
// https://docs.sentry.io/platforms/javascript/guides/react/#configure
|
||||
client = Sentry.init({
|
||||
dsn: process.env.SENTRY_DSN,
|
||||
debug: BUILD_CONFIG.debug ?? false,
|
||||
environment: process.env.BUILD_TYPE ?? 'development',
|
||||
integrations: [
|
||||
Sentry.reactRouterV6BrowserTracingIntegration({
|
||||
useEffect,
|
||||
useLocation,
|
||||
useNavigationType,
|
||||
createRoutesFromChildren,
|
||||
matchRoutes,
|
||||
}),
|
||||
],
|
||||
}) as Sentry.BrowserClient;
|
||||
|
||||
Sentry.setTags({
|
||||
distribution: BUILD_CONFIG.distribution,
|
||||
appVersion: BUILD_CONFIG.appVersion,
|
||||
editorVersion: BUILD_CONFIG.editorVersion,
|
||||
});
|
||||
}
|
||||
},
|
||||
enable() {
|
||||
enabled = true;
|
||||
if (client) {
|
||||
client.getOptions().enabled = true;
|
||||
}
|
||||
},
|
||||
disable() {
|
||||
enabled = false;
|
||||
if (client) {
|
||||
client.getOptions().enabled = false;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user