diff --git a/packages/grafana-data/src/types/data.ts b/packages/grafana-data/src/types/data.ts index 619bd0f3c5c..da307b716b8 100644 --- a/packages/grafana-data/src/types/data.ts +++ b/packages/grafana-data/src/types/data.ts @@ -15,7 +15,7 @@ export enum LoadingState { Error = 'Error', } -type PreferredVisualisationType = 'graph' | 'table'; +export type PreferredVisualisationType = 'graph' | 'table'; export interface QueryResultMeta { /** DatasSource Specific Values */ diff --git a/public/app/core/table_model.ts b/public/app/core/table_model.ts index 3ffdeeb8ad8..fc387bae773 100644 --- a/public/app/core/table_model.ts +++ b/public/app/core/table_model.ts @@ -1,5 +1,5 @@ import _ from 'lodash'; -import { Column, TableData } from '@grafana/data'; +import { Column, TableData, QueryResultMeta } from '@grafana/data'; /** * Extends the standard Column class with variables that get @@ -18,6 +18,7 @@ export default class TableModel implements TableData { type: string; columnMap: any; refId: string; + meta?: QueryResultMeta; constructor(table?: any) { this.columns = []; diff --git a/public/app/features/explore/utils/ResultProcessor.ts b/public/app/features/explore/utils/ResultProcessor.ts index cd6eb7454ba..28547e1da02 100644 --- a/public/app/features/explore/utils/ResultProcessor.ts +++ b/public/app/features/explore/utils/ResultProcessor.ts @@ -7,6 +7,7 @@ import { toDataFrame, getDisplayProcessor, ExploreMode, + PreferredVisualisationType, } from '@grafana/data'; import { ExploreItemState } from 'app/types/explore'; import TableModel, { mergeTablesIntoModel } from 'app/core/table_model'; @@ -29,13 +30,14 @@ export class ResultProcessor { } const onlyTimeSeries = this.dataFrames.filter(frame => isTimeSeries(frame, this.state.datasourceInstance?.meta.id)); + const timeSeriesToShowInGraph = onlyTimeSeries.filter(frame => shouldShowInVisualisationType(frame, 'graph')); - if (onlyTimeSeries.length === 0) { + if (timeSeriesToShowInGraph.length === 0) { return null; } return getGraphSeriesModel( - onlyTimeSeries, + timeSeriesToShowInGraph, this.timeZone, {}, { showBars: false, showLines: true, showPoints: false }, @@ -48,7 +50,7 @@ export class ResultProcessor { return null; } - const onlyTables = this.dataFrames.filter(frame => shouldShowInTable(frame)); + const onlyTables = this.dataFrames.filter(frame => shouldShowInVisualisationType(frame, 'table')); if (onlyTables.length === 0) { return null; @@ -125,8 +127,8 @@ function isTimeSeries(frame: DataFrame, datasource?: string): boolean { return false; } -function shouldShowInTable(frame: DataFrame) { - if (frame.meta?.preferredVisualisationType && frame.meta?.preferredVisualisationType !== 'table') { +function shouldShowInVisualisationType(frame: DataFrame, visualisation: PreferredVisualisationType) { + if (frame.meta?.preferredVisualisationType && frame.meta?.preferredVisualisationType !== visualisation) { return false; } diff --git a/public/app/plugins/datasource/prometheus/result_transformer.ts b/public/app/plugins/datasource/prometheus/result_transformer.ts index 858780bdcd4..5f601a2faa6 100644 --- a/public/app/plugins/datasource/prometheus/result_transformer.ts +++ b/public/app/plugins/datasource/prometheus/result_transformer.ts @@ -1,6 +1,6 @@ import _ from 'lodash'; import TableModel from 'app/core/table_model'; -import { TimeSeries, FieldType, Labels, formatLabels } from '@grafana/data'; +import { TimeSeries, FieldType, Labels, formatLabels, QueryResultMeta } from '@grafana/data'; import { TemplateSrv } from 'app/features/templating/template_srv'; export class ResultTransformer { @@ -15,6 +15,7 @@ export class ResultTransformer { prometheusResult, options.responseListLength, options.refId, + options.meta, options.valueWithRefId ), ]; @@ -81,9 +82,16 @@ export class ResultTransformer { }; } - transformMetricDataToTable(md: any, resultCount: number, refId: string, valueWithRefId?: boolean): TableModel { + transformMetricDataToTable( + md: any, + resultCount: number, + refId: string, + meta: QueryResultMeta, + valueWithRefId?: boolean + ): TableModel { const table = new TableModel(); table.refId = refId; + table.meta = meta; let i: number, j: number; const metricLabels: { [key: string]: number } = {};