From 73335ebbcb0bee270e7495064ddaf45e6d5c2111 Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Wed, 12 May 2021 12:54:15 +0200 Subject: [PATCH] Logs: Store queries that were run to get log results (#33971) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Store queries that were run to get log results * Fix typing * Update public/app/features/explore/Logs.tsx Co-authored-by: Gábor Farkas * Add changes based on feedback Co-authored-by: Gábor Farkas --- packages/grafana-data/src/types/logs.ts | 2 ++ public/app/core/logs_model.ts | 6 +++++- public/app/features/explore/Logs.tsx | 8 ++++---- public/app/features/explore/LogsContainer.tsx | 7 +++---- public/app/features/explore/LogsNavigation.tsx | 6 +++--- public/app/features/explore/state/query.ts | 2 +- public/app/features/explore/utils/decorators.ts | 11 +++++++++-- 7 files changed, 27 insertions(+), 15 deletions(-) diff --git a/packages/grafana-data/src/types/logs.ts b/packages/grafana-data/src/types/logs.ts index 348dd316587..cbc987b798f 100644 --- a/packages/grafana-data/src/types/logs.ts +++ b/packages/grafana-data/src/types/logs.ts @@ -2,6 +2,7 @@ import { Labels } from './data'; import { GraphSeriesXY } from './graph'; import { DataFrame } from './dataFrame'; import { AbsoluteTimeRange } from './time'; +import { DataQuery } from './datasource'; /** * Mapping of log level abbreviation to canonical log level. @@ -85,6 +86,7 @@ export interface LogsModel { rows: LogRowModel[]; series?: GraphSeriesXY[]; visibleRange?: AbsoluteTimeRange; + queries?: DataQuery[]; } export interface LogSearchMatch { diff --git a/public/app/core/logs_model.ts b/public/app/core/logs_model.ts index 6a7da4df2fc..79c5d7d9755 100644 --- a/public/app/core/logs_model.ts +++ b/public/app/core/logs_model.ts @@ -30,6 +30,7 @@ import { AbsoluteTimeRange, sortInAscendingOrder, rangeUtil, + DataQuery, } from '@grafana/data'; import { getThemeColor } from 'app/core/utils/colors'; import { config } from '@grafana/runtime'; @@ -202,7 +203,8 @@ export function dataFrameToLogsModel( dataFrame: DataFrame[], intervalMs: number | undefined, timeZone: TimeZone, - absoluteRange?: AbsoluteTimeRange + absoluteRange?: AbsoluteTimeRange, + queries?: DataQuery[] ): LogsModel { const { logSeries } = separateLogsAndMetrics(dataFrame); const logsModel = logSeriesToLogsModel(logSeries); @@ -225,6 +227,7 @@ export function dataFrameToLogsModel( } else { logsModel.series = []; } + logsModel.queries = queries; return logsModel; } @@ -233,6 +236,7 @@ export function dataFrameToLogsModel( rows: [], meta: [], series: [], + queries, }; } diff --git a/public/app/features/explore/Logs.tsx b/public/app/features/explore/Logs.tsx index d921ad91ef0..0b538c1ff0d 100644 --- a/public/app/features/explore/Logs.tsx +++ b/public/app/features/explore/Logs.tsx @@ -47,6 +47,7 @@ interface Props { logRows: LogRowModel[]; logsMeta?: LogsMetaItem[]; logsSeries?: GraphSeriesXY[]; + logsQueries?: DataQuery[]; visibleRange?: AbsoluteTimeRange; width: number; theme: GrafanaTheme; @@ -56,7 +57,6 @@ interface Props { timeZone: TimeZone; scanning?: boolean; scanRange?: RawTimeRange; - queries: DataQuery[]; showContextToggle?: (row?: LogRowModel) => boolean; onChangeTime: (range: AbsoluteTimeRange) => void; onClickFilterLabel?: (key: string, value: string) => void; @@ -243,7 +243,7 @@ export class UnthemedLogs extends PureComponent { onChangeTime, getFieldLinks, theme, - queries, + logsQueries, } = this.props; const { @@ -353,12 +353,12 @@ export class UnthemedLogs extends PureComponent { diff --git a/public/app/features/explore/LogsContainer.tsx b/public/app/features/explore/LogsContainer.tsx index f6cc9ac2f50..47bcfdfe216 100644 --- a/public/app/features/explore/LogsContainer.tsx +++ b/public/app/features/explore/LogsContainer.tsx @@ -64,6 +64,7 @@ export class LogsContainer extends PureComponent @@ -156,7 +156,6 @@ function mapStateToProps(state: StoreState, { exploreId }: { exploreId: string } isPaused, range, absoluteRange, - queries, } = item; const timeZone = getTimeZone(state.user); @@ -166,6 +165,7 @@ function mapStateToProps(state: StoreState, { exploreId }: { exploreId: string } logRows: logsResult?.rows, logsMeta: logsResult?.meta, logsSeries: logsResult?.series, + logsQueries: logsResult?.queries, visibleRange: logsResult?.visibleRange, scanning, timeZone, @@ -174,7 +174,6 @@ function mapStateToProps(state: StoreState, { exploreId }: { exploreId: string } isPaused, range, absoluteRange, - queries, }; } diff --git a/public/app/features/explore/LogsNavigation.tsx b/public/app/features/explore/LogsNavigation.tsx index 9b4ae51dc24..37249b6c8fc 100644 --- a/public/app/features/explore/LogsNavigation.tsx +++ b/public/app/features/explore/LogsNavigation.tsx @@ -10,7 +10,7 @@ type Props = { timeZone: TimeZone; queries: DataQuery[]; loading: boolean; - visibleRange?: AbsoluteTimeRange; + visibleRange: AbsoluteTimeRange; logsSortOrder?: LogsSortOrder | null; onChangeTime: (range: AbsoluteTimeRange) => void; scrollToTopLogs: () => void; @@ -28,8 +28,8 @@ function LogsNavigation({ loading, onChangeTime, scrollToTopLogs, - visibleRange = absoluteRange, - queries = [], + visibleRange, + queries, }: Props) { const [pages, setPages] = useState([]); const [currentPageIndex, setCurrentPageIndex] = useState(0); diff --git a/public/app/features/explore/state/query.ts b/public/app/features/explore/state/query.ts index 4e3785ce37e..c7a38911f17 100644 --- a/public/app/features/explore/state/query.ts +++ b/public/app/features/explore/state/query.ts @@ -357,7 +357,7 @@ export const runQueries = (exploreId: ExploreId, options?: { replaceUrl?: boolea map((data: PanelData) => preProcessPanelData(data, queryResponse)), map(decorateWithFrameTypeMetadata), map(decorateWithGraphResult), - map(decorateWithLogsResult({ absoluteRange, refreshInterval })), + map(decorateWithLogsResult({ absoluteRange, refreshInterval, queries })), mergeMap(decorateWithTableResult) ) .subscribe( diff --git a/public/app/features/explore/utils/decorators.ts b/public/app/features/explore/utils/decorators.ts index cce53862930..dfd2fd4f135 100644 --- a/public/app/features/explore/utils/decorators.ts +++ b/public/app/features/explore/utils/decorators.ts @@ -6,6 +6,7 @@ import { PanelData, sortLogsResult, standardTransformers, + DataQuery, } from '@grafana/data'; import { config } from '@grafana/runtime'; import { groupBy } from 'lodash'; @@ -129,7 +130,7 @@ export const decorateWithTableResult = (data: ExplorePanelData): Observable (data: ExplorePanelData): ExplorePanelData => { if (data.logsFrames.length === 0) { return { ...data, logsResult: null }; @@ -137,7 +138,13 @@ export const decorateWithLogsResult = ( const timeZone = data.request?.timezone ?? 'browser'; const intervalMs = data.request?.intervalMs; - const newResults = dataFrameToLogsModel(data.logsFrames, intervalMs, timeZone, options.absoluteRange); + const newResults = dataFrameToLogsModel( + data.logsFrames, + intervalMs, + timeZone, + options.absoluteRange, + options.queries + ); const sortOrder = refreshIntervalToSortOrder(options.refreshInterval); const sortedNewResults = sortLogsResult(newResults, sortOrder); const rows = sortedNewResults.rows;