import React, { useEffect } from 'react'; import 'react-dom'; import { format } from 'date-fns'; import { useAppDispatch, useAppSelector } from '@webapp/redux/hooks'; import Box from '@webapp/ui/Box'; import { FlamegraphRenderer } from '@pyroscope/flamegraph/src/FlamegraphRenderer'; import { fetchSingleView } from '@webapp/redux/reducers/tracing'; import useColorMode from '@webapp/hooks/colorMode.hook'; import ExportData from '@webapp/components/ExportData'; import useExportToFlamegraphDotCom from '@webapp/components/exportToFlamegraphDotCom.hook'; import PageTitle from '@webapp/components/PageTitle'; import { isExportToFlamegraphDotComEnabled } from '@webapp/util/features'; import { formatTitle } from './formatTitle'; import styles from './TracingSingleView.module.scss'; function formatTime(t: string | undefined): string { return format(new Date(1000 * parseInt(t || '0', 10)), 'yyyy-MM-dd HH:mm:ss'); } function TracingSingleView() { const dispatch = useAppDispatch(); const { colorMode } = useColorMode(); const { queryID, refreshToken, maxNodes, singleView } = useAppSelector( (state) => state.tracing ); useEffect(() => { if (queryID && maxNodes) { const fetchData = dispatch(fetchSingleView(null)); return () => fetchData.abort('cancel'); } return undefined; }, [queryID, refreshToken, maxNodes]); const getRaw = () => { switch (singleView.type) { case 'loaded': case 'reloading': { return singleView.profile; } default: { return undefined; } } }; const exportToFlamegraphDotComFn = useExportToFlamegraphDotCom(getRaw()); const flamegraphRenderer = (() => { switch (singleView.type) { case 'loaded': case 'reloading': { return ( } /> ); } default: { return 'Loading'; } } })(); const header = singleView.mergeMetadata ? (function (mm) { const { appName, startTime, endTime, profilesLength } = mm; return ( <>
App Name: {appName}
Start Time: {formatTime(startTime)}
End Time: {formatTime(endTime)}
Number of Profiles merged:{' '} {profilesLength}
); })(singleView.mergeMetadata) : null; return (
{header} {flamegraphRenderer}
); } export default TracingSingleView;