Add feature tracking for LogRow.tsx (#56656)

* Add feature tracking for LogRow.tsx

* Add type and logRowUid to reportInteraction

* Rename logs variable
This commit is contained in:
Gareth Dawson 2022-10-11 10:04:43 +01:00 committed by GitHub
parent bc632f239d
commit 10a34a041c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 5 deletions

View File

@ -78,6 +78,7 @@ export interface LogRowModel {
timeUtc: string;
uid: string;
uniqueLabels?: Labels;
datasourceType?: string;
}
export interface LogsModel {

View File

@ -207,7 +207,7 @@ export function dataFrameToLogsModel(
queries?: DataQuery[]
): LogsModel {
const { logSeries } = separateLogsAndMetrics(dataFrame);
const logsModel = logSeriesToLogsModel(logSeries);
const logsModel = logSeriesToLogsModel(logSeries, queries);
if (logsModel) {
// Create histogram metrics from logs using the interval as bucket size for the line count
@ -346,7 +346,7 @@ function getLabelsForFrameRow(fields: LogFields, index: number): Labels {
* Converts dataFrames into LogsModel. This involves merging them into one list, sorting them and computing metadata
* like common labels.
*/
export function logSeriesToLogsModel(logSeries: DataFrame[]): LogsModel | undefined {
export function logSeriesToLogsModel(logSeries: DataFrame[], queries: DataQuery[] = []): LogsModel | undefined {
if (logSeries.length === 0) {
return undefined;
}
@ -432,6 +432,8 @@ export function logSeriesToLogsModel(logSeries: DataFrame[]): LogsModel | undefi
logLevel = getLogLevel(entry);
}
const datasourceType = queries.find((query) => query.refId === series.refId)?.datasource?.type;
rows.push({
entryFieldIndex: stringField.index,
rowIndex: j,
@ -450,6 +452,7 @@ export function logSeriesToLogsModel(logSeries: DataFrame[]): LogsModel | undefi
raw: message,
labels: labels || {},
uid: idField ? idField.values.get(j) : j.toString(),
datasourceType,
});
}
}

View File

@ -12,6 +12,7 @@ import {
GrafanaTheme2,
CoreApp,
} from '@grafana/data';
import { reportInteraction } from '@grafana/runtime';
import { styleMixins, withTheme2, Themeable2, Icon, Tooltip } from '@grafana/ui';
import { checkLogsError, escapeUnescapedString } from '../utils';
@ -108,6 +109,14 @@ class UnThemedLogRow extends PureComponent<Props, State> {
if (!this.props.enableLogDetails) {
return;
}
reportInteraction('grafana_explore_logs_log_details_clicked', {
datasourceType: this.props.row.datasourceType,
type: this.state.showDetails ? 'close' : 'open',
logRowUid: this.props.row.uid,
app: this.props.app,
});
this.setState((state) => {
return {
showDetails: !state.showDetails,

View File

@ -66,9 +66,11 @@ export const LogsPanel: React.FunctionComponent<LogsPanelProps> = ({
// Important to memoize stuff here, as panel rerenders a lot for example when resizing.
const [logRows, deduplicatedRows, commonLabels] = useMemo(() => {
const newResults = data ? dataFrameToLogsModel(data.series, data.request?.intervalMs) : null;
const logRows = newResults?.rows || [];
const commonLabels = newResults?.meta?.find((m) => m.label === COMMON_LABELS);
const logs = data
? dataFrameToLogsModel(data.series, data.request?.intervalMs, undefined, data.request?.targets)
: null;
const logRows = logs?.rows || [];
const commonLabels = logs?.meta?.find((m) => m.label === COMMON_LABELS);
const deduplicatedRows = dedupLogRows(logRows, dedupStrategy);
return [logRows, deduplicatedRows, commonLabels];
}, [data, dedupStrategy]);