import {useMemo} from 'react'; import styled from '@emotion/styled'; import Feature from 'sentry/components/acl/feature'; import {CodeSnippet} from 'sentry/components/codeSnippet'; import {Project} from 'sentry/types'; import {StackTraceMiniFrame} from 'sentry/views/starfish/components/stackTraceMiniFrame'; import {MetricsResponse, SpanMetricsField} from 'sentry/views/starfish/types'; import {SQLishFormatter} from 'sentry/views/starfish/utils/sqlish/SQLishFormatter'; type Props = { span: Pick< MetricsResponse, SpanMetricsField.SPAN_OP | SpanMetricsField.SPAN_DESCRIPTION > & { data?: { 'code.filepath'?: string; 'code.function'?: string; 'code.lineno'?: number; }; }; project?: Project; }; export function SpanDescription({span, project}: Props) { if (span[SpanMetricsField.SPAN_OP]?.startsWith('db')) { return ; } return {span[SpanMetricsField.SPAN_DESCRIPTION]}; } const formatter = new SQLishFormatter(); function DatabaseSpanDescription({span, project}: Props) { const rawDescription = span[SpanMetricsField.SPAN_DESCRIPTION]; const formatterDescription = useMemo(() => { return formatter.toString(rawDescription); }, [rawDescription]); return ( {formatterDescription} {span?.data?.['code.filepath'] && ( )} ); } const Frame = styled('div')` border: solid 1px ${p => p.theme.border}; border-radius: ${p => p.theme.borderRadius}; overflow: hidden; `; const WordBreak = styled('div')` word-break: break-word; `;