diff --git a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanBarRow.tsx b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanBarRow.tsx index 85acdbc28fd..ca2e19992bd 100644 --- a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanBarRow.tsx +++ b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanBarRow.tsx @@ -328,6 +328,7 @@ export type SpanBarRowProps = { clippingLeft?: boolean; clippingRight?: boolean; createSpanLink?: SpanLinkFunc; + datasourceType: string; }; /** @@ -377,6 +378,7 @@ export class UnthemedSpanBarRow extends React.PureComponent { clippingRight, theme, createSpanLink, + datasourceType, } = this.props; const { duration, @@ -515,7 +517,7 @@ export class UnthemedSpanBarRow extends React.PureComponent { ); } else if (links && count > 1) { - return ; + return ; } else { return null; } diff --git a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx index 98e2abd3cbb..b08bca9d7dd 100644 --- a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx +++ b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx @@ -18,6 +18,7 @@ import React from 'react'; import IoLink from 'react-icons/lib/io/link'; import { dateTimeFormat, GrafanaTheme2, LinkModel, TimeZone } from '@grafana/data'; +import { reportInteraction } from '@grafana/runtime'; import { DataLinkButton, TextArea, useStyles2 } from '@grafana/ui'; import { autoColor } from '../../Theme'; @@ -121,6 +122,7 @@ export type SpanDetailProps = { focusedSpanId?: string; createFocusSpanLink: (traceId: string, spanId: string) => LinkModel; topOfViewRefType?: TopOfViewRefType; + datasourceType: string; }; export default function SpanDetail(props: SpanDetailProps) { @@ -140,6 +142,7 @@ export default function SpanDetail(props: SpanDetailProps) { createSpanLink, createFocusSpanLink, topOfViewRefType, + datasourceType, } = props; const { isTagsOpen, @@ -193,6 +196,19 @@ export default function SpanDetail(props: SpanDetailProps) { const styles = useStyles2(getStyles); const links = createSpanLink?.(span); const focusSpanLink = createFocusSpanLink(traceID, spanID); + const logLink = links?.logLinks?.[0] + ? { + ...links?.logLinks?.[0], + onClick: (event: React.MouseEvent) => { + reportInteraction('grafana_traces_trace_view_span_link_clicked', { + datasourceType: datasourceType, + type: 'log', + location: 'spanDetails', + }); + links?.logLinks?.[0].onClick!(event); + }, + } + : undefined; return (
@@ -203,10 +219,9 @@ export default function SpanDetail(props: SpanDetailProps) {
{links?.logLinks?.[0] ? ( - + <> + + ) : null}
diff --git a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetailRow.tsx b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetailRow.tsx index 7766edfd8e6..03af2de9140 100644 --- a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetailRow.tsx +++ b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetailRow.tsx @@ -96,6 +96,7 @@ export type SpanDetailRowProps = { focusedSpanId?: string; createFocusSpanLink: (traceId: string, spanId: string) => LinkModel; topOfViewRefType?: TopOfViewRefType; + datasourceType: string; }; export class UnthemedSpanDetailRow extends React.PureComponent { @@ -132,6 +133,7 @@ export class UnthemedSpanDetailRow extends React.PureComponent
diff --git a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanLinks.tsx b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanLinks.tsx index 36b224e16b5..0380157ce7e 100644 --- a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanLinks.tsx +++ b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanLinks.tsx @@ -1,15 +1,22 @@ import { css } from '@emotion/css'; import React, { useState } from 'react'; +import { reportInteraction } from '@grafana/runtime'; import { useStyles2, MenuGroup, MenuItem, Icon, ContextMenu } from '@grafana/ui'; import { SpanLinks } from '../types/links'; interface SpanLinksProps { links: SpanLinks; + datasourceType: string; } -const renderMenuItems = (links: SpanLinks, styles: ReturnType, closeMenu: () => void) => { +const renderMenuItems = ( + links: SpanLinks, + styles: ReturnType, + closeMenu: () => void, + datasourceType: string +) => { return ( <> {!!links.logLinks?.length ? ( @@ -21,6 +28,11 @@ const renderMenuItems = (links: SpanLinks, styles: ReturnType, onClick={ link.onClick ? (event) => { + reportInteraction('grafana_traces_trace_view_span_link_clicked', { + datasourceType: datasourceType, + type: 'log', + location: 'menu', + }); event?.preventDefault(); link.onClick!(event); closeMenu(); @@ -42,6 +54,11 @@ const renderMenuItems = (links: SpanLinks, styles: ReturnType, onClick={ link.onClick ? (event) => { + reportInteraction('grafana_traces_trace_view_span_link_clicked', { + datasourceType: datasourceType, + type: 'metric', + location: 'menu', + }); event?.preventDefault(); link.onClick!(event); closeMenu(); @@ -63,6 +80,11 @@ const renderMenuItems = (links: SpanLinks, styles: ReturnType, onClick={ link.onClick ? (event) => { + reportInteraction('grafana_traces_trace_view_span_link_clicked', { + datasourceType: datasourceType, + type: 'trace', + location: 'menu', + }); event?.preventDefault(); link.onClick!(event); closeMenu(); @@ -79,7 +101,7 @@ const renderMenuItems = (links: SpanLinks, styles: ReturnType, ); }; -export const SpanLinksMenu = ({ links }: SpanLinksProps) => { +export const SpanLinksMenu = ({ links, datasourceType }: SpanLinksProps) => { const styles = useStyles2(getStyles); const [isMenuOpen, setIsMenuOpen] = useState(false); const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 }); @@ -104,7 +126,7 @@ export const SpanLinksMenu = ({ links }: SpanLinksProps) => { {isMenuOpen ? ( setIsMenuOpen(false)} - renderMenuItems={() => renderMenuItems(links, styles, closeMenu)} + renderMenuItems={() => renderMenuItems(links, styles, closeMenu, datasourceType)} focusOnOpen={true} x={menuPosition.x} y={menuPosition.y} diff --git a/packages/jaeger-ui-components/src/TraceTimelineViewer/VirtualizedTraceView.tsx b/packages/jaeger-ui-components/src/TraceTimelineViewer/VirtualizedTraceView.tsx index 32c80555940..f36bcbc03dc 100644 --- a/packages/jaeger-ui-components/src/TraceTimelineViewer/VirtualizedTraceView.tsx +++ b/packages/jaeger-ui-components/src/TraceTimelineViewer/VirtualizedTraceView.tsx @@ -115,6 +115,7 @@ type TVirtualizedTraceViewOwnProps = { createFocusSpanLink: (traceId: string, spanId: string) => LinkModel; topOfViewRef?: RefObject; topOfViewRefType?: TopOfViewRefType; + datasourceType: string; }; export type VirtualizedTraceViewProps = TVirtualizedTraceViewOwnProps & TExtractUiFindFromStateReturn & TTraceTimeline; @@ -396,6 +397,7 @@ export class UnthemedVirtualizedTraceView extends React.Component ); @@ -492,6 +495,7 @@ export class UnthemedVirtualizedTraceView extends React.Component );