diff --git a/lib/gui/app/app.ts b/lib/gui/app/app.ts index da9cff55..8f717ae5 100644 --- a/lib/gui/app/app.ts +++ b/lib/gui/app/app.ts @@ -86,7 +86,6 @@ const currentVersion = packageJSON.version; analytics.logEvent('Application start', { packageType: packageJSON.packageType, version: currentVersion, - applicationSessionUuid, }); const debouncedLog = _.debounce(console.log, 1000, { maxWait: 1000 }); @@ -293,7 +292,6 @@ window.addEventListener('beforeunload', async (event) => { if (!flashState.isFlashing() || popupExists) { analytics.logEvent('Close application', { isFlashing: flashState.isFlashing(), - applicationSessionUuid, }); return; } @@ -304,10 +302,7 @@ window.addEventListener('beforeunload', async (event) => { // Don't open any more popups popupExists = true; - analytics.logEvent('Close attempt while flashing', { - applicationSessionUuid, - flashingWorkflowUuid, - }); + analytics.logEvent('Close attempt while flashing'); try { const confirmed = await osDialog.showWarning({ @@ -319,8 +314,6 @@ window.addEventListener('beforeunload', async (event) => { if (confirmed) { analytics.logEvent('Close confirmed while flashing', { flashInstanceUuid: flashState.getFlashUuid(), - applicationSessionUuid, - flashingWorkflowUuid, }); // This circumvents the 'beforeunload' event unlike diff --git a/lib/gui/app/components/drive-selector/DriveSelectorModal.tsx b/lib/gui/app/components/drive-selector/DriveSelectorModal.tsx index 136e0e31..48f261c2 100644 --- a/lib/gui/app/components/drive-selector/DriveSelectorModal.tsx +++ b/lib/gui/app/components/drive-selector/DriveSelectorModal.tsx @@ -49,8 +49,6 @@ function toggleDrive(drive: DrivelistDrive) { analytics.logEvent('Toggle drive', { drive, previouslySelected: selectionState.isDriveSelected(drive.device), - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, }); selectionState.toggleDrive(drive.device); @@ -113,8 +111,6 @@ export function DriveSelectorModal({ close }: { close: () => void }) { if (drive.link) { analytics.logEvent('Open driver link modal', { url: drive.link, - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, }); setMissingDriversModal({ drive }); } @@ -131,10 +127,7 @@ export function DriveSelectorModal({ close }: { close: () => void }) { if (canChangeDriveSelectionState) { selectionState.selectDrive(drive.device); - analytics.logEvent('Drive selected (double click)', { - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }); + analytics.logEvent('Drive selected (double click)'); close(); } diff --git a/lib/gui/app/components/finish/finish.tsx b/lib/gui/app/components/finish/finish.tsx index fe4ecf79..fc40d00b 100644 --- a/lib/gui/app/components/finish/finish.tsx +++ b/lib/gui/app/components/finish/finish.tsx @@ -29,19 +29,11 @@ import { FlashResults } from '../flash-results/flash-results'; import { SVGIcon } from '../svg-icon/svg-icon'; const restart = (options: any, goToMain: () => void) => { - const { - applicationSessionUuid, - flashingWorkflowUuid, - } = store.getState().toJS(); if (!options.preserveImage) { selectionState.deselectImage(); } selectionState.deselectAllDrives(); - analytics.logEvent('Restart', { - ...options, - applicationSessionUuid, - flashingWorkflowUuid, - }); + analytics.logEvent('Restart', options); // Re-enable lock release on inactivity updateLock.resume(); diff --git a/lib/gui/app/components/safe-webview/safe-webview.tsx b/lib/gui/app/components/safe-webview/safe-webview.tsx index 2d192795..069de7c9 100644 --- a/lib/gui/app/components/safe-webview/safe-webview.tsx +++ b/lib/gui/app/components/safe-webview/safe-webview.tsx @@ -20,7 +20,6 @@ import * as React from 'react'; import * as packageJSON from '../../../../../package.json'; import * as settings from '../../models/settings'; -import { store } from '../../models/store'; import * as analytics from '../../modules/analytics'; /** @@ -182,11 +181,7 @@ export class SafeWebview extends React.PureComponent< // only care about this event if it's a request for the main frame if (event.resourceType === 'mainFrame') { const HTTP_OK = 200; - analytics.logEvent('SafeWebview loaded', { - event, - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }); + analytics.logEvent('SafeWebview loaded', { event }); this.setState({ shouldShow: event.statusCode === HTTP_OK, }); diff --git a/lib/gui/app/components/settings/settings.tsx b/lib/gui/app/components/settings/settings.tsx index f53681ad..7b0b2f4a 100644 --- a/lib/gui/app/components/settings/settings.tsx +++ b/lib/gui/app/components/settings/settings.tsx @@ -24,7 +24,6 @@ import styled from 'styled-components'; import { version } from '../../../../../package.json'; import * as settings from '../../models/settings'; -import { store } from '../../models/store'; import * as analytics from '../../modules/analytics'; import { open as openExternal } from '../../os/open-external/services/open-external'; @@ -133,7 +132,6 @@ export const SettingsModal: any = styled( setting, value, dangerous, - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, }); if (value || !dangerous) { diff --git a/lib/gui/app/components/source-selector/source-selector.tsx b/lib/gui/app/components/source-selector/source-selector.tsx index fb0c9887..d192179c 100644 --- a/lib/gui/app/components/source-selector/source-selector.tsx +++ b/lib/gui/app/components/source-selector/source-selector.tsx @@ -29,7 +29,7 @@ import * as messages from '../../../../shared/messages'; import * as supportedFormats from '../../../../shared/supported-formats'; import * as shared from '../../../../shared/units'; import * as selectionState from '../../models/selection-state'; -import { observe, store } from '../../models/store'; +import { observe } from '../../models/store'; import * as analytics from '../../modules/analytics'; import * as exceptionReporter from '../../modules/exception-reporter'; import * as osDialog from '../../os/dialog'; @@ -254,8 +254,6 @@ export class SourceSelector extends React.Component< private reselectImage() { analytics.logEvent('Reselect image', { previousImage: selectionState.getImage(), - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, }); selectionState.deselectImage(); @@ -275,17 +273,7 @@ export class SourceSelector extends React.Component< }); osDialog.showError(invalidImageError); - analytics.logEvent( - 'Invalid image', - _.merge( - { - applicationSessionUuid: store.getState().toJS() - .applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }, - image, - ), - ); + analytics.logEvent('Invalid image', image); return; } @@ -294,21 +282,11 @@ export class SourceSelector extends React.Component< let title = null; if (supportedFormats.looksLikeWindowsImage(image.path)) { - analytics.logEvent('Possibly Windows image', { - image, - applicationSessionUuid: store.getState().toJS() - .applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }); + analytics.logEvent('Possibly Windows image', { image }); message = messages.warning.looksLikeWindowsImage(); title = 'Possible Windows image detected'; } else if (!image.hasMBR) { - analytics.logEvent('Missing partition table', { - image, - applicationSessionUuid: store.getState().toJS() - .applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }); + analytics.logEvent('Missing partition table', { image }); title = 'Missing partition table'; message = messages.warning.missingPartitionTable(); } @@ -331,8 +309,6 @@ export class SourceSelector extends React.Component< logo: Boolean(image.logo), blockMap: Boolean(image.blockMap), }, - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, }); } catch (error) { exceptionReporter.report(error); @@ -420,21 +396,14 @@ export class SourceSelector extends React.Component< } private async openImageSelector() { - analytics.logEvent('Open image selector', { - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }); + analytics.logEvent('Open image selector'); try { const imagePath = await osDialog.selectImage(); // Avoid analytics and selection state changes // if no file was resolved from the dialog. if (!imagePath) { - analytics.logEvent('Image selector closed', { - applicationSessionUuid: store.getState().toJS() - .applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }); + analytics.logEvent('Image selector closed'); return; } this.selectImageByPath({ @@ -457,11 +426,7 @@ export class SourceSelector extends React.Component< } private openURLSelector() { - analytics.logEvent('Open image URL selector', { - applicationSessionUuid: - store.getState().toJS().applicationSessionUuid || '', - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }); + analytics.logEvent('Open image URL selector'); this.setState({ showURLSelector: true, @@ -481,8 +446,6 @@ export class SourceSelector extends React.Component< private showSelectedImageDetails() { analytics.logEvent('Show selected image tooltip', { imagePath: selectionState.getImagePath(), - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, }); this.setState({ @@ -606,12 +569,7 @@ export class SourceSelector extends React.Component< // Avoid analytics and selection state changes // if no file was resolved from the dialog. if (!imagePath) { - analytics.logEvent('URL selector closed', { - applicationSessionUuid: store.getState().toJS() - .applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS() - .flashingWorkflowUuid, - }); + analytics.logEvent('URL selector closed'); this.setState({ showURLSelector: false, }); diff --git a/lib/gui/app/modules/analytics.ts b/lib/gui/app/modules/analytics.ts index 9fac2b2d..8cf335a5 100644 --- a/lib/gui/app/modules/analytics.ts +++ b/lib/gui/app/modules/analytics.ts @@ -20,6 +20,7 @@ import * as resinCorvus from 'resin-corvus/browser'; import * as packageJSON from '../../../../package.json'; import { getConfig, hasProps } from '../../../shared/utils'; import * as settings from '../models/settings'; +import { store } from '../models/store'; const sentryToken = settings.get('analyticsSentryToken') || @@ -96,22 +97,23 @@ function validateMixpanelConfig(config: { return mixpanelConfig; } -/** - * @summary Log a debug message - * - * @description - * This function sends the debug message to error reporting services. - */ -export const logDebug = resinCorvus.logDebug; - /** * @summary Log an event * * @description * This function sends the debug message to product analytics services. */ -export function logEvent(message: string, data: any) { - resinCorvus.logEvent(message, { ...data, sample: mixpanelSample }); +export function logEvent(message: string, data: _.Dictionary = {}) { + const { + applicationSessionUuid, + flashingWorkflowUuid, + } = store.getState().toJS(); + resinCorvus.logEvent(message, { + ...data, + sample: mixpanelSample, + applicationSessionUuid, + flashingWorkflowUuid, + }); } /** diff --git a/lib/gui/app/modules/image-writer.ts b/lib/gui/app/modules/image-writer.ts index 202c5a3b..d820127d 100644 --- a/lib/gui/app/modules/image-writer.ts +++ b/lib/gui/app/modules/image-writer.ts @@ -29,7 +29,6 @@ import { SourceOptions } from '../components/source-selector/source-selector'; import * as flashState from '../models/flash-state'; import * as selectionState from '../models/selection-state'; import * as settings from '../models/settings'; -import { store } from '../models/store'; import * as analytics from '../modules/analytics'; import * as windowProgress from '../os/window-progress'; import { updateLock } from './update-lock'; @@ -61,8 +60,6 @@ function handleErrorLogging( ) { const eventData = { ...analyticsData, - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, flashInstanceUuid: flashState.getFlashUuid(), }; @@ -273,8 +270,6 @@ export async function flash( flashInstanceUuid: flashState.getFlashUuid(), unmountOnSuccess: settings.get('unmountOnSuccess'), validateWriteOnSuccess: settings.get('validateWriteOnSuccess'), - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, }; analytics.logEvent('Flash', analyticsData); @@ -337,8 +332,6 @@ export function cancel() { flashInstanceUuid: flashState.getFlashUuid(), unmountOnSuccess: settings.get('unmountOnSuccess'), validateWriteOnSuccess: settings.get('validateWriteOnSuccess'), - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, status: 'cancel', }; analytics.logEvent('Cancel', analyticsData); diff --git a/lib/gui/app/os/open-external/services/open-external.ts b/lib/gui/app/os/open-external/services/open-external.ts index c843bbf9..6a3e6374 100644 --- a/lib/gui/app/os/open-external/services/open-external.ts +++ b/lib/gui/app/os/open-external/services/open-external.ts @@ -16,7 +16,6 @@ import * as electron from 'electron'; import * as settings from '../../../models/settings'; -import { store } from '../../../models/store'; import { logEvent } from '../../../modules/analytics'; /** @@ -28,10 +27,7 @@ export function open(url: string) { return; } - logEvent('Open external link', { - url, - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - }); + logEvent('Open external link', { url }); if (url) { electron.shell.openExternal(url); diff --git a/lib/gui/app/pages/main/DriveSelector.tsx b/lib/gui/app/pages/main/DriveSelector.tsx index 255b3989..6cebe963 100644 --- a/lib/gui/app/pages/main/DriveSelector.tsx +++ b/lib/gui/app/pages/main/DriveSelector.tsx @@ -22,7 +22,7 @@ import { TargetSelector } from '../../components/drive-selector/target-selector' import { SVGIcon } from '../../components/svg-icon/svg-icon'; import { getImage, getSelectedDrives } from '../../models/selection-state'; import * as settings from '../../models/settings'; -import { observe, store } from '../../models/store'; +import { observe } from '../../models/store'; import * as analytics from '../../modules/analytics'; const StepBorder = styled.div<{ @@ -117,12 +117,7 @@ export const DriveSelector = ({ setShowDriveSelectorModal(true); }} reselectDrive={() => { - analytics.logEvent('Reselect drive', { - applicationSessionUuid: store.getState().toJS() - .applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS() - .flashingWorkflowUuid, - }); + analytics.logEvent('Reselect drive'); setShowDriveSelectorModal(true); }} flashing={flashing} diff --git a/lib/gui/app/pages/main/Flash.tsx b/lib/gui/app/pages/main/Flash.tsx index 209796a9..9a3f33a7 100644 --- a/lib/gui/app/pages/main/Flash.tsx +++ b/lib/gui/app/pages/main/Flash.tsx @@ -27,7 +27,6 @@ import { SVGIcon } from '../../components/svg-icon/svg-icon'; import * as availableDrives from '../../models/available-drives'; import * as flashState from '../../models/flash-state'; import * as selection from '../../models/selection-state'; -import { store } from '../../models/store'; import * as analytics from '../../modules/analytics'; import { scanner as driveScanner } from '../../modules/drive-scanner'; import * as imageWriter from '../../modules/image-writer'; @@ -201,10 +200,7 @@ export const Flash = ({ setErrorMessage(''); flashState.resetState(); if (shouldRetry) { - analytics.logEvent('Restart after failure', { - applicationSessionUuid: store.getState().toJS().applicationSessionUuid, - flashingWorkflowUuid: store.getState().toJS().flashingWorkflowUuid, - }); + analytics.logEvent('Restart after failure'); } else { selection.clear(); }