import {useTheme} from '@emotion/react'; import {Button} from 'sentry/components/button'; import {TransactionToProfileButton} from 'sentry/components/profiling/transactionToProfileButton'; import {IconSpan} from 'sentry/icons'; import {t} from 'sentry/locale'; import {getDuration} from 'sentry/utils/formatters'; import useProjects from 'sentry/utils/useProjects'; import {ProfilePreview} from 'sentry/views/performance/newTraceDetails/traceDrawer/details/profiling/profilePreview'; import type {TraceTreeNodeDetailsProps} from 'sentry/views/performance/newTraceDetails/traceDrawer/tabs/traceTreeNodeDetails'; import {getTraceTabTitle} from 'sentry/views/performance/newTraceDetails/traceState/traceTabs'; import {Row} from 'sentry/views/performance/traceDetails/styles'; import {ProfileGroupProvider} from 'sentry/views/profiling/profileGroupProvider'; import {ProfileContext, ProfilesProvider} from 'sentry/views/profiling/profilesProvider'; import { makeTraceNodeBarColor, type MissingInstrumentationNode, } from '../../traceModels/traceTree'; import {TraceDrawerComponents} from './styles'; export function MissingInstrumentationNodeDetails({ node, onParentClick, onTabScrollToNode, organization, }: TraceTreeNodeDetailsProps) { const theme = useTheme(); const {projects} = useProjects(); const parentTransaction = node.parent_transaction; const event = node.previous.value.event || node.next.value.event || null; const project = projects.find(proj => proj.slug === event?.projectSlug); const profileId = event?.contexts?.profile?.profile_id ?? null; return (
{t('Missing Instrumentation')}
{event.projectSlug ? ( {profiles => ( )} ) : null} {parentTransaction ? ( onParentClick(parentTransaction)}> {getTraceTabTitle(parentTransaction)} ) : null} {getDuration(node.value.timestamp - node.value.start_timestamp, 2, true)} {profileId && project?.slug && ( {t('View Profile')} } > {profileId} )} {node.previous.value.op} - {node.previous.value.description} {node.next.value.op} - {node.next.value.description}
); }