@grafana/scenes 4.12.1 → 4.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/esm/querying/SceneQueryRunner.js +18 -5
- package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +18 -5
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# v4.12.2 (Wed Apr 24 2024)
|
|
2
|
+
|
|
3
|
+
#### 🐛 Bug Fix
|
|
4
|
+
|
|
5
|
+
- SceneQueryRunner: Support detecting new local time range [#707](https://github.com/grafana/scenes/pull/707) ([@torkelo](https://github.com/torkelo))
|
|
6
|
+
|
|
7
|
+
#### Authors: 1
|
|
8
|
+
|
|
9
|
+
- Torkel Ödegaard ([@torkelo](https://github.com/torkelo))
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
# v4.12.1 (Tue Apr 23 2024)
|
|
2
14
|
|
|
3
15
|
#### 🐛 Bug Fix
|
|
@@ -148,11 +148,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
148
148
|
})
|
|
149
149
|
);
|
|
150
150
|
}
|
|
151
|
-
this.
|
|
152
|
-
timeRange.subscribeToState(() => {
|
|
153
|
-
this.runWithTimeRange(timeRange);
|
|
154
|
-
})
|
|
155
|
-
);
|
|
151
|
+
this.subscribeToTimeRangeChanges(timeRange);
|
|
156
152
|
if (this.shouldRunQueriesOnActivate()) {
|
|
157
153
|
this.runQueries();
|
|
158
154
|
}
|
|
@@ -256,6 +252,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
256
252
|
return true;
|
|
257
253
|
}
|
|
258
254
|
_onDeactivate() {
|
|
255
|
+
var _a;
|
|
259
256
|
if (this._querySub) {
|
|
260
257
|
this._querySub.unsubscribe();
|
|
261
258
|
this._querySub = void 0;
|
|
@@ -264,6 +261,9 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
264
261
|
this._dataLayersSub.unsubscribe();
|
|
265
262
|
this._dataLayersSub = void 0;
|
|
266
263
|
}
|
|
264
|
+
(_a = this._timeSub) == null ? void 0 : _a.unsubscribe();
|
|
265
|
+
this._timeSub = void 0;
|
|
266
|
+
this._timeSubRange = void 0;
|
|
267
267
|
this._adhocFiltersVar = void 0;
|
|
268
268
|
this._groupByVar = void 0;
|
|
269
269
|
this._variableValueRecorder.recordCurrentDependencyValuesForSceneObject(this);
|
|
@@ -287,8 +287,21 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
287
287
|
isDataReadyToDisplay() {
|
|
288
288
|
return Boolean(this.state._hasFetchedData);
|
|
289
289
|
}
|
|
290
|
+
subscribeToTimeRangeChanges(timeRange) {
|
|
291
|
+
if (this._timeSubRange === timeRange) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (this._timeSub) {
|
|
295
|
+
this._timeSub.unsubscribe();
|
|
296
|
+
}
|
|
297
|
+
this._timeSubRange = timeRange;
|
|
298
|
+
this._timeSub = timeRange.subscribeToState(() => {
|
|
299
|
+
this.runWithTimeRange(timeRange);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
290
302
|
runQueries() {
|
|
291
303
|
const timeRange = sceneGraph.getTimeRange(this);
|
|
304
|
+
this.subscribeToTimeRangeChanges(timeRange);
|
|
292
305
|
this.runWithTimeRange(timeRange);
|
|
293
306
|
}
|
|
294
307
|
getMaxDataPoints() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneQueryRunner.js","sources":["../../../src/querying/SceneQueryRunner.ts"],"sourcesContent":["import { cloneDeep } from 'lodash';\nimport { forkJoin, ReplaySubject, Unsubscribable } from 'rxjs';\n\nimport { DataQuery, DataSourceRef, LoadingState } from '@grafana/schema';\n\nimport {\n AlertStateInfo,\n DataFrame,\n DataFrameView,\n DataQueryRequest,\n DataSourceApi,\n DataTopic,\n PanelData,\n preProcessPanelData,\n rangeUtil,\n} from '@grafana/data';\n\n// TODO: Remove this ignore annotation when the grafana runtime dependency has been updated\n// @ts-ignore\nimport { getRunRequest, toDataQueryError, isExpressionReference} from '@grafana/runtime';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport {\n DataLayerFilter,\n SceneDataProvider,\n SceneDataProviderResult,\n SceneObjectState,\n SceneTimeRangeLike,\n} from '../core/types';\nimport { getDataSource } from '../utils/getDataSource';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { VariableValueRecorder } from '../variables/VariableValueRecorder';\nimport { emptyPanelData } from '../core/SceneDataNode';\nimport { SceneTimeRangeCompare } from '../components/SceneTimeRangeCompare';\nimport { getClosest } from '../core/sceneGraph/utils';\nimport { timeShiftQueryResponseOperator } from './timeShiftQueryResponseOperator';\nimport { filterAnnotations } from './layers/annotations/filterAnnotations';\nimport { getEnrichedDataRequest } from './getEnrichedDataRequest';\nimport { findActiveAdHocFilterVariableByUid } from '../variables/adhoc/patchGetAdhocFilters';\nimport { registerQueryWithController } from './registerQueryWithController';\nimport { findActiveGroupByVariablesByUid } from '../variables/groupby/findActiveGroupByVariablesByUid';\nimport { GroupByVariable } from '../variables/groupby/GroupByVariable';\nimport { AdHocFiltersVariable } from '../variables/adhoc/AdHocFiltersVariable';\nimport { SceneVariable } from '../variables/types';\nimport { mergeMultipleDataLayers } from './mergeMultipleDataLayers';\n\nlet counter = 100;\n\nexport function getNextRequestId() {\n return 'SQR' + counter++;\n}\n\nexport interface QueryRunnerState extends SceneObjectState {\n data?: PanelData;\n queries: DataQueryExtended[];\n datasource?: DataSourceRef;\n minInterval?: string;\n maxDataPoints?: number;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n cacheTimeout?: DataQueryRequest['cacheTimeout'];\n queryCachingTTL?: DataQueryRequest['queryCachingTTL'];\n // Filters to be applied to data layer results before combining them with SQR results\n dataLayerFilter?: DataLayerFilter;\n // Private runtime state\n _hasFetchedData?: boolean;\n}\n\nexport interface DataQueryExtended extends DataQuery {\n [key: string]: any;\n\n // Opt this query out of time window comparison\n timeRangeCompare?: boolean;\n}\n\nexport class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {\n private _querySub?: Unsubscribable;\n private _dataLayersSub?: Unsubscribable;\n private _containerWidth?: number;\n private _variableValueRecorder = new VariableValueRecorder();\n private _results = new ReplaySubject<SceneDataProviderResult>(1);\n private _scopedVars = { __sceneObject: { value: this, text: '__sceneObject' } };\n private _layerAnnotations?: DataFrame[];\n private _resultAnnotations?: DataFrame[];\n\n private _adhocFiltersVar?: AdHocFiltersVariable;\n private _groupByVar?: GroupByVariable;\n\n public getResultsStream() {\n return this._results;\n }\n\n protected _variableDependency: VariableDependencyConfig<QueryRunnerState> = new VariableDependencyConfig(this, {\n statePaths: ['queries', 'datasource'],\n onVariableUpdateCompleted: this.onVariableUpdatesCompleted.bind(this),\n onAnyVariableChanged: this.onAnyVariableChanged.bind(this),\n });\n\n public constructor(initialState: QueryRunnerState) {\n super(initialState);\n\n this.addActivationHandler(() => this._onActivate());\n }\n\n private _onActivate() {\n const timeRange = sceneGraph.getTimeRange(this);\n const comparer = this.getTimeCompare();\n\n if (comparer) {\n this._subs.add(\n comparer.subscribeToState((n, p) => {\n if (n.compareWith !== p.compareWith) {\n this.runQueries();\n }\n })\n );\n }\n\n this._subs.add(\n timeRange.subscribeToState(() => {\n this.runWithTimeRange(timeRange);\n })\n );\n\n if (this.shouldRunQueriesOnActivate()) {\n this.runQueries();\n }\n\n if (!this._dataLayersSub) {\n this._handleDataLayers();\n }\n\n return () => this._onDeactivate();\n }\n\n // This method subscribes to all SceneDataLayers up until the root, and combines the results into data provided from SceneQueryRunner\n private _handleDataLayers() {\n const dataLayers = sceneGraph.getDataLayers(this);\n\n if (dataLayers.length === 0) {\n return;\n }\n\n this._dataLayersSub = mergeMultipleDataLayers(dataLayers).subscribe(this._onLayersReceived.bind(this));\n }\n\n private _onLayersReceived(results: Iterable<SceneDataProviderResult>) {\n const timeRange = sceneGraph.getTimeRange(this);\n const { dataLayerFilter } = this.state;\n\n let annotations: DataFrame[] = [];\n let alertStates: DataFrame[] = [];\n let alertState: AlertStateInfo | undefined;\n\n for (const result of results) {\n for (let frame of result.data.series) {\n if (frame.meta?.dataTopic === DataTopic.Annotations) {\n annotations = annotations.concat(frame);\n }\n if (frame.meta?.dataTopic === DataTopic.AlertStates) {\n alertStates = alertStates.concat(frame);\n }\n }\n }\n\n if (dataLayerFilter?.panelId) {\n if (annotations.length > 0) {\n annotations = filterAnnotations(annotations, dataLayerFilter);\n }\n\n if (alertStates.length > 0) {\n for (const frame of alertStates) {\n const frameView = new DataFrameView<AlertStateInfo>(frame);\n\n for (const row of frameView) {\n if (row.panelId === dataLayerFilter.panelId) {\n alertState = row;\n break;\n }\n }\n }\n }\n }\n\n const baseStateUpdate = this.state.data ? this.state.data : { ...emptyPanelData, timeRange: timeRange.state.value };\n\n this._layerAnnotations = annotations;\n this.setState({\n data: {\n ...baseStateUpdate,\n annotations: [...(this._resultAnnotations ?? []), ...annotations],\n alertState: alertState ?? this.state.data?.alertState,\n },\n });\n }\n\n /**\n * This tries to start a new query whenever a variable completes or is changed.\n *\n * We care about variable update completions even when the variable has not changed and even when it is not a direct dependency.\n * Example: Variables A and B (B depends on A). A update depends on time range. So when time change query runner will\n * find that variable A is loading which is a dependency on of variable B so will set _isWaitingForVariables to true and\n * not issue any query.\n *\n * When A completes it's loading (with no value change, so B never updates) it will cause a call of this function letting\n * the query runner know that A has completed, and in case _isWaitingForVariables we try to run the query. The query will\n * only run if all variables are in a non loading state so in other scenarios where a query depends on many variables this will\n * be called many times until all dependencies are in a non loading state. *\n */\n private onVariableUpdatesCompleted() {\n this.runQueries();\n }\n\n /**\n * Check if value changed is a adhoc filter o group by variable that did not exist when we issued the last query\n */\n private onAnyVariableChanged(variable: SceneVariable) {\n // If this variable has already been detected this variable as a dependency onVariableUpdatesCompleted above will handle value changes\n if (this._adhocFiltersVar === variable || this._groupByVar === variable) {\n return;\n }\n\n if (variable instanceof AdHocFiltersVariable && this._isRelevantAutoVariable(variable)) {\n this.runQueries();\n }\n\n if (variable instanceof GroupByVariable && this._isRelevantAutoVariable(variable)) {\n this.runQueries();\n }\n }\n\n private _isRelevantAutoVariable(variable: AdHocFiltersVariable | GroupByVariable) {\n const datasource = this.state.datasource ?? findFirstDatasource(this.state.queries);\n return variable.state.applyMode === 'auto' && datasource?.uid === variable.state.datasource?.uid;\n }\n\n private shouldRunQueriesOnActivate() {\n if (this._variableValueRecorder.hasDependenciesChanged(this)) {\n writeSceneLog(\n 'SceneQueryRunner',\n 'Variable dependency changed while inactive, shouldRunQueriesOnActivate returns true'\n );\n return true;\n }\n\n // If we don't have any data we should run queries\n if (!this.state.data) {\n return true;\n }\n\n // If time range is stale / different we should run queries\n if (this._isDataTimeRangeStale(this.state.data)) {\n return true;\n }\n\n return false;\n }\n\n private _isDataTimeRangeStale(data: PanelData) {\n const timeRange = sceneGraph.getTimeRange(this);\n\n const stateTimeRange = timeRange.state.value;\n const dataTimeRange = data.timeRange;\n\n if (\n stateTimeRange.from.unix() === dataTimeRange.from.unix() &&\n stateTimeRange.to.unix() === dataTimeRange.to.unix()\n ) {\n return false;\n }\n writeSceneLog('SceneQueryRunner', 'Data time range is stale');\n return true;\n }\n\n private _onDeactivate(): void {\n if (this._querySub) {\n this._querySub.unsubscribe();\n this._querySub = undefined;\n }\n\n if (this._dataLayersSub) {\n this._dataLayersSub.unsubscribe();\n this._dataLayersSub = undefined;\n }\n\n this._adhocFiltersVar = undefined;\n this._groupByVar = undefined;\n this._variableValueRecorder.recordCurrentDependencyValuesForSceneObject(this);\n }\n\n public setContainerWidth(width: number) {\n // If we don't have a width we should run queries\n if (!this._containerWidth && width > 0) {\n this._containerWidth = width;\n\n // If we don't have maxDataPoints specifically set and maxDataPointsFromWidth is true\n if (this.state.maxDataPointsFromWidth && !this.state.maxDataPoints) {\n // As this is called from render path we need to wait for next tick before running queries\n setTimeout(() => {\n if (this.isActive && !this.state._hasFetchedData) {\n this.runQueries();\n }\n }, 0);\n }\n } else {\n // if the updated container width is bigger than 0 let's remember the width until next query issue\n if (width > 0) {\n this._containerWidth = width;\n }\n }\n }\n\n public isDataReadyToDisplay() {\n return Boolean(this.state._hasFetchedData);\n }\n\n public runQueries() {\n const timeRange = sceneGraph.getTimeRange(this);\n this.runWithTimeRange(timeRange);\n }\n\n private getMaxDataPoints() {\n if (this.state.maxDataPoints) {\n return this.state.maxDataPoints;\n }\n\n return this.state.maxDataPointsFromWidth ? this._containerWidth ?? 500 : 500;\n }\n\n public cancelQuery() {\n this._querySub?.unsubscribe();\n\n if (this._dataLayersSub) {\n this._dataLayersSub.unsubscribe();\n this._dataLayersSub = undefined;\n }\n\n this.setState({\n data: { ...this.state.data!, state: LoadingState.Done },\n });\n }\n\n private async runWithTimeRange(timeRange: SceneTimeRangeLike) {\n // If no maxDataPoints specified we might need to wait for container width to be set from the outside\n if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {\n return;\n }\n\n // If data layers subscription doesn't exist, create one\n if (!this._dataLayersSub) {\n this._handleDataLayers();\n }\n\n // Cancel any running queries\n this._querySub?.unsubscribe();\n\n // Skip executing queries if variable dependency is in loading state\n if (this._variableDependency.hasDependencyInLoadingState()) {\n writeSceneLog('SceneQueryRunner', 'Variable dependency is in loading state, skipping query execution');\n return;\n }\n\n const { queries } = this.state;\n\n // Simple path when no queries exist\n if (!queries?.length) {\n this._setNoDataState();\n return;\n }\n\n try {\n const datasource = this.state.datasource ?? findFirstDatasource(queries);\n const ds = await getDataSource(datasource, this._scopedVars);\n\n this.findAndSubscribeToAdHocFilters(datasource?.uid);\n\n const runRequest = getRunRequest();\n const [request, secondaryRequest] = this.prepareRequests(timeRange, ds);\n\n writeSceneLog('SceneQueryRunner', 'Starting runRequest', this.state.key);\n\n let stream = runRequest(ds, request);\n\n if (secondaryRequest) {\n // change subscribe callback below to pipe operator\n stream = forkJoin([stream, runRequest(ds, secondaryRequest)]).pipe(timeShiftQueryResponseOperator);\n }\n\n stream = stream.pipe(\n registerQueryWithController({\n type: 'data',\n request,\n origin: this,\n cancel: () => this.cancelQuery(),\n })\n );\n\n this._querySub = stream.subscribe(this.onDataReceived);\n } catch (err) {\n console.error('PanelQueryRunner Error', err);\n\n this.onDataReceived({\n ...emptyPanelData,\n ...this.state.data,\n state: LoadingState.Error,\n errors: [toDataQueryError(err)],\n });\n }\n }\n\n public clone(withState?: Partial<QueryRunnerState>) {\n const clone = super.clone(withState);\n\n if (this._resultAnnotations) {\n clone['_resultAnnotations'] = this._resultAnnotations.map((frame) => ({ ...frame }));\n }\n\n if (this._layerAnnotations) {\n clone['_layerAnnotations'] = this._layerAnnotations.map((frame) => ({ ...frame }));\n }\n\n clone['_results'].next({ origin: this, data: this.state.data ?? emptyPanelData });\n\n return clone;\n }\n\n private prepareRequests = (\n timeRange: SceneTimeRangeLike,\n ds: DataSourceApi\n ): [DataQueryRequest, DataQueryRequest | undefined] => {\n const comparer = this.getTimeCompare();\n const { minInterval, queries } = this.state;\n\n let secondaryRequest: DataQueryRequest | undefined;\n\n let request: DataQueryRequest<DataQueryExtended> = {\n app: 'scenes',\n requestId: getNextRequestId(),\n timezone: timeRange.getTimeZone(),\n panelId: 1,\n range: timeRange.state.value,\n interval: '1s',\n intervalMs: 1000,\n targets: cloneDeep(queries),\n maxDataPoints: this.getMaxDataPoints(),\n scopedVars: this._scopedVars,\n startTime: Date.now(),\n liveStreaming: this.state.liveStreaming,\n rangeRaw: {\n from: timeRange.state.from,\n to: timeRange.state.to,\n },\n cacheTimeout: this.state.cacheTimeout,\n queryCachingTTL: this.state.queryCachingTTL,\n // This asks the scene root to provide context properties like app, panel and dashboardUID\n ...getEnrichedDataRequest(this),\n };\n\n if (this._adhocFiltersVar) {\n // @ts-ignore (Temporary ignore until we update @grafana/data)\n request.filters = this._adhocFiltersVar.state.filters;\n }\n\n if (this._groupByVar) {\n // @ts-ignore (Temporary ignore until we update @grafana/data)\n request.groupByKeys = this._groupByVar.state.value;\n }\n\n request.targets = request.targets.map((query) => {\n if (\n !query.datasource ||\n (query.datasource.uid !== ds.uid && !ds.meta?.mixed && isExpressionReference /* TODO: Remove this check when isExpressionReference is properly exported from grafan runtime */ && !isExpressionReference(query.datasource))\n ) {\n query.datasource = ds.getRef();\n }\n return query;\n });\n\n // TODO interpolate minInterval\n const lowerIntervalLimit = minInterval ? minInterval : ds.interval;\n const norm = rangeUtil.calculateInterval(timeRange.state.value, request.maxDataPoints!, lowerIntervalLimit);\n\n // make shallow copy of scoped vars,\n // and add built in variables interval and interval_ms\n request.scopedVars = Object.assign({}, request.scopedVars, {\n __interval: { text: norm.interval, value: norm.interval },\n __interval_ms: { text: norm.intervalMs.toString(), value: norm.intervalMs },\n });\n\n request.interval = norm.interval;\n request.intervalMs = norm.intervalMs;\n\n const primaryTimeRange = timeRange.state.value;\n if (comparer) {\n const secondaryTimeRange = comparer.getCompareTimeRange(primaryTimeRange);\n if (secondaryTimeRange) {\n const secondaryTargets = request.targets.filter((query: DataQueryExtended) => query.timeRangeCompare !== false);\n\n if (secondaryTargets.length) {\n secondaryRequest = {\n ...request,\n targets: secondaryTargets,\n range: secondaryTimeRange,\n requestId: getNextRequestId(),\n };\n }\n\n request = {\n ...request,\n range: primaryTimeRange,\n };\n }\n }\n\n return [request, secondaryRequest];\n };\n\n private onDataReceived = (data: PanelData) => {\n // Will combine annotations from SQR queries (frames with meta.dataTopic === DataTopic.Annotations)\n const preProcessedData = preProcessPanelData(data, this.state.data);\n\n // Will combine annotations & alert state from data layer providers\n const dataWithLayersApplied = this._combineDataLayers(preProcessedData);\n\n let hasFetchedData = this.state._hasFetchedData;\n\n if (!hasFetchedData && preProcessedData.state !== LoadingState.Loading) {\n hasFetchedData = true;\n }\n\n this._resultAnnotations = data.annotations;\n\n this.setState({ data: dataWithLayersApplied, _hasFetchedData: hasFetchedData });\n\n this._results.next({ origin: this, data: dataWithLayersApplied });\n };\n\n private _combineDataLayers(data: PanelData) {\n if (this.state.data && this.state.data.annotations) {\n data.annotations = (data.annotations || []).concat(this._layerAnnotations ?? []);\n }\n\n if (this.state.data && this.state.data.alertState) {\n data.alertState = this.state.data.alertState;\n }\n\n return data;\n }\n\n private _setNoDataState() {\n if (this.state.data !== emptyPanelData) {\n this.setState({ data: emptyPanelData });\n }\n }\n\n /**\n * Will walk up the scene graph and find the closest time range compare object\n * It performs buttom-up search, including shallow search across object children for supporting controls/header actions\n */\n private getTimeCompare() {\n if (!this.parent) {\n return null;\n }\n return getClosest(this.parent, (s) => {\n let found = null;\n if (s instanceof SceneTimeRangeCompare) {\n return s;\n }\n s.forEachChild((child) => {\n if (child instanceof SceneTimeRangeCompare) {\n found = child;\n }\n });\n\n return found;\n });\n }\n\n /**\n * Walk up scene graph and find the closest filterset with matching data source\n */\n private findAndSubscribeToAdHocFilters(uid: string | undefined) {\n const filtersVar = findActiveAdHocFilterVariableByUid(uid);\n\n if (this._adhocFiltersVar !== filtersVar) {\n this._adhocFiltersVar = filtersVar;\n this._updateExplicitVariableDependencies();\n }\n\n const groupByVar = findActiveGroupByVariablesByUid(uid);\n if (this._groupByVar !== groupByVar) {\n this._groupByVar = groupByVar;\n this._updateExplicitVariableDependencies();\n }\n }\n\n private _updateExplicitVariableDependencies() {\n const explicitDependencies: string[] = [];\n\n if (this._adhocFiltersVar) {\n explicitDependencies.push(this._adhocFiltersVar.state.name);\n }\n\n if (this._groupByVar) {\n explicitDependencies.push(this._groupByVar.state.name);\n }\n\n this._variableDependency.setVariableNames(explicitDependencies);\n }\n}\n\nexport function findFirstDatasource(targets: DataQuery[]): DataSourceRef | undefined {\n return targets.find((t) => t.datasource !== null)?.datasource ?? undefined;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SceneQueryRunner.js","sources":["../../../src/querying/SceneQueryRunner.ts"],"sourcesContent":["import { cloneDeep } from 'lodash';\nimport { forkJoin, ReplaySubject, Unsubscribable } from 'rxjs';\n\nimport { DataQuery, DataSourceRef, LoadingState } from '@grafana/schema';\n\nimport {\n AlertStateInfo,\n DataFrame,\n DataFrameView,\n DataQueryRequest,\n DataSourceApi,\n DataTopic,\n PanelData,\n preProcessPanelData,\n rangeUtil,\n} from '@grafana/data';\n\n// TODO: Remove this ignore annotation when the grafana runtime dependency has been updated\n// @ts-ignore\nimport { getRunRequest, toDataQueryError, isExpressionReference } from '@grafana/runtime';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport {\n DataLayerFilter,\n SceneDataProvider,\n SceneDataProviderResult,\n SceneObjectState,\n SceneTimeRangeLike,\n} from '../core/types';\nimport { getDataSource } from '../utils/getDataSource';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { VariableValueRecorder } from '../variables/VariableValueRecorder';\nimport { emptyPanelData } from '../core/SceneDataNode';\nimport { SceneTimeRangeCompare } from '../components/SceneTimeRangeCompare';\nimport { getClosest } from '../core/sceneGraph/utils';\nimport { timeShiftQueryResponseOperator } from './timeShiftQueryResponseOperator';\nimport { filterAnnotations } from './layers/annotations/filterAnnotations';\nimport { getEnrichedDataRequest } from './getEnrichedDataRequest';\nimport { findActiveAdHocFilterVariableByUid } from '../variables/adhoc/patchGetAdhocFilters';\nimport { registerQueryWithController } from './registerQueryWithController';\nimport { findActiveGroupByVariablesByUid } from '../variables/groupby/findActiveGroupByVariablesByUid';\nimport { GroupByVariable } from '../variables/groupby/GroupByVariable';\nimport { AdHocFiltersVariable } from '../variables/adhoc/AdHocFiltersVariable';\nimport { SceneVariable } from '../variables/types';\nimport { mergeMultipleDataLayers } from './mergeMultipleDataLayers';\n\nlet counter = 100;\n\nexport function getNextRequestId() {\n return 'SQR' + counter++;\n}\n\nexport interface QueryRunnerState extends SceneObjectState {\n data?: PanelData;\n queries: DataQueryExtended[];\n datasource?: DataSourceRef;\n minInterval?: string;\n maxDataPoints?: number;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n cacheTimeout?: DataQueryRequest['cacheTimeout'];\n queryCachingTTL?: DataQueryRequest['queryCachingTTL'];\n // Filters to be applied to data layer results before combining them with SQR results\n dataLayerFilter?: DataLayerFilter;\n // Private runtime state\n _hasFetchedData?: boolean;\n}\n\nexport interface DataQueryExtended extends DataQuery {\n [key: string]: any;\n\n // Opt this query out of time window comparison\n timeRangeCompare?: boolean;\n}\n\nexport class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {\n private _querySub?: Unsubscribable;\n private _dataLayersSub?: Unsubscribable;\n private _timeSub?: Unsubscribable;\n private _timeSubRange?: SceneTimeRangeLike;\n private _containerWidth?: number;\n private _variableValueRecorder = new VariableValueRecorder();\n private _results = new ReplaySubject<SceneDataProviderResult>(1);\n private _scopedVars = { __sceneObject: { value: this, text: '__sceneObject' } };\n private _layerAnnotations?: DataFrame[];\n private _resultAnnotations?: DataFrame[];\n\n private _adhocFiltersVar?: AdHocFiltersVariable;\n private _groupByVar?: GroupByVariable;\n\n public getResultsStream() {\n return this._results;\n }\n\n protected _variableDependency: VariableDependencyConfig<QueryRunnerState> = new VariableDependencyConfig(this, {\n statePaths: ['queries', 'datasource'],\n onVariableUpdateCompleted: this.onVariableUpdatesCompleted.bind(this),\n onAnyVariableChanged: this.onAnyVariableChanged.bind(this),\n });\n\n public constructor(initialState: QueryRunnerState) {\n super(initialState);\n\n this.addActivationHandler(() => this._onActivate());\n }\n\n private _onActivate() {\n const timeRange = sceneGraph.getTimeRange(this);\n const comparer = this.getTimeCompare();\n\n if (comparer) {\n this._subs.add(\n comparer.subscribeToState((n, p) => {\n if (n.compareWith !== p.compareWith) {\n this.runQueries();\n }\n })\n );\n }\n\n this.subscribeToTimeRangeChanges(timeRange);\n\n if (this.shouldRunQueriesOnActivate()) {\n this.runQueries();\n }\n\n if (!this._dataLayersSub) {\n this._handleDataLayers();\n }\n\n return () => this._onDeactivate();\n }\n\n // This method subscribes to all SceneDataLayers up until the root, and combines the results into data provided from SceneQueryRunner\n private _handleDataLayers() {\n const dataLayers = sceneGraph.getDataLayers(this);\n\n if (dataLayers.length === 0) {\n return;\n }\n\n this._dataLayersSub = mergeMultipleDataLayers(dataLayers).subscribe(this._onLayersReceived.bind(this));\n }\n\n private _onLayersReceived(results: Iterable<SceneDataProviderResult>) {\n const timeRange = sceneGraph.getTimeRange(this);\n const { dataLayerFilter } = this.state;\n\n let annotations: DataFrame[] = [];\n let alertStates: DataFrame[] = [];\n let alertState: AlertStateInfo | undefined;\n\n for (const result of results) {\n for (let frame of result.data.series) {\n if (frame.meta?.dataTopic === DataTopic.Annotations) {\n annotations = annotations.concat(frame);\n }\n if (frame.meta?.dataTopic === DataTopic.AlertStates) {\n alertStates = alertStates.concat(frame);\n }\n }\n }\n\n if (dataLayerFilter?.panelId) {\n if (annotations.length > 0) {\n annotations = filterAnnotations(annotations, dataLayerFilter);\n }\n\n if (alertStates.length > 0) {\n for (const frame of alertStates) {\n const frameView = new DataFrameView<AlertStateInfo>(frame);\n\n for (const row of frameView) {\n if (row.panelId === dataLayerFilter.panelId) {\n alertState = row;\n break;\n }\n }\n }\n }\n }\n\n const baseStateUpdate = this.state.data ? this.state.data : { ...emptyPanelData, timeRange: timeRange.state.value };\n\n this._layerAnnotations = annotations;\n this.setState({\n data: {\n ...baseStateUpdate,\n annotations: [...(this._resultAnnotations ?? []), ...annotations],\n alertState: alertState ?? this.state.data?.alertState,\n },\n });\n }\n\n /**\n * This tries to start a new query whenever a variable completes or is changed.\n *\n * We care about variable update completions even when the variable has not changed and even when it is not a direct dependency.\n * Example: Variables A and B (B depends on A). A update depends on time range. So when time change query runner will\n * find that variable A is loading which is a dependency on of variable B so will set _isWaitingForVariables to true and\n * not issue any query.\n *\n * When A completes it's loading (with no value change, so B never updates) it will cause a call of this function letting\n * the query runner know that A has completed, and in case _isWaitingForVariables we try to run the query. The query will\n * only run if all variables are in a non loading state so in other scenarios where a query depends on many variables this will\n * be called many times until all dependencies are in a non loading state. *\n */\n private onVariableUpdatesCompleted() {\n this.runQueries();\n }\n\n /**\n * Check if value changed is a adhoc filter o group by variable that did not exist when we issued the last query\n */\n private onAnyVariableChanged(variable: SceneVariable) {\n // If this variable has already been detected this variable as a dependency onVariableUpdatesCompleted above will handle value changes\n if (this._adhocFiltersVar === variable || this._groupByVar === variable) {\n return;\n }\n\n if (variable instanceof AdHocFiltersVariable && this._isRelevantAutoVariable(variable)) {\n this.runQueries();\n }\n\n if (variable instanceof GroupByVariable && this._isRelevantAutoVariable(variable)) {\n this.runQueries();\n }\n }\n\n private _isRelevantAutoVariable(variable: AdHocFiltersVariable | GroupByVariable) {\n const datasource = this.state.datasource ?? findFirstDatasource(this.state.queries);\n return variable.state.applyMode === 'auto' && datasource?.uid === variable.state.datasource?.uid;\n }\n\n private shouldRunQueriesOnActivate() {\n if (this._variableValueRecorder.hasDependenciesChanged(this)) {\n writeSceneLog(\n 'SceneQueryRunner',\n 'Variable dependency changed while inactive, shouldRunQueriesOnActivate returns true'\n );\n return true;\n }\n\n // If we don't have any data we should run queries\n if (!this.state.data) {\n return true;\n }\n\n // If time range is stale / different we should run queries\n if (this._isDataTimeRangeStale(this.state.data)) {\n return true;\n }\n\n return false;\n }\n\n private _isDataTimeRangeStale(data: PanelData) {\n const timeRange = sceneGraph.getTimeRange(this);\n\n const stateTimeRange = timeRange.state.value;\n const dataTimeRange = data.timeRange;\n\n if (\n stateTimeRange.from.unix() === dataTimeRange.from.unix() &&\n stateTimeRange.to.unix() === dataTimeRange.to.unix()\n ) {\n return false;\n }\n writeSceneLog('SceneQueryRunner', 'Data time range is stale');\n return true;\n }\n\n private _onDeactivate(): void {\n if (this._querySub) {\n this._querySub.unsubscribe();\n this._querySub = undefined;\n }\n\n if (this._dataLayersSub) {\n this._dataLayersSub.unsubscribe();\n this._dataLayersSub = undefined;\n }\n\n this._timeSub?.unsubscribe();\n this._timeSub = undefined;\n this._timeSubRange = undefined;\n this._adhocFiltersVar = undefined;\n this._groupByVar = undefined;\n this._variableValueRecorder.recordCurrentDependencyValuesForSceneObject(this);\n }\n\n public setContainerWidth(width: number) {\n // If we don't have a width we should run queries\n if (!this._containerWidth && width > 0) {\n this._containerWidth = width;\n\n // If we don't have maxDataPoints specifically set and maxDataPointsFromWidth is true\n if (this.state.maxDataPointsFromWidth && !this.state.maxDataPoints) {\n // As this is called from render path we need to wait for next tick before running queries\n setTimeout(() => {\n if (this.isActive && !this.state._hasFetchedData) {\n this.runQueries();\n }\n }, 0);\n }\n } else {\n // if the updated container width is bigger than 0 let's remember the width until next query issue\n if (width > 0) {\n this._containerWidth = width;\n }\n }\n }\n\n public isDataReadyToDisplay() {\n return Boolean(this.state._hasFetchedData);\n }\n\n private subscribeToTimeRangeChanges(timeRange: SceneTimeRangeLike) {\n if (this._timeSubRange === timeRange) {\n // Nothing to do, already subscribed\n return;\n }\n\n if (this._timeSub) {\n this._timeSub.unsubscribe();\n }\n\n this._timeSubRange = timeRange;\n this._timeSub = timeRange.subscribeToState(() => {\n this.runWithTimeRange(timeRange);\n });\n }\n\n public runQueries() {\n const timeRange = sceneGraph.getTimeRange(this);\n this.subscribeToTimeRangeChanges(timeRange);\n this.runWithTimeRange(timeRange);\n }\n\n private getMaxDataPoints() {\n if (this.state.maxDataPoints) {\n return this.state.maxDataPoints;\n }\n\n return this.state.maxDataPointsFromWidth ? this._containerWidth ?? 500 : 500;\n }\n\n public cancelQuery() {\n this._querySub?.unsubscribe();\n\n if (this._dataLayersSub) {\n this._dataLayersSub.unsubscribe();\n this._dataLayersSub = undefined;\n }\n\n this.setState({\n data: { ...this.state.data!, state: LoadingState.Done },\n });\n }\n\n private async runWithTimeRange(timeRange: SceneTimeRangeLike) {\n // If no maxDataPoints specified we might need to wait for container width to be set from the outside\n if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {\n return;\n }\n\n // If data layers subscription doesn't exist, create one\n if (!this._dataLayersSub) {\n this._handleDataLayers();\n }\n\n // Cancel any running queries\n this._querySub?.unsubscribe();\n\n // Skip executing queries if variable dependency is in loading state\n if (this._variableDependency.hasDependencyInLoadingState()) {\n writeSceneLog('SceneQueryRunner', 'Variable dependency is in loading state, skipping query execution');\n return;\n }\n\n const { queries } = this.state;\n\n // Simple path when no queries exist\n if (!queries?.length) {\n this._setNoDataState();\n return;\n }\n\n try {\n const datasource = this.state.datasource ?? findFirstDatasource(queries);\n const ds = await getDataSource(datasource, this._scopedVars);\n\n this.findAndSubscribeToAdHocFilters(datasource?.uid);\n\n const runRequest = getRunRequest();\n const [request, secondaryRequest] = this.prepareRequests(timeRange, ds);\n\n writeSceneLog('SceneQueryRunner', 'Starting runRequest', this.state.key);\n\n let stream = runRequest(ds, request);\n\n if (secondaryRequest) {\n // change subscribe callback below to pipe operator\n stream = forkJoin([stream, runRequest(ds, secondaryRequest)]).pipe(timeShiftQueryResponseOperator);\n }\n\n stream = stream.pipe(\n registerQueryWithController({\n type: 'data',\n request,\n origin: this,\n cancel: () => this.cancelQuery(),\n })\n );\n\n this._querySub = stream.subscribe(this.onDataReceived);\n } catch (err) {\n console.error('PanelQueryRunner Error', err);\n\n this.onDataReceived({\n ...emptyPanelData,\n ...this.state.data,\n state: LoadingState.Error,\n errors: [toDataQueryError(err)],\n });\n }\n }\n\n public clone(withState?: Partial<QueryRunnerState>) {\n const clone = super.clone(withState);\n\n if (this._resultAnnotations) {\n clone['_resultAnnotations'] = this._resultAnnotations.map((frame) => ({ ...frame }));\n }\n\n if (this._layerAnnotations) {\n clone['_layerAnnotations'] = this._layerAnnotations.map((frame) => ({ ...frame }));\n }\n\n clone['_results'].next({ origin: this, data: this.state.data ?? emptyPanelData });\n\n return clone;\n }\n\n private prepareRequests = (\n timeRange: SceneTimeRangeLike,\n ds: DataSourceApi\n ): [DataQueryRequest, DataQueryRequest | undefined] => {\n const comparer = this.getTimeCompare();\n const { minInterval, queries } = this.state;\n\n let secondaryRequest: DataQueryRequest | undefined;\n\n let request: DataQueryRequest<DataQueryExtended> = {\n app: 'scenes',\n requestId: getNextRequestId(),\n timezone: timeRange.getTimeZone(),\n panelId: 1,\n range: timeRange.state.value,\n interval: '1s',\n intervalMs: 1000,\n targets: cloneDeep(queries),\n maxDataPoints: this.getMaxDataPoints(),\n scopedVars: this._scopedVars,\n startTime: Date.now(),\n liveStreaming: this.state.liveStreaming,\n rangeRaw: {\n from: timeRange.state.from,\n to: timeRange.state.to,\n },\n cacheTimeout: this.state.cacheTimeout,\n queryCachingTTL: this.state.queryCachingTTL,\n // This asks the scene root to provide context properties like app, panel and dashboardUID\n ...getEnrichedDataRequest(this),\n };\n\n if (this._adhocFiltersVar) {\n // @ts-ignore (Temporary ignore until we update @grafana/data)\n request.filters = this._adhocFiltersVar.state.filters;\n }\n\n if (this._groupByVar) {\n // @ts-ignore (Temporary ignore until we update @grafana/data)\n request.groupByKeys = this._groupByVar.state.value;\n }\n\n request.targets = request.targets.map((query) => {\n if (\n !query.datasource ||\n (query.datasource.uid !== ds.uid &&\n !ds.meta?.mixed &&\n isExpressionReference /* TODO: Remove this check when isExpressionReference is properly exported from grafan runtime */ &&\n !isExpressionReference(query.datasource))\n ) {\n query.datasource = ds.getRef();\n }\n return query;\n });\n\n // TODO interpolate minInterval\n const lowerIntervalLimit = minInterval ? minInterval : ds.interval;\n const norm = rangeUtil.calculateInterval(timeRange.state.value, request.maxDataPoints!, lowerIntervalLimit);\n\n // make shallow copy of scoped vars,\n // and add built in variables interval and interval_ms\n request.scopedVars = Object.assign({}, request.scopedVars, {\n __interval: { text: norm.interval, value: norm.interval },\n __interval_ms: { text: norm.intervalMs.toString(), value: norm.intervalMs },\n });\n\n request.interval = norm.interval;\n request.intervalMs = norm.intervalMs;\n\n const primaryTimeRange = timeRange.state.value;\n if (comparer) {\n const secondaryTimeRange = comparer.getCompareTimeRange(primaryTimeRange);\n if (secondaryTimeRange) {\n const secondaryTargets = request.targets.filter((query: DataQueryExtended) => query.timeRangeCompare !== false);\n\n if (secondaryTargets.length) {\n secondaryRequest = {\n ...request,\n targets: secondaryTargets,\n range: secondaryTimeRange,\n requestId: getNextRequestId(),\n };\n }\n\n request = {\n ...request,\n range: primaryTimeRange,\n };\n }\n }\n\n return [request, secondaryRequest];\n };\n\n private onDataReceived = (data: PanelData) => {\n // Will combine annotations from SQR queries (frames with meta.dataTopic === DataTopic.Annotations)\n const preProcessedData = preProcessPanelData(data, this.state.data);\n\n // Will combine annotations & alert state from data layer providers\n const dataWithLayersApplied = this._combineDataLayers(preProcessedData);\n\n let hasFetchedData = this.state._hasFetchedData;\n\n if (!hasFetchedData && preProcessedData.state !== LoadingState.Loading) {\n hasFetchedData = true;\n }\n\n this._resultAnnotations = data.annotations;\n\n this.setState({ data: dataWithLayersApplied, _hasFetchedData: hasFetchedData });\n\n this._results.next({ origin: this, data: dataWithLayersApplied });\n };\n\n private _combineDataLayers(data: PanelData) {\n if (this.state.data && this.state.data.annotations) {\n data.annotations = (data.annotations || []).concat(this._layerAnnotations ?? []);\n }\n\n if (this.state.data && this.state.data.alertState) {\n data.alertState = this.state.data.alertState;\n }\n\n return data;\n }\n\n private _setNoDataState() {\n if (this.state.data !== emptyPanelData) {\n this.setState({ data: emptyPanelData });\n }\n }\n\n /**\n * Will walk up the scene graph and find the closest time range compare object\n * It performs buttom-up search, including shallow search across object children for supporting controls/header actions\n */\n private getTimeCompare() {\n if (!this.parent) {\n return null;\n }\n return getClosest(this.parent, (s) => {\n let found = null;\n if (s instanceof SceneTimeRangeCompare) {\n return s;\n }\n s.forEachChild((child) => {\n if (child instanceof SceneTimeRangeCompare) {\n found = child;\n }\n });\n\n return found;\n });\n }\n\n /**\n * Walk up scene graph and find the closest filterset with matching data source\n */\n private findAndSubscribeToAdHocFilters(uid: string | undefined) {\n const filtersVar = findActiveAdHocFilterVariableByUid(uid);\n\n if (this._adhocFiltersVar !== filtersVar) {\n this._adhocFiltersVar = filtersVar;\n this._updateExplicitVariableDependencies();\n }\n\n const groupByVar = findActiveGroupByVariablesByUid(uid);\n if (this._groupByVar !== groupByVar) {\n this._groupByVar = groupByVar;\n this._updateExplicitVariableDependencies();\n }\n }\n\n private _updateExplicitVariableDependencies() {\n const explicitDependencies: string[] = [];\n\n if (this._adhocFiltersVar) {\n explicitDependencies.push(this._adhocFiltersVar.state.name);\n }\n\n if (this._groupByVar) {\n explicitDependencies.push(this._groupByVar.state.name);\n }\n\n this._variableDependency.setVariableNames(explicitDependencies);\n }\n}\n\nexport function findFirstDatasource(targets: DataQuery[]): DataSourceRef | undefined {\n return targets.find((t) => t.datasource !== null)?.datasource ?? undefined;\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -547,6 +547,8 @@ interface DataQueryExtended extends DataQuery$1 {
|
|
|
547
547
|
declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {
|
|
548
548
|
private _querySub?;
|
|
549
549
|
private _dataLayersSub?;
|
|
550
|
+
private _timeSub?;
|
|
551
|
+
private _timeSubRange?;
|
|
550
552
|
private _containerWidth?;
|
|
551
553
|
private _variableValueRecorder;
|
|
552
554
|
private _results;
|
|
@@ -585,6 +587,7 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
|
|
|
585
587
|
private _onDeactivate;
|
|
586
588
|
setContainerWidth(width: number): void;
|
|
587
589
|
isDataReadyToDisplay(): boolean;
|
|
590
|
+
private subscribeToTimeRangeChanges;
|
|
588
591
|
runQueries(): void;
|
|
589
592
|
private getMaxDataPoints;
|
|
590
593
|
cancelQuery(): void;
|
package/dist/index.js
CHANGED
|
@@ -3717,11 +3717,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
3717
3717
|
})
|
|
3718
3718
|
);
|
|
3719
3719
|
}
|
|
3720
|
-
this.
|
|
3721
|
-
timeRange.subscribeToState(() => {
|
|
3722
|
-
this.runWithTimeRange(timeRange);
|
|
3723
|
-
})
|
|
3724
|
-
);
|
|
3720
|
+
this.subscribeToTimeRangeChanges(timeRange);
|
|
3725
3721
|
if (this.shouldRunQueriesOnActivate()) {
|
|
3726
3722
|
this.runQueries();
|
|
3727
3723
|
}
|
|
@@ -3825,6 +3821,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
3825
3821
|
return true;
|
|
3826
3822
|
}
|
|
3827
3823
|
_onDeactivate() {
|
|
3824
|
+
var _a;
|
|
3828
3825
|
if (this._querySub) {
|
|
3829
3826
|
this._querySub.unsubscribe();
|
|
3830
3827
|
this._querySub = void 0;
|
|
@@ -3833,6 +3830,9 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
3833
3830
|
this._dataLayersSub.unsubscribe();
|
|
3834
3831
|
this._dataLayersSub = void 0;
|
|
3835
3832
|
}
|
|
3833
|
+
(_a = this._timeSub) == null ? void 0 : _a.unsubscribe();
|
|
3834
|
+
this._timeSub = void 0;
|
|
3835
|
+
this._timeSubRange = void 0;
|
|
3836
3836
|
this._adhocFiltersVar = void 0;
|
|
3837
3837
|
this._groupByVar = void 0;
|
|
3838
3838
|
this._variableValueRecorder.recordCurrentDependencyValuesForSceneObject(this);
|
|
@@ -3856,8 +3856,21 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
3856
3856
|
isDataReadyToDisplay() {
|
|
3857
3857
|
return Boolean(this.state._hasFetchedData);
|
|
3858
3858
|
}
|
|
3859
|
+
subscribeToTimeRangeChanges(timeRange) {
|
|
3860
|
+
if (this._timeSubRange === timeRange) {
|
|
3861
|
+
return;
|
|
3862
|
+
}
|
|
3863
|
+
if (this._timeSub) {
|
|
3864
|
+
this._timeSub.unsubscribe();
|
|
3865
|
+
}
|
|
3866
|
+
this._timeSubRange = timeRange;
|
|
3867
|
+
this._timeSub = timeRange.subscribeToState(() => {
|
|
3868
|
+
this.runWithTimeRange(timeRange);
|
|
3869
|
+
});
|
|
3870
|
+
}
|
|
3859
3871
|
runQueries() {
|
|
3860
3872
|
const timeRange = sceneGraph.getTimeRange(this);
|
|
3873
|
+
this.subscribeToTimeRangeChanges(timeRange);
|
|
3861
3874
|
this.runWithTimeRange(timeRange);
|
|
3862
3875
|
}
|
|
3863
3876
|
getMaxDataPoints() {
|