Add more telemetry events
Summary: Added more telemetry events for the following events - Time taken for each plugin to fetch meta data - Overall time taken for fetching all meta data - Overall time taken for serializing plugins - Time taken to serialize individual plugins with overridden serializer and deserializer methods Reviewed By: passy Differential Revision: D18349588 fbshipit-source-id: 2b3a6b663a9df4da45580fc0be5651a27ca4093d
This commit is contained in:
committed by
Facebook Github Bot
parent
2f5096ddc8
commit
f4a42cc4ea
@@ -38,6 +38,7 @@ import {reportPlatformFailures} from '../utils/metrics';
|
|||||||
import CancellableExportStatus from './CancellableExportStatus';
|
import CancellableExportStatus from './CancellableExportStatus';
|
||||||
import {performance} from 'perf_hooks';
|
import {performance} from 'perf_hooks';
|
||||||
import ShareSheetPendingDialog from './ShareSheetPendingDialog';
|
import ShareSheetPendingDialog from './ShareSheetPendingDialog';
|
||||||
|
import {getInstance as getLogger} from '../fb-stubs/Logger';
|
||||||
export const SHARE_FLIPPER_TRACE_EVENT = 'share-flipper-link';
|
export const SHARE_FLIPPER_TRACE_EVENT = 'share-flipper-link';
|
||||||
|
|
||||||
const Container = styled(FlexColumn)({
|
const Container = styled(FlexColumn)({
|
||||||
@@ -119,7 +120,8 @@ export default class ShareSheetExportUrl extends Component<Props, State> {
|
|||||||
exportStore(store, this.idler, statusUpdate),
|
exportStore(store, this.idler, statusUpdate),
|
||||||
`${EXPORT_FLIPPER_TRACE_EVENT}:UI_LINK`,
|
`${EXPORT_FLIPPER_TRACE_EVENT}:UI_LINK`,
|
||||||
);
|
);
|
||||||
|
const uploadMarker = `${EXPORT_FLIPPER_TRACE_EVENT}:upload`;
|
||||||
|
performance.mark(uploadMarker);
|
||||||
statusUpdate('Uploading Flipper Trace...');
|
statusUpdate('Uploading Flipper Trace...');
|
||||||
// TODO(T55169042): Implement error handling. Result is not tested
|
// TODO(T55169042): Implement error handling. Result is not tested
|
||||||
// its result type right now, causing the upload indicator to stall forever.
|
// its result type right now, causing the upload indicator to stall forever.
|
||||||
@@ -127,7 +129,9 @@ export default class ShareSheetExportUrl extends Component<Props, State> {
|
|||||||
shareFlipperData(serializedString),
|
shareFlipperData(serializedString),
|
||||||
`${SHARE_FLIPPER_TRACE_EVENT}`,
|
`${SHARE_FLIPPER_TRACE_EVENT}`,
|
||||||
);
|
);
|
||||||
|
getLogger().trackTimeSince(uploadMarker, uploadMarker, {
|
||||||
|
plugins: store.getState().plugins.selectedPlugins,
|
||||||
|
});
|
||||||
this.setState({errorArray, result});
|
this.setState({errorArray, result});
|
||||||
const flipperUrl = (result as DataExportResult).flipperUrl;
|
const flipperUrl = (result as DataExportResult).flipperUrl;
|
||||||
if (flipperUrl) {
|
if (flipperUrl) {
|
||||||
|
|||||||
@@ -7,6 +7,12 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
try {
|
||||||
|
jest.mock('../../fb/Logger');
|
||||||
|
} catch (e) {
|
||||||
|
jest.mock('../../fb-stubs/Logger');
|
||||||
|
}
|
||||||
|
|
||||||
import {default as BaseDevice} from '../../devices/BaseDevice';
|
import {default as BaseDevice} from '../../devices/BaseDevice';
|
||||||
import {default as ArchivedDevice} from '../../devices/ArchivedDevice';
|
import {default as ArchivedDevice} from '../../devices/ArchivedDevice';
|
||||||
import {processStore} from '../exportData';
|
import {processStore} from '../exportData';
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import promiseTimeout from './promiseTimeout';
|
|||||||
import {Idler} from './Idler';
|
import {Idler} from './Idler';
|
||||||
export const IMPORT_FLIPPER_TRACE_EVENT = 'import-flipper-trace';
|
export const IMPORT_FLIPPER_TRACE_EVENT = 'import-flipper-trace';
|
||||||
export const EXPORT_FLIPPER_TRACE_EVENT = 'export-flipper-trace';
|
export const EXPORT_FLIPPER_TRACE_EVENT = 'export-flipper-trace';
|
||||||
export const EXPORT_FLIPPER_TRACE_TIME_EVENT = 'export-flipper-trace-time';
|
export const EXPORT_FLIPPER_TRACE_TIME_SERIALIZATION_EVENT = `${EXPORT_FLIPPER_TRACE_EVENT}:serialization`;
|
||||||
|
|
||||||
export type PluginStatesExportState = {
|
export type PluginStatesExportState = {
|
||||||
[pluginKey: string]: string;
|
[pluginKey: string]: string;
|
||||||
@@ -193,7 +193,8 @@ const serializePluginStates = async (
|
|||||||
const keyArray = key.split('#');
|
const keyArray = key.split('#');
|
||||||
const pluginName = keyArray.pop();
|
const pluginName = keyArray.pop();
|
||||||
statusUpdate && statusUpdate(`Serialising ${pluginName}...`);
|
statusUpdate && statusUpdate(`Serialising ${pluginName}...`);
|
||||||
|
const serializationMarker = `${EXPORT_FLIPPER_TRACE_EVENT}:serialization-per-plugin`;
|
||||||
|
performance.mark(serializationMarker);
|
||||||
const pluginClass = pluginName ? pluginsMap.get(pluginName) : null;
|
const pluginClass = pluginName ? pluginsMap.get(pluginName) : null;
|
||||||
if (pluginClass) {
|
if (pluginClass) {
|
||||||
pluginExportState[key] = await pluginClass.serializePersistedState(
|
pluginExportState[key] = await pluginClass.serializePersistedState(
|
||||||
@@ -202,6 +203,9 @@ const serializePluginStates = async (
|
|||||||
idler,
|
idler,
|
||||||
pluginName,
|
pluginName,
|
||||||
);
|
);
|
||||||
|
getLogger().trackTimeSince(serializationMarker, serializationMarker, {
|
||||||
|
plugin: pluginName,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pluginExportState;
|
return pluginExportState;
|
||||||
@@ -411,6 +415,8 @@ export async function fetchMetadata(
|
|||||||
const exportState = pluginClass ? pluginClass.exportPersistedState : null;
|
const exportState = pluginClass ? pluginClass.exportPersistedState : null;
|
||||||
if (exportState) {
|
if (exportState) {
|
||||||
const key = pluginKey(client.id, plugin);
|
const key = pluginKey(client.id, plugin);
|
||||||
|
const fetchMetaDataMarker = `${EXPORT_FLIPPER_TRACE_EVENT}:fetch-meta-data-per-plugin`;
|
||||||
|
performance.mark(fetchMetaDataMarker);
|
||||||
try {
|
try {
|
||||||
statusUpdate &&
|
statusUpdate &&
|
||||||
statusUpdate(`Fetching metadata for plugin ${plugin}...`);
|
statusUpdate(`Fetching metadata for plugin ${plugin}...`);
|
||||||
@@ -426,9 +432,16 @@ export async function fetchMetadata(
|
|||||||
|
|
||||||
`Timed out while collecting data for ${plugin}`,
|
`Timed out while collecting data for ${plugin}`,
|
||||||
);
|
);
|
||||||
|
getLogger().trackTimeSince(fetchMetaDataMarker, fetchMetaDataMarker, {
|
||||||
|
plugin,
|
||||||
|
});
|
||||||
newPluginState[key] = data;
|
newPluginState[key] = data;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
errorArray.push(e);
|
errorArray.push(e);
|
||||||
|
getLogger().trackTimeSince(fetchMetaDataMarker, fetchMetaDataMarker, {
|
||||||
|
plugin,
|
||||||
|
error: e,
|
||||||
|
});
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -464,6 +477,8 @@ export async function getStoreExport(
|
|||||||
pluginsMap.set(key, val);
|
pluginsMap.set(key, val);
|
||||||
});
|
});
|
||||||
statusUpdate && statusUpdate('Preparing to fetch metadata from client...');
|
statusUpdate && statusUpdate('Preparing to fetch metadata from client...');
|
||||||
|
const fetchMetaDataMarker = `${EXPORT_FLIPPER_TRACE_EVENT}:fetch-meta-data`;
|
||||||
|
performance.mark(fetchMetaDataMarker);
|
||||||
const metadata = await fetchMetadata(
|
const metadata = await fetchMetadata(
|
||||||
pluginStates,
|
pluginStates,
|
||||||
pluginsMap,
|
pluginsMap,
|
||||||
@@ -471,6 +486,9 @@ export async function getStoreExport(
|
|||||||
statusUpdate,
|
statusUpdate,
|
||||||
idler,
|
idler,
|
||||||
);
|
);
|
||||||
|
getLogger().trackTimeSince(fetchMetaDataMarker, fetchMetaDataMarker, {
|
||||||
|
plugins: store.getState().plugins.selectedPlugins,
|
||||||
|
});
|
||||||
const {errorArray} = metadata;
|
const {errorArray} = metadata;
|
||||||
const newPluginState = metadata.pluginStates;
|
const newPluginState = metadata.pluginStates;
|
||||||
|
|
||||||
@@ -500,7 +518,7 @@ export function exportStore(
|
|||||||
): Promise<{serializedString: string; errorArray: Array<Error>}> {
|
): Promise<{serializedString: string; errorArray: Array<Error>}> {
|
||||||
getLogger().track('usage', EXPORT_FLIPPER_TRACE_EVENT);
|
getLogger().track('usage', EXPORT_FLIPPER_TRACE_EVENT);
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
performance.mark(EXPORT_FLIPPER_TRACE_TIME_EVENT);
|
performance.mark(EXPORT_FLIPPER_TRACE_TIME_SERIALIZATION_EVENT);
|
||||||
try {
|
try {
|
||||||
statusUpdate && statusUpdate('Preparing to export Flipper data...');
|
statusUpdate && statusUpdate('Preparing to export Flipper data...');
|
||||||
const {exportData, errorArray} = await getStoreExport(
|
const {exportData, errorArray} = await getStoreExport(
|
||||||
@@ -515,8 +533,8 @@ export function exportStore(
|
|||||||
reject(new Error('Serialize function returned empty string'));
|
reject(new Error('Serialize function returned empty string'));
|
||||||
}
|
}
|
||||||
getLogger().trackTimeSince(
|
getLogger().trackTimeSince(
|
||||||
EXPORT_FLIPPER_TRACE_TIME_EVENT,
|
EXPORT_FLIPPER_TRACE_TIME_SERIALIZATION_EVENT,
|
||||||
EXPORT_FLIPPER_TRACE_TIME_EVENT,
|
EXPORT_FLIPPER_TRACE_TIME_SERIALIZATION_EVENT,
|
||||||
{
|
{
|
||||||
plugins: store.getState().plugins.selectedPlugins,
|
plugins: store.getState().plugins.selectedPlugins,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user