DashboardQueryRunner: Implements opt-in subscribe logic (#33370)

* DashboardQueryRunner: Implements opt-in subscribe logic
This commit is contained in:
kay delaney 2021-04-26 13:50:08 +01:00 committed by GitHub
parent a54ac510c4
commit 999f139868
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 1 deletions

View File

@ -1,6 +1,7 @@
import { FieldConfig } from './dataFrame'; import { FieldConfig } from './dataFrame';
import { DataTransformerConfig } from './transformations'; import { DataTransformerConfig } from './transformations';
import { ApplyFieldOverrideOptions } from './fieldOverrides'; import { ApplyFieldOverrideOptions } from './fieldOverrides';
import { PanelPluginDataSupport } from '.';
export type KeyValue<T = any> = Record<string, T>; export type KeyValue<T = any> = Record<string, T>;
@ -168,6 +169,7 @@ export enum NullValueMode {
*/ */
export interface DataConfigSource { export interface DataConfigSource {
configRev?: number; configRev?: number;
dataSupport?: PanelPluginDataSupport;
getTransformations: () => DataTransformerConfig[] | undefined; getTransformations: () => DataTransformerConfig[] | undefined;
getFieldOverrideOptions: () => ApplyFieldOverrideOptions | undefined; getFieldOverrideOptions: () => ApplyFieldOverrideOptions | undefined;
} }

View File

@ -24,6 +24,7 @@ import {
DataTransformerConfig, DataTransformerConfig,
LoadingState, LoadingState,
PanelData, PanelData,
PanelPluginDataSupport,
rangeUtil, rangeUtil,
ScopedVars, ScopedVars,
TimeRange, TimeRange,
@ -66,6 +67,7 @@ export class PanelQueryRunner {
private subscription?: Unsubscribable; private subscription?: Unsubscribable;
private lastResult?: PanelData; private lastResult?: PanelData;
private dataConfigSource: DataConfigSource; private dataConfigSource: DataConfigSource;
private dataSupport?: PanelPluginDataSupport;
constructor(dataConfigSource: DataConfigSource) { constructor(dataConfigSource: DataConfigSource) {
this.subject = new ReplaySubject(1); this.subject = new ReplaySubject(1);
@ -243,7 +245,12 @@ export class PanelQueryRunner {
this.subscription.unsubscribe(); this.subscription.unsubscribe();
} }
this.subscription = mergePanelAndDashData(observable, getDashboardQueryRunner().getResult(panelId)).subscribe({ let panelData = observable;
if (this.dataSupport?.alertStates || this.dataSupport?.annotations) {
panelData = mergePanelAndDashData(observable, getDashboardQueryRunner().getResult(panelId));
}
this.subscription = panelData.subscribe({
next: (data) => { next: (data) => {
this.lastResult = preProcessPanelData(data, this.lastResult); this.lastResult = preProcessPanelData(data, this.lastResult);
// Store preprocessed query results for applying overrides later on in the pipeline // Store preprocessed query results for applying overrides later on in the pipeline