Changeset View
Changeset View
Standalone View
Standalone View
lib/utils/report-utils.js
// @flow | // @flow | ||||
import { useSelector } from './redux-utils.js'; | import { useSelector } from './redux-utils.js'; | ||||
import { getUUID } from './uuid.js'; | import { getUUID } from './uuid.js'; | ||||
import { | import { | ||||
type SupportedReports, | type SupportedReports, | ||||
type EnabledReports, | type EnabledReports, | ||||
type ClientReportCreationRequest, | type ClientReportCreationRequest, | ||||
reportTypes, | reportTypes, | ||||
} from '../types/report-types.js'; | } from '../types/report-types.js'; | ||||
function useIsReportEnabled(reportType: SupportedReports): boolean { | function useIsReportEnabled(reportType: SupportedReports): boolean { | ||||
return useSelector(state => state.reportStore.enabledReports[reportType]); | return useSelector(state => state.reportStore.enabledReports[reportType]); | ||||
} | } | ||||
// maximum size of reports without std::string overhead | |||||
const MAX_REPORT_LENGTH = 200_000_000 - 90000; | |||||
function isReportSizeValid(report: ClientReportCreationRequest): boolean { | |||||
try { | |||||
return JSON.stringify(report).length < MAX_REPORT_LENGTH; | |||||
} catch (e) { | |||||
return false; | |||||
} | |||||
} | |||||
function isReportEnabled( | function isReportEnabled( | ||||
report: ClientReportCreationRequest, | report: ClientReportCreationRequest, | ||||
enabledReports: EnabledReports, | enabledReports: EnabledReports, | ||||
): boolean { | ): boolean { | ||||
return ( | const isReportTypeEnabled = | ||||
(report.type === reportTypes.MEDIA_MISSION && | (report.type === reportTypes.MEDIA_MISSION && | ||||
enabledReports.mediaReports) || | enabledReports.mediaReports) || | ||||
(report.type === reportTypes.ERROR && enabledReports.crashReports) || | (report.type === reportTypes.ERROR && enabledReports.crashReports) || | ||||
((report.type === reportTypes.ENTRY_INCONSISTENCY || | ((report.type === reportTypes.ENTRY_INCONSISTENCY || | ||||
report.type === reportTypes.THREAD_INCONSISTENCY) && | report.type === reportTypes.THREAD_INCONSISTENCY) && | ||||
enabledReports.inconsistencyReports) | enabledReports.inconsistencyReports); | ||||
); | |||||
return isReportTypeEnabled && isReportSizeValid(report); | |||||
} | } | ||||
function generateReportID(): string { | function generateReportID(): string { | ||||
return getUUID(); | return getUUID(); | ||||
} | } | ||||
export { useIsReportEnabled, isReportEnabled, generateReportID }; | export { useIsReportEnabled, isReportEnabled, generateReportID }; |