diff --git a/public/app/features/logs/components/LogDetails.tsx b/public/app/features/logs/components/LogDetails.tsx index 4c71f4e1340..4ca59b00ed5 100644 --- a/public/app/features/logs/components/LogDetails.tsx +++ b/public/app/features/logs/components/LogDetails.tsx @@ -109,6 +109,7 @@ class UnThemedLogDetails extends PureComponent { getStats={() => calculateLogsLabelStats(getRows(), key)} onClickFilterOutLabel={onClickFilterOutLabel} onClickFilterLabel={onClickFilterLabel} + row={row} /> ); })} @@ -146,6 +147,7 @@ class UnThemedLogDetails extends PureComponent { } showDetectedFields={showDetectedFields} wrapLogMessage={wrapLogMessage} + row={row} /> ); })} diff --git a/public/app/features/logs/components/LogDetailsRow.test.tsx b/public/app/features/logs/components/LogDetailsRow.test.tsx index bf5583b6511..1d13b415ce5 100644 --- a/public/app/features/logs/components/LogDetailsRow.test.tsx +++ b/public/app/features/logs/components/LogDetailsRow.test.tsx @@ -2,6 +2,8 @@ import { screen, render, fireEvent } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React, { ComponentProps } from 'react'; +import { LogRowModel } from '@grafana/data'; + import { LogDetailsRow } from './LogDetailsRow'; type Props = ComponentProps; @@ -18,6 +20,7 @@ const setup = (propOverrides?: Partial) => { onClickShowDetectedField: () => {}, onClickHideDetectedField: () => {}, showDetectedFields: [], + row: {} as LogRowModel, }; Object.assign(props, propOverrides); @@ -31,6 +34,11 @@ const setup = (propOverrides?: Partial) => { ); }; +jest.mock('@grafana/runtime', () => ({ + ...jest.requireActual('@grafana/runtime'), + reportInteraction: jest.fn(), +})); + describe('LogDetailsRow', () => { it('should render parsed key', () => { setup({ parsedKey: 'test key' }); diff --git a/public/app/features/logs/components/LogDetailsRow.tsx b/public/app/features/logs/components/LogDetailsRow.tsx index 9bd82f5d680..98ab07c4404 100644 --- a/public/app/features/logs/components/LogDetailsRow.tsx +++ b/public/app/features/logs/components/LogDetailsRow.tsx @@ -1,7 +1,8 @@ import { css, cx } from '@emotion/css'; import React, { PureComponent } from 'react'; -import { Field, LinkModel, LogLabelStatsModel, GrafanaTheme2 } from '@grafana/data'; +import { Field, LinkModel, LogLabelStatsModel, GrafanaTheme2, LogRowModel } from '@grafana/data'; +import { reportInteraction } from '@grafana/runtime'; import { withTheme2, Themeable2, ClipboardButton, DataLinkButton, IconButton } from '@grafana/ui'; import { LogLabelStats } from './LogLabelStats'; @@ -21,6 +22,7 @@ export interface Props extends Themeable2 { showDetectedFields?: string[]; onClickShowDetectedField?: (key: string) => void; onClickHideDetectedField?: (key: string) => void; + row: LogRowModel; } interface State { @@ -108,6 +110,13 @@ class UnThemedLogDetailsRow extends PureComponent { this.setState({ fieldStats, fieldCount }); } this.toggleFieldsStats(); + + reportInteraction('grafana_explore_logs_log_details_stats_clicked', { + dataSourceType: this.props.row.datasourceType, + fieldType: this.props.isLabel ? 'label' : 'detectedField', + type: showFieldsStats ? 'close' : 'open', + logRowUid: this.props.row.uid, + }); }; toggleFieldsStats() {