@grafana/scenes 6.6.0 → 6.6.2--canary.1085.14204884960.0
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/behaviors/ActWhenVariableChanged.js.map +1 -1
- package/dist/esm/behaviors/CursorSync.js +3 -21
- package/dist/esm/behaviors/CursorSync.js.map +1 -1
- package/dist/esm/behaviors/LiveNowTimer.js +3 -2
- package/dist/esm/behaviors/LiveNowTimer.js.map +1 -1
- package/dist/esm/behaviors/SceneQueryController.js +7 -37
- package/dist/esm/behaviors/SceneQueryController.js.map +1 -1
- package/dist/esm/behaviors/SceneRenderProfiler.js +10 -17
- package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -1
- package/dist/esm/components/EmbeddedScene.js +1 -12
- package/dist/esm/components/EmbeddedScene.js.map +1 -1
- package/dist/esm/components/NestedScene.js +23 -30
- package/dist/esm/components/NestedScene.js.map +1 -1
- package/dist/esm/components/SceneApp/SceneApp.js +1 -11
- package/dist/esm/components/SceneApp/SceneApp.js.map +1 -1
- package/dist/esm/components/SceneApp/SceneAppPage.js +28 -47
- package/dist/esm/components/SceneApp/SceneAppPage.js.map +1 -1
- package/dist/esm/components/SceneApp/SceneAppPageView.js +14 -20
- package/dist/esm/components/SceneApp/SceneAppPageView.js.map +1 -1
- package/dist/esm/components/SceneApp/utils.js +2 -18
- package/dist/esm/components/SceneApp/utils.js.map +1 -1
- package/dist/esm/components/SceneByFrameRepeater.js +1 -3
- package/dist/esm/components/SceneByFrameRepeater.js.map +1 -1
- package/dist/esm/components/SceneByVariableRepeater.js +1 -3
- package/dist/esm/components/SceneByVariableRepeater.js.map +1 -1
- package/dist/esm/components/SceneCanvasText.js +1 -4
- package/dist/esm/components/SceneCanvasText.js.map +1 -1
- package/dist/esm/components/SceneControlsSpacer.js +1 -3
- package/dist/esm/components/SceneControlsSpacer.js.map +1 -1
- package/dist/esm/components/SceneDebugger/DebugDetails.js +11 -24
- package/dist/esm/components/SceneDebugger/DebugDetails.js.map +1 -1
- package/dist/esm/components/SceneDebugger/DebugTreeNode.js +2 -14
- package/dist/esm/components/SceneDebugger/DebugTreeNode.js.map +1 -1
- package/dist/esm/components/SceneDebugger/SceneDebugger.js +1 -29
- package/dist/esm/components/SceneDebugger/SceneDebugger.js.map +1 -1
- package/dist/esm/components/SceneReactObject.js +1 -17
- package/dist/esm/components/SceneReactObject.js.map +1 -1
- package/dist/esm/components/SceneRefreshPicker.js +23 -38
- package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
- package/dist/esm/components/SceneTimePicker.js +27 -29
- package/dist/esm/components/SceneTimePicker.js.map +1 -1
- package/dist/esm/components/SceneTimeRangeCompare.js +36 -50
- package/dist/esm/components/SceneTimeRangeCompare.js.map +1 -1
- package/dist/esm/components/SceneToolbarButton.js +10 -14
- package/dist/esm/components/SceneToolbarButton.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanel.js +20 -29
- package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanelExploreButton.js +17 -13
- package/dist/esm/components/VizPanel/VizPanelExploreButton.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanelMenu.js +18 -20
- package/dist/esm/components/VizPanel/VizPanelMenu.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanelRenderer.js +92 -122
- package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +7 -15
- package/dist/esm/components/VizPanel/VizPanelSeriesLimit.js.map +1 -1
- package/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +15 -29
- package/dist/esm/components/VizPanel/colorSeriesConfigFactory.js.map +1 -1
- package/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +3 -21
- package/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js.map +1 -1
- package/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +22 -34
- package/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js.map +1 -1
- package/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +8 -40
- package/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js.map +1 -1
- package/dist/esm/components/layout/LazyLoader.js +2 -35
- package/dist/esm/components/layout/LazyLoader.js.map +1 -1
- package/dist/esm/components/layout/SceneFlexLayout.js +3 -13
- package/dist/esm/components/layout/SceneFlexLayout.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridItem.js +1 -3
- package/dist/esm/components/layout/grid/SceneGridItem.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridLayout.js +26 -26
- package/dist/esm/components/layout/grid/SceneGridLayout.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +88 -104
- package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridRow.js +15 -48
- package/dist/esm/components/layout/grid/SceneGridRow.js.map +1 -1
- package/dist/esm/components/layout/grid/constants.js.map +1 -1
- package/dist/esm/components/layout/grid/types.js.map +1 -1
- package/dist/esm/components/layout/grid/utils.js +3 -21
- package/dist/esm/components/layout/grid/utils.js.map +1 -1
- package/dist/esm/components/layout/split/SplitLayout.js.map +1 -1
- package/dist/esm/components/layout/split/SplitLayoutRenderer.js +11 -14
- package/dist/esm/components/layout/split/SplitLayoutRenderer.js.map +1 -1
- package/dist/esm/components/layout/split/Splitter.js +60 -58
- package/dist/esm/components/layout/split/Splitter.js.map +1 -1
- package/dist/esm/core/PanelBuilders/FieldConfigBuilder.js +46 -23
- package/dist/esm/core/PanelBuilders/FieldConfigBuilder.js.map +1 -1
- package/dist/esm/core/PanelBuilders/FieldConfigBuilders.js +8 -8
- package/dist/esm/core/PanelBuilders/FieldConfigBuilders.js.map +1 -1
- package/dist/esm/core/PanelBuilders/FieldConfigOverridesBuilder.js.map +1 -1
- package/dist/esm/core/PanelBuilders/PanelOptionsBuilder.js +3 -0
- package/dist/esm/core/PanelBuilders/PanelOptionsBuilder.js.map +1 -1
- package/dist/esm/core/PanelBuilders/PanelOptionsBuilders.js +28 -28
- package/dist/esm/core/PanelBuilders/PanelOptionsBuilders.js.map +1 -1
- package/dist/esm/core/PanelBuilders/StandardFieldConfigBuilders.js.map +1 -1
- package/dist/esm/core/PanelBuilders/VizConfigBuilder.js +39 -0
- package/dist/esm/core/PanelBuilders/VizConfigBuilder.js.map +1 -1
- package/dist/esm/core/PanelBuilders/VizConfigBuilders.js +32 -32
- package/dist/esm/core/PanelBuilders/VizConfigBuilders.js.map +1 -1
- package/dist/esm/core/PanelBuilders/VizPanelBuilder.js +82 -21
- package/dist/esm/core/PanelBuilders/VizPanelBuilder.js.map +1 -1
- package/dist/esm/core/PanelBuilders/index.js +32 -32
- package/dist/esm/core/PanelBuilders/index.js.map +1 -1
- package/dist/esm/core/SceneComponentWrapper.js +4 -38
- package/dist/esm/core/SceneComponentWrapper.js.map +1 -1
- package/dist/esm/core/SceneDataNode.js +4 -19
- package/dist/esm/core/SceneDataNode.js.map +1 -1
- package/dist/esm/core/SceneObjectBase.js +55 -17
- package/dist/esm/core/SceneObjectBase.js.map +1 -1
- package/dist/esm/core/SceneObjectRef.js +7 -18
- package/dist/esm/core/SceneObjectRef.js.map +1 -1
- package/dist/esm/core/SceneScopesBridge.js +14 -0
- package/dist/esm/core/SceneScopesBridge.js.map +1 -1
- package/dist/esm/core/SceneTimeRange.js +9 -17
- package/dist/esm/core/SceneTimeRange.js.map +1 -1
- package/dist/esm/core/SceneTimeRangeTransformerBase.js.map +1 -1
- package/dist/esm/core/SceneTimeZoneOverride.js +7 -23
- package/dist/esm/core/SceneTimeZoneOverride.js.map +1 -1
- package/dist/esm/core/events.js.map +1 -1
- package/dist/esm/core/sceneGraph/getQueryController.js.map +1 -1
- package/dist/esm/core/sceneGraph/getTimeRange.js.map +1 -1
- package/dist/esm/core/sceneGraph/index.js +1 -1
- package/dist/esm/core/sceneGraph/index.js.map +1 -1
- package/dist/esm/core/sceneGraph/sceneGraph.js.map +1 -1
- package/dist/esm/core/sceneGraph/utils.js +1 -17
- package/dist/esm/core/sceneGraph/utils.js.map +1 -1
- package/dist/esm/core/types.js.map +1 -1
- package/dist/esm/index.js +6 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/DataLayersMerger.js.map +1 -1
- package/dist/esm/querying/DataProviderProxy.js.map +1 -1
- package/dist/esm/querying/ExtraQueryProvider.js.map +1 -1
- package/dist/esm/querying/RuntimeDataSource.js.map +1 -1
- package/dist/esm/querying/SceneDataLayerSet.js +9 -24
- package/dist/esm/querying/SceneDataLayerSet.js.map +1 -1
- package/dist/esm/querying/SceneDataTransformer.js +11 -24
- package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
- package/dist/esm/querying/SceneQueryRunner.js +44 -33
- package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
- package/dist/esm/querying/extraQueryProcessingOperator.js +3 -21
- package/dist/esm/querying/extraQueryProcessingOperator.js.map +1 -1
- package/dist/esm/querying/getEnrichedDataRequest.js.map +1 -1
- package/dist/esm/querying/layers/SceneDataLayerBase.js +16 -19
- package/dist/esm/querying/layers/SceneDataLayerBase.js.map +1 -1
- package/dist/esm/querying/layers/SceneDataLayerControls.js +15 -21
- package/dist/esm/querying/layers/SceneDataLayerControls.js.map +1 -1
- package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +12 -30
- package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js.map +1 -1
- package/dist/esm/querying/layers/annotations/filterAnnotations.js +6 -23
- package/dist/esm/querying/layers/annotations/filterAnnotations.js.map +1 -1
- package/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +19 -29
- package/dist/esm/querying/layers/annotations/standardAnnotationQuery.js.map +1 -1
- package/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +14 -34
- package/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js.map +1 -1
- package/dist/esm/querying/layers/annotations/utils.js +1 -17
- package/dist/esm/querying/layers/annotations/utils.js.map +1 -1
- package/dist/esm/querying/registerQueryWithController.js.map +1 -1
- package/dist/esm/services/SceneObjectUrlSyncConfig.js.map +1 -1
- package/dist/esm/services/UniqueUrlKeyMapper.js.map +1 -1
- package/dist/esm/services/UrlSyncContextProvider.js.map +1 -1
- package/dist/esm/services/UrlSyncManager.js +11 -19
- package/dist/esm/services/UrlSyncManager.js.map +1 -1
- package/dist/esm/services/useUrlSync.js.map +1 -1
- package/dist/esm/services/utils.js.map +1 -1
- package/dist/esm/utils/ControlsLabel.js +23 -47
- package/dist/esm/utils/ControlsLabel.js.map +1 -1
- package/dist/esm/utils/LoadingIndicator.js +11 -10
- package/dist/esm/utils/LoadingIndicator.js.map +1 -1
- package/dist/esm/utils/SafeSerializableSceneObject.js +7 -18
- package/dist/esm/utils/SafeSerializableSceneObject.js.map +1 -1
- package/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js.map +1 -1
- package/dist/esm/utils/date.js.map +1 -1
- package/dist/esm/utils/evaluateTimeRange.js.map +1 -1
- package/dist/esm/utils/explore.js.map +1 -1
- package/dist/esm/utils/getCompareSeriesRefId.js.map +1 -1
- package/dist/esm/utils/getDataSource.js.map +1 -1
- package/dist/esm/utils/getMessageFromError.js.map +1 -1
- package/dist/esm/utils/metricTree.js.map +1 -1
- package/dist/esm/utils/parseUrlParam.js.map +1 -1
- package/dist/esm/utils/utils.js.map +1 -1
- package/dist/esm/utils/wrapInSafeSerializableSceneObject.js.map +1 -1
- package/dist/esm/utils/writeSceneLog.js.map +1 -1
- package/dist/esm/variables/VariableDependencyConfig.js +9 -0
- package/dist/esm/variables/VariableDependencyConfig.js.map +1 -1
- package/dist/esm/variables/VariableValueRecorder.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFilterBuilder.js +13 -12
- package/dist/esm/variables/adhoc/AdHocFilterBuilder.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFilterRenderer.js +129 -142
- package/dist/esm/variables/adhoc/AdHocFilterRenderer.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +84 -91
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +1 -6
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +195 -194
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +34 -28
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +28 -65
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +29 -43
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +2 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +56 -73
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
- package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js +1 -0
- package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js.map +1 -1
- package/dist/esm/variables/adhoc/getAdhocOptionSearcher.js.map +1 -1
- package/dist/esm/variables/adhoc/patchGetAdhocFilters.js.map +1 -1
- package/dist/esm/variables/components/VariableValueControl.js +9 -6
- package/dist/esm/variables/components/VariableValueControl.js.map +1 -1
- package/dist/esm/variables/components/VariableValueInput.js +13 -10
- package/dist/esm/variables/components/VariableValueInput.js.map +1 -1
- package/dist/esm/variables/components/VariableValueSelect.js +90 -115
- package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
- package/dist/esm/variables/components/VariableValueSelectors.js +20 -37
- package/dist/esm/variables/components/VariableValueSelectors.js.map +1 -1
- package/dist/esm/variables/components/getOptionSearcher.js +1 -1
- package/dist/esm/variables/components/getOptionSearcher.js.map +1 -1
- package/dist/esm/variables/constants.js.map +1 -1
- package/dist/esm/variables/filter.js +6 -1
- package/dist/esm/variables/filter.js.map +1 -1
- package/dist/esm/variables/getEnrichedFiltersRequest.js.map +1 -1
- package/dist/esm/variables/groupby/GroupByVariable.js +106 -112
- package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
- package/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js.map +1 -1
- package/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js.map +1 -1
- package/dist/esm/variables/interpolation/ScopedVarsVariable.js.map +1 -1
- package/dist/esm/variables/interpolation/defaults.js.map +1 -1
- package/dist/esm/variables/interpolation/fieldAccessorCache.js.map +1 -1
- package/dist/esm/variables/interpolation/formatRegistry.js.map +1 -1
- package/dist/esm/variables/interpolation/sceneInterpolator.js.map +1 -1
- package/dist/esm/variables/lookupVariable.js.map +1 -1
- package/dist/esm/variables/macros/AllVariablesMacro.js.map +1 -1
- package/dist/esm/variables/macros/contextMacros.js.map +1 -1
- package/dist/esm/variables/macros/dataMacros.js.map +1 -1
- package/dist/esm/variables/macros/index.js.map +1 -1
- package/dist/esm/variables/macros/templateProxies.js +4 -21
- package/dist/esm/variables/macros/templateProxies.js.map +1 -1
- package/dist/esm/variables/macros/timeMacros.js.map +1 -1
- package/dist/esm/variables/macros/types.js.map +1 -1
- package/dist/esm/variables/macros/urlMacros.js.map +1 -1
- package/dist/esm/variables/sets/SceneVariableSet.js +44 -0
- package/dist/esm/variables/sets/SceneVariableSet.js.map +1 -1
- package/dist/esm/variables/types.js.map +1 -1
- package/dist/esm/variables/utils.js.map +1 -1
- package/dist/esm/variables/variants/ConstantVariable.js +4 -23
- package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
- package/dist/esm/variables/variants/CustomVariable.js +4 -19
- package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
- package/dist/esm/variables/variants/DataSourceVariable.js +4 -19
- package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
- package/dist/esm/variables/variants/IntervalVariable.js +17 -29
- package/dist/esm/variables/variants/IntervalVariable.js.map +1 -1
- package/dist/esm/variables/variants/LocalValueVariable.js +8 -23
- package/dist/esm/variables/variants/LocalValueVariable.js.map +1 -1
- package/dist/esm/variables/variants/MultiValueVariable.js +16 -0
- package/dist/esm/variables/variants/MultiValueVariable.js.map +1 -1
- package/dist/esm/variables/variants/TestVariable.js +5 -19
- package/dist/esm/variables/variants/TestVariable.js.map +1 -1
- package/dist/esm/variables/variants/TextBoxVariable.js +5 -22
- package/dist/esm/variables/variants/TextBoxVariable.js.map +1 -1
- package/dist/esm/variables/variants/guards.js.map +1 -1
- package/dist/esm/variables/variants/query/QueryVariable.js +8 -20
- package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
- package/dist/esm/variables/variants/query/createQueryVariableRunner.js +6 -23
- package/dist/esm/variables/variants/query/createQueryVariableRunner.js.map +1 -1
- package/dist/esm/variables/variants/query/guards.js.map +1 -1
- package/dist/esm/variables/variants/query/toMetricFindValues.js.map +1 -1
- package/dist/esm/variables/variants/query/utils.js.map +1 -1
- package/dist/index.d.ts +36 -7
- package/dist/index.js +2048 -2810
- package/dist/index.js.map +1 -1
- package/package.json +8 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneDataTransformer.js","sources":["../../../src/querying/SceneDataTransformer.ts"],"sourcesContent":["import { DataTopic, DataTransformerConfig, LoadingState, PanelData, transformDataFrame } from '@grafana/data';\nimport { toDataQueryError } from '@grafana/runtime';\nimport { catchError, forkJoin, map, of, ReplaySubject, Unsubscribable } from 'rxjs';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { CustomTransformerDefinition, SceneDataProvider, SceneDataProviderResult, SceneDataState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { SceneDataLayerSet } from './SceneDataLayerSet';\n\nexport interface SceneDataTransformerState extends SceneDataState {\n /**\n * Array of standard transformation configs and custom transform operators\n */\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>;\n}\n\n/**\n * You can use this as a $data object. It can either transform an inner $data DataProvider or if that is not set it will\n * subscribe to a DataProvider higher up in the scene graph and transform its data.\n *\n * The transformations array supports custom (runtime defined) transformation as well as declarative core transformations.\n * You can manually re-process the transformations by calling reprocessTransformations(). This is useful if you have\n * transformations that depend on other scene object states.\n */\nexport class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerState> implements SceneDataProvider {\n private _transformSub?: Unsubscribable;\n private _results = new ReplaySubject<SceneDataProviderResult>(1);\n private _prevDataFromSource?: PanelData;\n\n /**\n * Scan transformations for variable usage and re-process transforms when a variable values change\n */\n protected _variableDependency: VariableDependencyConfig<SceneDataTransformerState> = new VariableDependencyConfig(\n this,\n {\n statePaths: ['transformations'],\n onReferencedVariableValueChanged: () => this.reprocessTransformations(),\n }\n );\n\n public constructor(state: SceneDataTransformerState) {\n super(state);\n\n this.addActivationHandler(() => this.activationHandler());\n }\n\n private activationHandler() {\n const sourceData = this.getSourceData();\n\n this._subs.add(sourceData.subscribeToState((state) => this.transform(state.data)));\n\n if (sourceData.state.data) {\n this.transform(sourceData.state.data);\n }\n\n return () => {\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n };\n }\n\n private getSourceData(): SceneDataProvider {\n if (this.state.$data) {\n if (this.state.$data instanceof SceneDataLayerSet) {\n throw new Error('SceneDataLayerSet can not be used as data provider for SceneDataTransformer.');\n }\n return this.state.$data;\n }\n\n if (!this.parent || !this.parent.parent) {\n throw new Error('SceneDataTransformer must either have $data set on it or have a parent.parent with $data');\n }\n\n return sceneGraph.getData(this.parent.parent);\n }\n\n public setContainerWidth(width: number) {\n if (this.state.$data && this.state.$data.setContainerWidth) {\n this.state.$data.setContainerWidth(width);\n }\n }\n\n public isDataReadyToDisplay() {\n const dataObject = this.getSourceData();\n if (dataObject.isDataReadyToDisplay) {\n return dataObject.isDataReadyToDisplay();\n }\n\n return true;\n }\n\n public reprocessTransformations() {\n this.transform(this.getSourceData().state.data, true);\n }\n\n public cancelQuery() {\n this.getSourceData().cancelQuery?.();\n }\n\n public getResultsStream() {\n return this._results;\n }\n\n public clone(withState?: Partial<SceneDataTransformerState>) {\n const clone = super.clone(withState);\n\n if (this._prevDataFromSource) {\n clone['_prevDataFromSource'] = this._prevDataFromSource;\n }\n\n return clone;\n }\n\n private haveAlreadyTransformedData(data: PanelData) {\n if (!this._prevDataFromSource) {\n return false;\n }\n\n if (data === this._prevDataFromSource) {\n return true;\n }\n\n const { series, annotations } = this._prevDataFromSource;\n\n if (data.series === series && data.annotations === annotations) {\n if (this.state.data && data.state !== this.state.data.state) {\n this.setState({ data: { ...this.state.data, state: data.state } });\n }\n return true;\n }\n\n return false;\n }\n\n private transform(data: PanelData | undefined, force = false) {\n if (this.state.transformations.length === 0 || !data) {\n this._prevDataFromSource = data;\n this.setState({ data });\n\n if (data) {\n this._results.next({ origin: this, data });\n }\n return;\n }\n\n // Skip transform step if we have already transformed this data\n if (!force && this.haveAlreadyTransformedData(data)) {\n return;\n }\n\n let interpolatedTransformations = this._interpolateVariablesInTransformationConfigs(data);\n\n const seriesTransformations = interpolatedTransformations\n .filter((transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic == null || transformation.topic === DataTopic.Series;\n }\n\n return true;\n })\n .map((transformation) => ('operator' in transformation ? transformation.operator : transformation));\n\n const annotationsTransformations = interpolatedTransformations\n .filter((transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic === DataTopic.Annotations;\n }\n\n return false;\n })\n .map((transformation) => ('operator' in transformation ? transformation.operator : transformation));\n\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n\n const ctx = {\n interpolate: (value: string) => {\n return sceneGraph.interpolate(this, value, data.request?.scopedVars);\n },\n };\n\n let streams = [transformDataFrame(seriesTransformations, data.series, ctx)];\n\n if (data.annotations && data.annotations.length > 0 && annotationsTransformations.length > 0) {\n streams.push(transformDataFrame(annotationsTransformations, data.annotations ?? []));\n }\n\n this._transformSub = forkJoin(streams)\n .pipe(\n map((values) => {\n const transformedSeries = values[0];\n const transformedAnnotations = values[1];\n\n return {\n ...data,\n series: transformedSeries,\n annotations: transformedAnnotations ?? data.annotations,\n };\n }),\n catchError((err) => {\n console.error('Error transforming data: ', err);\n const sourceErr = this.getSourceData().state.data?.errors || [];\n\n const transformationError = toDataQueryError(err);\n transformationError.message = `Error transforming data: ${transformationError.message}`;\n\n const result: PanelData = {\n ...data,\n state: LoadingState.Error,\n // Combine transformation error with upstream errors\n errors: [...sourceErr, transformationError],\n };\n\n return of(result);\n })\n )\n .subscribe((transformedData) => {\n this.setState({ data: transformedData });\n this._results.next({ origin: this, data: transformedData });\n this._prevDataFromSource = data;\n });\n }\n\n private _interpolateVariablesInTransformationConfigs(\n data: PanelData\n ): Array<DataTransformerConfig | CustomTransformerDefinition> {\n const transformations = this.state.transformations;\n\n if (this._variableDependency.getNames().size === 0) {\n return transformations;\n }\n\n const onlyObjects = transformations.every((t) => typeof t === 'object');\n\n // If all transformations are config object we can interpolate them all at once\n if (onlyObjects) {\n return JSON.parse(sceneGraph.interpolate(this, JSON.stringify(transformations), data.request?.scopedVars));\n }\n\n return transformations.map((t) => {\n return typeof t === 'object'\n ? JSON.parse(sceneGraph.interpolate(this, JSON.stringify(t), data.request?.scopedVars))\n : t;\n });\n }\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SceneDataTransformer.js","sources":["../../../src/querying/SceneDataTransformer.ts"],"sourcesContent":["import { DataTopic, DataTransformerConfig, LoadingState, PanelData, transformDataFrame } from '@grafana/data';\nimport { toDataQueryError } from '@grafana/runtime';\nimport { catchError, forkJoin, map, of, ReplaySubject, Unsubscribable } from 'rxjs';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { CustomTransformerDefinition, SceneDataProvider, SceneDataProviderResult, SceneDataState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { SceneDataLayerSet } from './SceneDataLayerSet';\n\nexport interface SceneDataTransformerState extends SceneDataState {\n /**\n * Array of standard transformation configs and custom transform operators\n */\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>;\n}\n\n/**\n * You can use this as a $data object. It can either transform an inner $data DataProvider or if that is not set it will\n * subscribe to a DataProvider higher up in the scene graph and transform its data.\n *\n * The transformations array supports custom (runtime defined) transformation as well as declarative core transformations.\n * You can manually re-process the transformations by calling reprocessTransformations(). This is useful if you have\n * transformations that depend on other scene object states.\n */\nexport class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerState> implements SceneDataProvider {\n private _transformSub?: Unsubscribable;\n private _results = new ReplaySubject<SceneDataProviderResult>(1);\n private _prevDataFromSource?: PanelData;\n\n /**\n * Scan transformations for variable usage and re-process transforms when a variable values change\n */\n protected _variableDependency: VariableDependencyConfig<SceneDataTransformerState> = new VariableDependencyConfig(\n this,\n {\n statePaths: ['transformations'],\n onReferencedVariableValueChanged: () => this.reprocessTransformations(),\n }\n );\n\n public constructor(state: SceneDataTransformerState) {\n super(state);\n\n this.addActivationHandler(() => this.activationHandler());\n }\n\n private activationHandler() {\n const sourceData = this.getSourceData();\n\n this._subs.add(sourceData.subscribeToState((state) => this.transform(state.data)));\n\n if (sourceData.state.data) {\n this.transform(sourceData.state.data);\n }\n\n return () => {\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n };\n }\n\n private getSourceData(): SceneDataProvider {\n if (this.state.$data) {\n if (this.state.$data instanceof SceneDataLayerSet) {\n throw new Error('SceneDataLayerSet can not be used as data provider for SceneDataTransformer.');\n }\n return this.state.$data;\n }\n\n if (!this.parent || !this.parent.parent) {\n throw new Error('SceneDataTransformer must either have $data set on it or have a parent.parent with $data');\n }\n\n return sceneGraph.getData(this.parent.parent);\n }\n\n public setContainerWidth(width: number) {\n if (this.state.$data && this.state.$data.setContainerWidth) {\n this.state.$data.setContainerWidth(width);\n }\n }\n\n public isDataReadyToDisplay() {\n const dataObject = this.getSourceData();\n if (dataObject.isDataReadyToDisplay) {\n return dataObject.isDataReadyToDisplay();\n }\n\n return true;\n }\n\n public reprocessTransformations() {\n this.transform(this.getSourceData().state.data, true);\n }\n\n public cancelQuery() {\n this.getSourceData().cancelQuery?.();\n }\n\n public getResultsStream() {\n return this._results;\n }\n\n public clone(withState?: Partial<SceneDataTransformerState>) {\n const clone = super.clone(withState);\n\n if (this._prevDataFromSource) {\n clone['_prevDataFromSource'] = this._prevDataFromSource;\n }\n\n return clone;\n }\n\n private haveAlreadyTransformedData(data: PanelData) {\n if (!this._prevDataFromSource) {\n return false;\n }\n\n if (data === this._prevDataFromSource) {\n return true;\n }\n\n const { series, annotations } = this._prevDataFromSource;\n\n if (data.series === series && data.annotations === annotations) {\n if (this.state.data && data.state !== this.state.data.state) {\n this.setState({ data: { ...this.state.data, state: data.state } });\n }\n return true;\n }\n\n return false;\n }\n\n private transform(data: PanelData | undefined, force = false) {\n if (this.state.transformations.length === 0 || !data) {\n this._prevDataFromSource = data;\n this.setState({ data });\n\n if (data) {\n this._results.next({ origin: this, data });\n }\n return;\n }\n\n // Skip transform step if we have already transformed this data\n if (!force && this.haveAlreadyTransformedData(data)) {\n return;\n }\n\n let interpolatedTransformations = this._interpolateVariablesInTransformationConfigs(data);\n\n const seriesTransformations = interpolatedTransformations\n .filter((transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic == null || transformation.topic === DataTopic.Series;\n }\n\n return true;\n })\n .map((transformation) => ('operator' in transformation ? transformation.operator : transformation));\n\n const annotationsTransformations = interpolatedTransformations\n .filter((transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic === DataTopic.Annotations;\n }\n\n return false;\n })\n .map((transformation) => ('operator' in transformation ? transformation.operator : transformation));\n\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n\n const ctx = {\n interpolate: (value: string) => {\n return sceneGraph.interpolate(this, value, data.request?.scopedVars);\n },\n };\n\n let streams = [transformDataFrame(seriesTransformations, data.series, ctx)];\n\n if (data.annotations && data.annotations.length > 0 && annotationsTransformations.length > 0) {\n streams.push(transformDataFrame(annotationsTransformations, data.annotations ?? []));\n }\n\n this._transformSub = forkJoin(streams)\n .pipe(\n map((values) => {\n const transformedSeries = values[0];\n const transformedAnnotations = values[1];\n\n return {\n ...data,\n series: transformedSeries,\n annotations: transformedAnnotations ?? data.annotations,\n };\n }),\n catchError((err) => {\n console.error('Error transforming data: ', err);\n const sourceErr = this.getSourceData().state.data?.errors || [];\n\n const transformationError = toDataQueryError(err);\n transformationError.message = `Error transforming data: ${transformationError.message}`;\n\n const result: PanelData = {\n ...data,\n state: LoadingState.Error,\n // Combine transformation error with upstream errors\n errors: [...sourceErr, transformationError],\n };\n\n return of(result);\n })\n )\n .subscribe((transformedData) => {\n this.setState({ data: transformedData });\n this._results.next({ origin: this, data: transformedData });\n this._prevDataFromSource = data;\n });\n }\n\n private _interpolateVariablesInTransformationConfigs(\n data: PanelData\n ): Array<DataTransformerConfig | CustomTransformerDefinition> {\n const transformations = this.state.transformations;\n\n if (this._variableDependency.getNames().size === 0) {\n return transformations;\n }\n\n const onlyObjects = transformations.every((t) => typeof t === 'object');\n\n // If all transformations are config object we can interpolate them all at once\n if (onlyObjects) {\n return JSON.parse(sceneGraph.interpolate(this, JSON.stringify(transformations), data.request?.scopedVars));\n }\n\n return transformations.map((t) => {\n return typeof t === 'object'\n ? JSON.parse(sceneGraph.interpolate(this, JSON.stringify(t), data.request?.scopedVars))\n : t;\n });\n }\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -24,25 +24,6 @@ import { DataLayersMerger } from './DataLayersMerger.js';
|
|
|
24
24
|
import { interpolate } from '../core/sceneGraph/sceneGraph.js';
|
|
25
25
|
import { wrapInSafeSerializableSceneObject } from '../utils/wrapInSafeSerializableSceneObject.js';
|
|
26
26
|
|
|
27
|
-
var __defProp = Object.defineProperty;
|
|
28
|
-
var __defProps = Object.defineProperties;
|
|
29
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
30
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
31
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
32
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
33
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
34
|
-
var __spreadValues = (a, b) => {
|
|
35
|
-
for (var prop in b || (b = {}))
|
|
36
|
-
if (__hasOwnProp.call(b, prop))
|
|
37
|
-
__defNormalProp(a, prop, b[prop]);
|
|
38
|
-
if (__getOwnPropSymbols)
|
|
39
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
40
|
-
if (__propIsEnum.call(b, prop))
|
|
41
|
-
__defNormalProp(a, prop, b[prop]);
|
|
42
|
-
}
|
|
43
|
-
return a;
|
|
44
|
-
};
|
|
45
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
46
27
|
let counter = 100;
|
|
47
28
|
function getNextRequestId() {
|
|
48
29
|
return "SQR" + counter++;
|
|
@@ -100,6 +81,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
100
81
|
}
|
|
101
82
|
return () => this._onDeactivate();
|
|
102
83
|
}
|
|
84
|
+
// This method subscribes to all SceneDataLayers up until the root, and combines the results into data provided from SceneQueryRunner
|
|
103
85
|
_handleDataLayers() {
|
|
104
86
|
const dataLayers = sceneGraph.getDataLayers(this);
|
|
105
87
|
if (dataLayers.length === 0) {
|
|
@@ -144,19 +126,36 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
144
126
|
return;
|
|
145
127
|
}
|
|
146
128
|
this._layerAnnotations = annotations;
|
|
147
|
-
const baseStateUpdate = this.state.data ? this.state.data :
|
|
129
|
+
const baseStateUpdate = this.state.data ? this.state.data : { ...emptyPanelData, timeRange: timeRange.state.value };
|
|
148
130
|
this.setState({
|
|
149
|
-
data:
|
|
131
|
+
data: {
|
|
132
|
+
...baseStateUpdate,
|
|
150
133
|
annotations: [...(_d = this._resultAnnotations) != null ? _d : [], ...annotations],
|
|
151
134
|
alertState: alertState != null ? alertState : (_e = this.state.data) == null ? void 0 : _e.alertState
|
|
152
|
-
}
|
|
135
|
+
}
|
|
153
136
|
});
|
|
154
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* This tries to start a new query whenever a variable completes or is changed.
|
|
140
|
+
*
|
|
141
|
+
* We care about variable update completions even when the variable has not changed and even when it is not a direct dependency.
|
|
142
|
+
* Example: Variables A and B (B depends on A). A update depends on time range. So when time change query runner will
|
|
143
|
+
* find that variable A is loading which is a dependency on of variable B so will set _isWaitingForVariables to true and
|
|
144
|
+
* not issue any query.
|
|
145
|
+
*
|
|
146
|
+
* When A completes it's loading (with no value change, so B never updates) it will cause a call of this function letting
|
|
147
|
+
* the query runner know that A has completed, and in case _isWaitingForVariables we try to run the query. The query will
|
|
148
|
+
* only run if all variables are in a non loading state so in other scenarios where a query depends on many variables this will
|
|
149
|
+
* be called many times until all dependencies are in a non loading state. *
|
|
150
|
+
*/
|
|
155
151
|
onVariableUpdatesCompleted() {
|
|
156
152
|
if (this.isQueryModeAuto()) {
|
|
157
153
|
this.runQueries();
|
|
158
154
|
}
|
|
159
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Check if value changed is a adhoc filter o group by variable that did not exist when we issued the last query
|
|
158
|
+
*/
|
|
160
159
|
onAnyVariableChanged(variable) {
|
|
161
160
|
if (this._adhocFiltersVar === variable || this._groupByVar === variable || !this.isQueryModeAuto()) {
|
|
162
161
|
return;
|
|
@@ -286,7 +285,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
286
285
|
this._dataLayersSub = void 0;
|
|
287
286
|
}
|
|
288
287
|
this.setState({
|
|
289
|
-
data:
|
|
288
|
+
data: { ...this.state.data, state: LoadingState.Done }
|
|
290
289
|
});
|
|
291
290
|
}
|
|
292
291
|
async runWithTimeRangeAndScopes(timeRange, scopesBridge) {
|
|
@@ -300,12 +299,12 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
300
299
|
(_a = this._querySub) == null ? void 0 : _a.unsubscribe();
|
|
301
300
|
if (this._variableDependency.hasDependencyInLoadingState()) {
|
|
302
301
|
writeSceneLog("SceneQueryRunner", "Variable dependency is in loading state, skipping query execution");
|
|
303
|
-
this.setState({ data:
|
|
302
|
+
this.setState({ data: { ...(_b = this.state.data) != null ? _b : emptyPanelData, state: LoadingState.Loading } });
|
|
304
303
|
return;
|
|
305
304
|
}
|
|
306
305
|
if ((scopesBridge == null ? void 0 : scopesBridge.isLoading()) && (scopesBridge == null ? void 0 : scopesBridge.getValue().length)) {
|
|
307
306
|
writeSceneLog("SceneQueryRunner", "Scopes are in loading state, skipping query execution");
|
|
308
|
-
this.setState({ data:
|
|
307
|
+
this.setState({ data: { ...(_c = this.state.data) != null ? _c : emptyPanelData, state: LoadingState.Loading } });
|
|
309
308
|
return;
|
|
310
309
|
}
|
|
311
310
|
const { queries } = this.state;
|
|
@@ -337,20 +336,22 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
337
336
|
this._querySub = stream.subscribe(this.onDataReceived);
|
|
338
337
|
} catch (err) {
|
|
339
338
|
console.error("PanelQueryRunner Error", err);
|
|
340
|
-
this.onDataReceived(
|
|
339
|
+
this.onDataReceived({
|
|
340
|
+
...emptyPanelData,
|
|
341
|
+
...this.state.data,
|
|
341
342
|
state: LoadingState.Error,
|
|
342
343
|
errors: [toDataQueryError(err)]
|
|
343
|
-
})
|
|
344
|
+
});
|
|
344
345
|
}
|
|
345
346
|
}
|
|
346
347
|
clone(withState) {
|
|
347
348
|
var _a;
|
|
348
349
|
const clone = super.clone(withState);
|
|
349
350
|
if (this._resultAnnotations) {
|
|
350
|
-
clone["_resultAnnotations"] = this._resultAnnotations.map((frame) =>
|
|
351
|
+
clone["_resultAnnotations"] = this._resultAnnotations.map((frame) => ({ ...frame }));
|
|
351
352
|
}
|
|
352
353
|
if (this._layerAnnotations) {
|
|
353
|
-
clone["_layerAnnotations"] = this._layerAnnotations.map((frame) =>
|
|
354
|
+
clone["_layerAnnotations"] = this._layerAnnotations.map((frame) => ({ ...frame }));
|
|
354
355
|
}
|
|
355
356
|
clone["_variableValueRecorder"] = this._variableValueRecorder.cloneAndRecordCurrentValuesForSceneObject(this);
|
|
356
357
|
clone["_containerWidth"] = this._containerWidth;
|
|
@@ -360,7 +361,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
360
361
|
prepareRequests(timeRange, ds, scopesBridge) {
|
|
361
362
|
var _a, _b;
|
|
362
363
|
const { minInterval, queries } = this.state;
|
|
363
|
-
let request =
|
|
364
|
+
let request = {
|
|
364
365
|
app: "scenes",
|
|
365
366
|
requestId: getNextRequestId(),
|
|
366
367
|
timezone: timeRange.getTimeZone(),
|
|
@@ -378,8 +379,10 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
378
379
|
},
|
|
379
380
|
cacheTimeout: this.state.cacheTimeout,
|
|
380
381
|
queryCachingTTL: this.state.queryCachingTTL,
|
|
381
|
-
scopes: scopesBridge == null ? void 0 : scopesBridge.getValue()
|
|
382
|
-
|
|
382
|
+
scopes: scopesBridge == null ? void 0 : scopesBridge.getValue(),
|
|
383
|
+
// This asks the scene root to provide context properties like app, panel and dashboardUID
|
|
384
|
+
...getEnrichedDataRequest(this)
|
|
385
|
+
};
|
|
383
386
|
if (this._adhocFiltersVar) {
|
|
384
387
|
request.filters = [];
|
|
385
388
|
if ((_a = this._adhocFiltersVar.state.baseFilters) == null ? void 0 : _a.length) {
|
|
@@ -412,7 +415,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
412
415
|
for (const provider of (_b = this.getClosestExtraQueryProviders()) != null ? _b : []) {
|
|
413
416
|
for (const { req, processor } of provider.getExtraQueries(request)) {
|
|
414
417
|
const requestId = getNextRequestId();
|
|
415
|
-
secondaryRequests.push(
|
|
418
|
+
secondaryRequests.push({ ...req, requestId });
|
|
416
419
|
secondaryProcessors.set(requestId, processor != null ? processor : passthroughProcessor);
|
|
417
420
|
}
|
|
418
421
|
}
|
|
@@ -433,6 +436,11 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
433
436
|
this.setState({ data: emptyPanelData });
|
|
434
437
|
}
|
|
435
438
|
}
|
|
439
|
+
/**
|
|
440
|
+
* Walk up the scene graph and find any ExtraQueryProviders.
|
|
441
|
+
*
|
|
442
|
+
* This will return an array of the closest provider of each type.
|
|
443
|
+
*/
|
|
436
444
|
getClosestExtraQueryProviders() {
|
|
437
445
|
const found = /* @__PURE__ */ new Map();
|
|
438
446
|
if (!this.parent) {
|
|
@@ -451,6 +459,9 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
451
459
|
});
|
|
452
460
|
return Array.from(found.values());
|
|
453
461
|
}
|
|
462
|
+
/**
|
|
463
|
+
* Walk up scene graph and find the closest filterset with matching data source
|
|
464
|
+
*/
|
|
454
465
|
findAndSubscribeToAdHocFilters(interpolatedUid) {
|
|
455
466
|
const filtersVar = findActiveAdHocFilterVariableByUid(interpolatedUid);
|
|
456
467
|
if (this._adhocFiltersVar !== filtersVar) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneQueryRunner.js","sources":["../../../src/querying/SceneQueryRunner.ts"],"sourcesContent":["import { cloneDeep, isEqual } 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, config } from '@grafana/runtime';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport {\n DataLayerFilter,\n SceneDataProvider,\n SceneDataProviderResult,\n SceneDataQuery,\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 { getClosest } from '../core/sceneGraph/utils';\nimport { isExtraQueryProvider, ExtraQueryDataProcessor, ExtraQueryProvider } from './ExtraQueryProvider';\nimport { passthroughProcessor, extraQueryProcessingOperator } from './extraQueryProcessingOperator';\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, isFilterComplete } from '../variables/adhoc/AdHocFiltersVariable';\nimport { SceneVariable } from '../variables/types';\nimport { DataLayersMerger } from './DataLayersMerger';\nimport { interpolate } from '../core/sceneGraph/sceneGraph';\nimport { wrapInSafeSerializableSceneObject } from '../utils/wrapInSafeSerializableSceneObject';\nimport { SceneScopesBridge } from '../core/SceneScopesBridge';\n\nlet counter = 100;\n\nexport function getNextRequestId() {\n return 'SQR' + counter++;\n}\n\nexport interface QueryRunnerState extends SceneObjectState {\n data?: PanelData;\n queries: SceneDataQuery[];\n datasource?: DataSourceRef;\n minInterval?: string;\n maxDataPoints?: number;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n cacheTimeout?: DataQueryRequest['cacheTimeout'];\n queryCachingTTL?: DataQueryRequest['queryCachingTTL'];\n /**\n * When set to auto (the default) query runner will issue queries on activate (when variable dependencies are ready) or when time range change.\n * Set to manual to have full manual control over when queries are issued. Try not to set this. This is mainly useful for unit tests, or special edge case workflows.\n */\n runQueriesMode?: 'auto' | 'manual';\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\n// The requests that will be run by the query runner.\n//\n// Generally the query runner will run a single primary request.\n// If the scene graph contains implementations of\n// `ExtraQueryProvider`, the requests created by these\n// implementations will be added to the list of secondary requests,\n// and these will be executed at the same time as the primary request.\n//\n// The results of each secondary request will be passed to an associated\n// processor function (along with the results of the primary request),\n// which can transform the results as desired.\ninterface PreparedRequests {\n // The primary request to run.\n primary: DataQueryRequest;\n // A possibly empty list of secondary requests to run alongside\n // the primary request.\n secondaries: DataQueryRequest[];\n // A map from `requestId` of secondary requests to processors\n // for those requests. Provided by the `ExtraQueryProvider`.\n processors: Map<string, ExtraQueryDataProcessor>;\n}\n\nexport class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {\n private _querySub?: Unsubscribable;\n private _dataLayersSub?: Unsubscribable;\n private _dataLayersMerger = new DataLayersMerger();\n private _timeSub?: Unsubscribable;\n private _timeSubRange?: SceneTimeRangeLike;\n private _scopesSub?: Unsubscribable;\n private _scopesSubBridge?: SceneScopesBridge;\n private _containerWidth?: number;\n private _variableValueRecorder = new VariableValueRecorder();\n private _results = new ReplaySubject<SceneDataProviderResult>(1);\n private _scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };\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', 'minInterval'],\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 if (this.isQueryModeAuto()) {\n const timeRange = sceneGraph.getTimeRange(this);\n const scopesBridge = sceneGraph.getScopesBridge(this);\n\n // Add subscriptions to any extra providers so that they rerun queries\n // when their state changes and they should rerun.\n const providers = this.getClosestExtraQueryProviders();\n for (const provider of providers) {\n this._subs.add(\n provider.subscribeToState((n, p) => {\n if (provider.shouldRerun(p, n, this.state.queries)) {\n this.runQueries();\n }\n })\n );\n }\n\n this.subscribeToScopesChanges(scopesBridge);\n\n this.subscribeToTimeRangeChanges(timeRange);\n\n if (this.shouldRunQueriesOnActivate()) {\n this.runQueries();\n }\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 = this._dataLayersMerger\n .getMergedStream(dataLayers)\n .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 // Skip unnessary state updates\n if (\n allFramesEmpty(annotations) &&\n allFramesEmpty(this._layerAnnotations) &&\n isEqual(alertState, this.state.data?.alertState)\n ) {\n return;\n }\n\n this._layerAnnotations = annotations;\n\n const baseStateUpdate = this.state.data ? this.state.data : { ...emptyPanelData, timeRange: timeRange.state.value };\n\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 if (this.isQueryModeAuto()) {\n this.runQueries();\n }\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 || !this.isQueryModeAuto()) {\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 subscribeToScopesChanges(scopesBridge: SceneScopesBridge | undefined) {\n if (!scopesBridge) {\n // Nothing to do, there's no scopes bridge\n return;\n }\n\n if (this._scopesSubBridge === scopesBridge) {\n // Nothing to do, already subscribed\n return;\n }\n\n if (this._scopesSub) {\n this._scopesSub.unsubscribe();\n }\n\n this._scopesSubBridge = scopesBridge;\n\n this._scopesSub = scopesBridge.subscribeToValue(() => {\n this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);\n });\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.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(this));\n });\n }\n\n public runQueries() {\n const timeRange = sceneGraph.getTimeRange(this);\n const scopesBridge = sceneGraph.getScopesBridge(this);\n if (this.isQueryModeAuto()) {\n this.subscribeToTimeRangeChanges(timeRange);\n this.subscribeToScopesChanges(scopesBridge);\n }\n\n this.runWithTimeRangeAndScopes(timeRange, scopesBridge);\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 runWithTimeRangeAndScopes(timeRange: SceneTimeRangeLike, scopesBridge: SceneScopesBridge | undefined) {\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 this.setState({ data: { ...(this.state.data ?? emptyPanelData), state: LoadingState.Loading } });\n return;\n }\n\n // Skip executing queries if scopes are in loading state and there are values, meaning further\n // data will be received after scope filters are loaded\n if (scopesBridge?.isLoading() && scopesBridge?.getValue().length) {\n writeSceneLog('SceneQueryRunner', 'Scopes are in loading state, skipping query execution');\n this.setState({ data: { ...(this.state.data ?? emptyPanelData), state: LoadingState.Loading } });\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(ds.uid);\n\n const runRequest = getRunRequest();\n const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds, scopesBridge);\n\n writeSceneLog('SceneQueryRunner', 'Starting runRequest', this.state.key);\n\n let stream = runRequest(ds, primary);\n\n if (secondaries.length > 0) {\n // Submit all secondary requests in parallel.\n const secondaryStreams = secondaries.map((r) => runRequest(ds, r));\n // Create the rxjs operator which will combine the primary and secondary responses\n // by calling the correct processor functions provided by the\n // extra request providers.\n const op = extraQueryProcessingOperator(processors);\n // Combine the primary and secondary streams into a single stream, and apply the operator.\n stream = forkJoin([stream, ...secondaryStreams]).pipe(op);\n }\n\n stream = stream.pipe(\n registerQueryWithController({\n type: 'data',\n request: primary,\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['_variableValueRecorder'] = this._variableValueRecorder.cloneAndRecordCurrentValuesForSceneObject(this);\n clone['_containerWidth'] = this._containerWidth;\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 scopesBridge: SceneScopesBridge | undefined\n ): PreparedRequests {\n const { minInterval, queries } = this.state;\n\n let request: DataQueryRequest<DataQueryExtended> = {\n app: 'scenes',\n requestId: getNextRequestId(),\n timezone: timeRange.getTimeZone(),\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 scopes: scopesBridge?.getValue(),\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 request.filters = [];\n\n if (this._adhocFiltersVar.state.baseFilters?.length) {\n const injectedBaseFilters = this._adhocFiltersVar.state.baseFilters.filter((filter) => filter.origin);\n request.filters = request.filters.concat(injectedBaseFilters);\n }\n\n // only pass filters that have both key and value\n // @ts-ignore (Temporary ignore until we update @grafana/data)\n request.filters = request.filters.concat(this._adhocFiltersVar.state.filters.filter(isFilterComplete));\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 const lowerIntervalLimit = minInterval ? interpolate(this, 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 // If there are any extra request providers, we need to add a new request for each\n // and map the request's ID to the processor function given by the provider, to ensure that\n // the processor is called with the correct response data.\n const primaryTimeRange = timeRange.state.value;\n let secondaryRequests: DataQueryRequest[] = [];\n let secondaryProcessors = new Map();\n for (const provider of this.getClosestExtraQueryProviders() ?? []) {\n for (const { req, processor } of provider.getExtraQueries(request)) {\n const requestId = getNextRequestId();\n secondaryRequests.push({ ...req, requestId });\n secondaryProcessors.set(requestId, processor ?? passthroughProcessor);\n }\n }\n request.range = primaryTimeRange;\n return { primary: request, secondaries: secondaryRequests, processors: secondaryProcessors };\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 // Save query annotations\n this._resultAnnotations = data.annotations;\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.setState({ data: dataWithLayersApplied, _hasFetchedData: hasFetchedData });\n this._results.next({ origin: this, data: dataWithLayersApplied });\n };\n\n private _combineDataLayers(data: PanelData) {\n if (this._layerAnnotations && this._layerAnnotations.length > 0) {\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 * Walk up the scene graph and find any ExtraQueryProviders.\n *\n * This will return an array of the closest provider of each type.\n */\n private getClosestExtraQueryProviders(): Array<ExtraQueryProvider<any>> {\n // Maintain a map from provider constructor to provider object. The constructor\n // is used as a unique key for each class, to ensure we have no more than one\n // type of each type of provider.\n const found = new Map();\n if (!this.parent) {\n return [];\n }\n getClosest(this.parent, (s) => {\n if (isExtraQueryProvider(s) && !found.has(s.constructor)) {\n found.set(s.constructor, s);\n }\n s.forEachChild((child) => {\n if (isExtraQueryProvider(child) && !found.has(child.constructor)) {\n found.set(child.constructor, child);\n }\n });\n // Always return null so that the search continues to the top of\n // the scene graph.\n return null;\n });\n return Array.from(found.values());\n }\n\n /**\n * Walk up scene graph and find the closest filterset with matching data source\n */\n private findAndSubscribeToAdHocFilters(interpolatedUid: string | undefined) {\n const filtersVar = findActiveAdHocFilterVariableByUid(interpolatedUid);\n\n if (this._adhocFiltersVar !== filtersVar) {\n this._adhocFiltersVar = filtersVar;\n this._updateExplicitVariableDependencies();\n }\n\n const groupByVar = findActiveGroupByVariablesByUid(interpolatedUid);\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 private isQueryModeAuto(): boolean {\n return (this.state.runQueriesMode ?? 'auto') === 'auto';\n }\n}\n\nexport function findFirstDatasource(targets: DataQuery[]): DataSourceRef | undefined {\n return targets.find((t) => t.datasource !== null)?.datasource ?? undefined;\n}\n\nfunction allFramesEmpty(frames?: DataFrame[]) {\n if (!frames) {\n return true;\n }\n\n for (let i = 0; i < frames.length; i++) {\n if (frames[i].length > 0) {\n return false;\n }\n }\n\n return true;\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SceneQueryRunner.js","sources":["../../../src/querying/SceneQueryRunner.ts"],"sourcesContent":["import { cloneDeep, isEqual } 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, config } from '@grafana/runtime';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport {\n DataLayerFilter,\n SceneDataProvider,\n SceneDataProviderResult,\n SceneDataQuery,\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 { getClosest } from '../core/sceneGraph/utils';\nimport { isExtraQueryProvider, ExtraQueryDataProcessor, ExtraQueryProvider } from './ExtraQueryProvider';\nimport { passthroughProcessor, extraQueryProcessingOperator } from './extraQueryProcessingOperator';\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, isFilterComplete } from '../variables/adhoc/AdHocFiltersVariable';\nimport { SceneVariable } from '../variables/types';\nimport { DataLayersMerger } from './DataLayersMerger';\nimport { interpolate } from '../core/sceneGraph/sceneGraph';\nimport { wrapInSafeSerializableSceneObject } from '../utils/wrapInSafeSerializableSceneObject';\nimport { SceneScopesBridge } from '../core/SceneScopesBridge';\n\nlet counter = 100;\n\nexport function getNextRequestId() {\n return 'SQR' + counter++;\n}\n\nexport interface QueryRunnerState extends SceneObjectState {\n data?: PanelData;\n queries: SceneDataQuery[];\n datasource?: DataSourceRef;\n minInterval?: string;\n maxDataPoints?: number;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n cacheTimeout?: DataQueryRequest['cacheTimeout'];\n queryCachingTTL?: DataQueryRequest['queryCachingTTL'];\n /**\n * When set to auto (the default) query runner will issue queries on activate (when variable dependencies are ready) or when time range change.\n * Set to manual to have full manual control over when queries are issued. Try not to set this. This is mainly useful for unit tests, or special edge case workflows.\n */\n runQueriesMode?: 'auto' | 'manual';\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\n// The requests that will be run by the query runner.\n//\n// Generally the query runner will run a single primary request.\n// If the scene graph contains implementations of\n// `ExtraQueryProvider`, the requests created by these\n// implementations will be added to the list of secondary requests,\n// and these will be executed at the same time as the primary request.\n//\n// The results of each secondary request will be passed to an associated\n// processor function (along with the results of the primary request),\n// which can transform the results as desired.\ninterface PreparedRequests {\n // The primary request to run.\n primary: DataQueryRequest;\n // A possibly empty list of secondary requests to run alongside\n // the primary request.\n secondaries: DataQueryRequest[];\n // A map from `requestId` of secondary requests to processors\n // for those requests. Provided by the `ExtraQueryProvider`.\n processors: Map<string, ExtraQueryDataProcessor>;\n}\n\nexport class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {\n private _querySub?: Unsubscribable;\n private _dataLayersSub?: Unsubscribable;\n private _dataLayersMerger = new DataLayersMerger();\n private _timeSub?: Unsubscribable;\n private _timeSubRange?: SceneTimeRangeLike;\n private _scopesSub?: Unsubscribable;\n private _scopesSubBridge?: SceneScopesBridge;\n private _containerWidth?: number;\n private _variableValueRecorder = new VariableValueRecorder();\n private _results = new ReplaySubject<SceneDataProviderResult>(1);\n private _scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };\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', 'minInterval'],\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 if (this.isQueryModeAuto()) {\n const timeRange = sceneGraph.getTimeRange(this);\n const scopesBridge = sceneGraph.getScopesBridge(this);\n\n // Add subscriptions to any extra providers so that they rerun queries\n // when their state changes and they should rerun.\n const providers = this.getClosestExtraQueryProviders();\n for (const provider of providers) {\n this._subs.add(\n provider.subscribeToState((n, p) => {\n if (provider.shouldRerun(p, n, this.state.queries)) {\n this.runQueries();\n }\n })\n );\n }\n\n this.subscribeToScopesChanges(scopesBridge);\n\n this.subscribeToTimeRangeChanges(timeRange);\n\n if (this.shouldRunQueriesOnActivate()) {\n this.runQueries();\n }\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 = this._dataLayersMerger\n .getMergedStream(dataLayers)\n .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 // Skip unnessary state updates\n if (\n allFramesEmpty(annotations) &&\n allFramesEmpty(this._layerAnnotations) &&\n isEqual(alertState, this.state.data?.alertState)\n ) {\n return;\n }\n\n this._layerAnnotations = annotations;\n\n const baseStateUpdate = this.state.data ? this.state.data : { ...emptyPanelData, timeRange: timeRange.state.value };\n\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 if (this.isQueryModeAuto()) {\n this.runQueries();\n }\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 || !this.isQueryModeAuto()) {\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 subscribeToScopesChanges(scopesBridge: SceneScopesBridge | undefined) {\n if (!scopesBridge) {\n // Nothing to do, there's no scopes bridge\n return;\n }\n\n if (this._scopesSubBridge === scopesBridge) {\n // Nothing to do, already subscribed\n return;\n }\n\n if (this._scopesSub) {\n this._scopesSub.unsubscribe();\n }\n\n this._scopesSubBridge = scopesBridge;\n\n this._scopesSub = scopesBridge.subscribeToValue(() => {\n this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);\n });\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.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(this));\n });\n }\n\n public runQueries() {\n const timeRange = sceneGraph.getTimeRange(this);\n const scopesBridge = sceneGraph.getScopesBridge(this);\n if (this.isQueryModeAuto()) {\n this.subscribeToTimeRangeChanges(timeRange);\n this.subscribeToScopesChanges(scopesBridge);\n }\n\n this.runWithTimeRangeAndScopes(timeRange, scopesBridge);\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 runWithTimeRangeAndScopes(timeRange: SceneTimeRangeLike, scopesBridge: SceneScopesBridge | undefined) {\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 this.setState({ data: { ...(this.state.data ?? emptyPanelData), state: LoadingState.Loading } });\n return;\n }\n\n // Skip executing queries if scopes are in loading state and there are values, meaning further\n // data will be received after scope filters are loaded\n if (scopesBridge?.isLoading() && scopesBridge?.getValue().length) {\n writeSceneLog('SceneQueryRunner', 'Scopes are in loading state, skipping query execution');\n this.setState({ data: { ...(this.state.data ?? emptyPanelData), state: LoadingState.Loading } });\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(ds.uid);\n\n const runRequest = getRunRequest();\n const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds, scopesBridge);\n\n writeSceneLog('SceneQueryRunner', 'Starting runRequest', this.state.key);\n\n let stream = runRequest(ds, primary);\n\n if (secondaries.length > 0) {\n // Submit all secondary requests in parallel.\n const secondaryStreams = secondaries.map((r) => runRequest(ds, r));\n // Create the rxjs operator which will combine the primary and secondary responses\n // by calling the correct processor functions provided by the\n // extra request providers.\n const op = extraQueryProcessingOperator(processors);\n // Combine the primary and secondary streams into a single stream, and apply the operator.\n stream = forkJoin([stream, ...secondaryStreams]).pipe(op);\n }\n\n stream = stream.pipe(\n registerQueryWithController({\n type: 'data',\n request: primary,\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['_variableValueRecorder'] = this._variableValueRecorder.cloneAndRecordCurrentValuesForSceneObject(this);\n clone['_containerWidth'] = this._containerWidth;\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 scopesBridge: SceneScopesBridge | undefined\n ): PreparedRequests {\n const { minInterval, queries } = this.state;\n\n let request: DataQueryRequest<DataQueryExtended> = {\n app: 'scenes',\n requestId: getNextRequestId(),\n timezone: timeRange.getTimeZone(),\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 scopes: scopesBridge?.getValue(),\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 request.filters = [];\n\n if (this._adhocFiltersVar.state.baseFilters?.length) {\n const injectedBaseFilters = this._adhocFiltersVar.state.baseFilters.filter((filter) => filter.origin);\n request.filters = request.filters.concat(injectedBaseFilters);\n }\n\n // only pass filters that have both key and value\n // @ts-ignore (Temporary ignore until we update @grafana/data)\n request.filters = request.filters.concat(this._adhocFiltersVar.state.filters.filter(isFilterComplete));\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 const lowerIntervalLimit = minInterval ? interpolate(this, 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 // If there are any extra request providers, we need to add a new request for each\n // and map the request's ID to the processor function given by the provider, to ensure that\n // the processor is called with the correct response data.\n const primaryTimeRange = timeRange.state.value;\n let secondaryRequests: DataQueryRequest[] = [];\n let secondaryProcessors = new Map();\n for (const provider of this.getClosestExtraQueryProviders() ?? []) {\n for (const { req, processor } of provider.getExtraQueries(request)) {\n const requestId = getNextRequestId();\n secondaryRequests.push({ ...req, requestId });\n secondaryProcessors.set(requestId, processor ?? passthroughProcessor);\n }\n }\n request.range = primaryTimeRange;\n return { primary: request, secondaries: secondaryRequests, processors: secondaryProcessors };\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 // Save query annotations\n this._resultAnnotations = data.annotations;\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.setState({ data: dataWithLayersApplied, _hasFetchedData: hasFetchedData });\n this._results.next({ origin: this, data: dataWithLayersApplied });\n };\n\n private _combineDataLayers(data: PanelData) {\n if (this._layerAnnotations && this._layerAnnotations.length > 0) {\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 * Walk up the scene graph and find any ExtraQueryProviders.\n *\n * This will return an array of the closest provider of each type.\n */\n private getClosestExtraQueryProviders(): Array<ExtraQueryProvider<any>> {\n // Maintain a map from provider constructor to provider object. The constructor\n // is used as a unique key for each class, to ensure we have no more than one\n // type of each type of provider.\n const found = new Map();\n if (!this.parent) {\n return [];\n }\n getClosest(this.parent, (s) => {\n if (isExtraQueryProvider(s) && !found.has(s.constructor)) {\n found.set(s.constructor, s);\n }\n s.forEachChild((child) => {\n if (isExtraQueryProvider(child) && !found.has(child.constructor)) {\n found.set(child.constructor, child);\n }\n });\n // Always return null so that the search continues to the top of\n // the scene graph.\n return null;\n });\n return Array.from(found.values());\n }\n\n /**\n * Walk up scene graph and find the closest filterset with matching data source\n */\n private findAndSubscribeToAdHocFilters(interpolatedUid: string | undefined) {\n const filtersVar = findActiveAdHocFilterVariableByUid(interpolatedUid);\n\n if (this._adhocFiltersVar !== filtersVar) {\n this._adhocFiltersVar = filtersVar;\n this._updateExplicitVariableDependencies();\n }\n\n const groupByVar = findActiveGroupByVariablesByUid(interpolatedUid);\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 private isQueryModeAuto(): boolean {\n return (this.state.runQueriesMode ?? 'auto') === 'auto';\n }\n}\n\nexport function findFirstDatasource(targets: DataQuery[]): DataSourceRef | undefined {\n return targets.find((t) => t.datasource !== null)?.datasource ?? undefined;\n}\n\nfunction allFramesEmpty(frames?: DataFrame[]) {\n if (!frames) {\n return true;\n }\n\n for (let i = 0; i < frames.length; i++) {\n if (frames[i].length > 0) {\n return false;\n }\n }\n\n return true;\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1,24 +1,5 @@
|
|
|
1
1
|
import { of, mergeMap, forkJoin, map } from 'rxjs';
|
|
2
2
|
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __defProps = Object.defineProperties;
|
|
5
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
-
var __spreadValues = (a, b) => {
|
|
11
|
-
for (var prop in b || (b = {}))
|
|
12
|
-
if (__hasOwnProp.call(b, prop))
|
|
13
|
-
__defNormalProp(a, prop, b[prop]);
|
|
14
|
-
if (__getOwnPropSymbols)
|
|
15
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
-
if (__propIsEnum.call(b, prop))
|
|
17
|
-
__defNormalProp(a, prop, b[prop]);
|
|
18
|
-
}
|
|
19
|
-
return a;
|
|
20
|
-
};
|
|
21
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
22
3
|
const passthroughProcessor = (_, secondary) => of(secondary);
|
|
23
4
|
const extraQueryProcessingOperator = (processors) => (data) => {
|
|
24
5
|
return data.pipe(
|
|
@@ -31,13 +12,14 @@ const extraQueryProcessingOperator = (processors) => (data) => {
|
|
|
31
12
|
}),
|
|
32
13
|
map(([primary, ...processedSecondaries]) => {
|
|
33
14
|
var _a;
|
|
34
|
-
return
|
|
15
|
+
return {
|
|
16
|
+
...primary,
|
|
35
17
|
series: [...primary.series, ...processedSecondaries.flatMap((s) => s.series)],
|
|
36
18
|
annotations: [...(_a = primary.annotations) != null ? _a : [], ...processedSecondaries.flatMap((s) => {
|
|
37
19
|
var _a2;
|
|
38
20
|
return (_a2 = s.annotations) != null ? _a2 : [];
|
|
39
21
|
})]
|
|
40
|
-
}
|
|
22
|
+
};
|
|
41
23
|
})
|
|
42
24
|
);
|
|
43
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraQueryProcessingOperator.js","sources":["../../../src/querying/extraQueryProcessingOperator.ts"],"sourcesContent":["import { PanelData } from '@grafana/data';\nimport { forkJoin, of, map, mergeMap, Observable } from 'rxjs';\nimport { ExtraQueryDataProcessor } from './ExtraQueryProvider';\n\n// Passthrough processor for use with ExtraQuerys.\nexport const passthroughProcessor: ExtraQueryDataProcessor = (_, secondary) => of(secondary);\n\n// Factory function which takes a map from request ID to processor functions and\n// returns an rxjs operator which operates on an array of panel data responses.\n//\n// Each secondary response is transformed according to the processor function\n// identified by it's request ID. The processor function is passed the primary\n// response and the secondary response to be processed.\n//\n// The output is a single frame with the primary series and all processed\n// secondary series combined.\nexport const extraQueryProcessingOperator =\n (processors: Map<string, ExtraQueryDataProcessor>) => (data: Observable<[PanelData, ...PanelData[]]>) => {\n return data.pipe(\n mergeMap(([primary, ...secondaries]) => {\n const processedSecondaries = secondaries.flatMap((s) => {\n return processors.get(s.request!.requestId)?.(primary, s) ?? of(s);\n });\n return forkJoin([of(primary), ...processedSecondaries]);\n }),\n map(([primary, ...processedSecondaries]) => ({\n ...primary,\n series: [...primary.series, ...processedSecondaries.flatMap((s) => s.series)],\n annotations: [...(primary.annotations ?? []), ...processedSecondaries.flatMap((s) => s.annotations ?? [])],\n }))\n );\n };\n"],"names":["_a"],"mappings":"
|
|
1
|
+
{"version":3,"file":"extraQueryProcessingOperator.js","sources":["../../../src/querying/extraQueryProcessingOperator.ts"],"sourcesContent":["import { PanelData } from '@grafana/data';\nimport { forkJoin, of, map, mergeMap, Observable } from 'rxjs';\nimport { ExtraQueryDataProcessor } from './ExtraQueryProvider';\n\n// Passthrough processor for use with ExtraQuerys.\nexport const passthroughProcessor: ExtraQueryDataProcessor = (_, secondary) => of(secondary);\n\n// Factory function which takes a map from request ID to processor functions and\n// returns an rxjs operator which operates on an array of panel data responses.\n//\n// Each secondary response is transformed according to the processor function\n// identified by it's request ID. The processor function is passed the primary\n// response and the secondary response to be processed.\n//\n// The output is a single frame with the primary series and all processed\n// secondary series combined.\nexport const extraQueryProcessingOperator =\n (processors: Map<string, ExtraQueryDataProcessor>) => (data: Observable<[PanelData, ...PanelData[]]>) => {\n return data.pipe(\n mergeMap(([primary, ...secondaries]) => {\n const processedSecondaries = secondaries.flatMap((s) => {\n return processors.get(s.request!.requestId)?.(primary, s) ?? of(s);\n });\n return forkJoin([of(primary), ...processedSecondaries]);\n }),\n map(([primary, ...processedSecondaries]) => ({\n ...primary,\n series: [...primary.series, ...processedSecondaries.flatMap((s) => s.series)],\n annotations: [...(primary.annotations ?? []), ...processedSecondaries.flatMap((s) => s.annotations ?? [])],\n }))\n );\n };\n"],"names":["_a"],"mappings":";;AAKO,MAAM,oBAAgD,GAAA,CAAC,CAAG,EAAA,SAAA,KAAc,GAAG,SAAS;AAWpF,MAAM,4BACX,GAAA,CAAC,UAAqD,KAAA,CAAC,IAAkD,KAAA;AACvG,EAAA,OAAO,IAAK,CAAA,IAAA;AAAA,IACV,QAAS,CAAA,CAAC,CAAC,OAAA,EAAY,cAAW,CAAM,KAAA;AACtC,MAAA,MAAM,oBAAuB,GAAA,WAAA,CAAY,OAAQ,CAAA,CAAC,CAAM,KAAA;AApBhE,QAAA,IAAA,EAAA,EAAA,EAAA;AAqBU,QAAO,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,UAAA,CAAW,GAAI,CAAA,CAAA,CAAE,OAAS,CAAA,SAAS,CAAnC,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuC,OAAS,EAAA,CAAA,CAAA,KAAhD,IAAsD,GAAA,EAAA,GAAA,EAAA,CAAG,CAAC,CAAA;AAAA,OAClE,CAAA;AACD,MAAA,OAAO,SAAS,CAAC,EAAA,CAAG,OAAO,CAAG,EAAA,GAAG,oBAAoB,CAAC,CAAA;AAAA,KACvD,CAAA;AAAA,IACD,GAAI,CAAA,CAAC,CAAC,OAAA,EAAY,uBAAoB,CAAG,KAAA;AAzB/C,MAAA,IAAA,EAAA;AAyBmD,MAAA,OAAA;AAAA,QAC3C,GAAG,OAAA;AAAA,QACH,MAAQ,EAAA,CAAC,GAAG,OAAA,CAAQ,MAAQ,EAAA,GAAG,oBAAqB,CAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAE,CAAA,MAAM,CAAC,CAAA;AAAA,QAC5E,WAAa,EAAA,CAAC,GAAI,CAAA,EAAA,GAAA,OAAA,CAAQ,WAAR,KAAA,IAAA,GAAA,EAAA,GAAuB,EAAC,EAAI,GAAG,oBAAA,CAAqB,OAAQ,CAAA,CAAC,CAAG,KAAA;AA5B1F,UAAAA,IAAAA,GAAAA;AA4B6F,UAAA,OAAA,CAAAA,GAAA,GAAA,CAAA,CAAE,WAAF,KAAA,IAAA,GAAAA,MAAiB,EAAC;AAAA,SAAC,CAAC;AAAA,OAC3G;AAAA,KAAE;AAAA,GACJ;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEnrichedDataRequest.js","sources":["../../../src/querying/getEnrichedDataRequest.ts"],"sourcesContent":["import { DataQueryRequest } from '@grafana/data';\nimport { isDataRequestEnricher, SceneObject } from '../core/types';\n\nexport function getEnrichedDataRequest(sourceRunner: SceneObject): Partial<DataQueryRequest> | null {\n const root = sourceRunner.getRoot();\n\n if (isDataRequestEnricher(root)) {\n return root.enrichDataRequest(sourceRunner);\n }\n\n return null;\n}\n"],"names":[],"mappings":";;AAGO,SAAS,uBAAuB,YAA6D,EAAA;AAClG,EAAM,MAAA,IAAA,GAAO,aAAa,OAAQ,EAAA
|
|
1
|
+
{"version":3,"file":"getEnrichedDataRequest.js","sources":["../../../src/querying/getEnrichedDataRequest.ts"],"sourcesContent":["import { DataQueryRequest } from '@grafana/data';\nimport { isDataRequestEnricher, SceneObject } from '../core/types';\n\nexport function getEnrichedDataRequest(sourceRunner: SceneObject): Partial<DataQueryRequest> | null {\n const root = sourceRunner.getRoot();\n\n if (isDataRequestEnricher(root)) {\n return root.enrichDataRequest(sourceRunner);\n }\n\n return null;\n}\n"],"names":[],"mappings":";;AAGO,SAAS,uBAAuB,YAA6D,EAAA;AAClG,EAAM,MAAA,IAAA,GAAO,aAAa,OAAQ,EAAA;AAElC,EAAI,IAAA,qBAAA,CAAsB,IAAI,CAAG,EAAA;AAC/B,IAAO,OAAA,IAAA,CAAK,kBAAkB,YAAY,CAAA;AAAA;AAG5C,EAAO,OAAA,IAAA;AACT;;;;"}
|
|
@@ -6,28 +6,22 @@ import { writeSceneLog } from '../../utils/writeSceneLog.js';
|
|
|
6
6
|
import { VariableDependencyConfig } from '../../variables/VariableDependencyConfig.js';
|
|
7
7
|
import { VariableValueRecorder } from '../../variables/VariableValueRecorder.js';
|
|
8
8
|
|
|
9
|
-
var __defProp = Object.defineProperty;
|
|
10
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
11
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
13
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
14
|
-
var __spreadValues = (a, b) => {
|
|
15
|
-
for (var prop in b || (b = {}))
|
|
16
|
-
if (__hasOwnProp.call(b, prop))
|
|
17
|
-
__defNormalProp(a, prop, b[prop]);
|
|
18
|
-
if (__getOwnPropSymbols)
|
|
19
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
20
|
-
if (__propIsEnum.call(b, prop))
|
|
21
|
-
__defNormalProp(a, prop, b[prop]);
|
|
22
|
-
}
|
|
23
|
-
return a;
|
|
24
|
-
};
|
|
25
9
|
class SceneDataLayerBase extends SceneObjectBase {
|
|
10
|
+
/**
|
|
11
|
+
* For variables support in data layer provide variableDependencyStatePaths with keys of the state to be scanned for variables.
|
|
12
|
+
*/
|
|
26
13
|
constructor(initialState, variableDependencyStatePaths = []) {
|
|
27
|
-
super(
|
|
28
|
-
isEnabled: true
|
|
29
|
-
|
|
14
|
+
super({
|
|
15
|
+
isEnabled: true,
|
|
16
|
+
...initialState
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Subject to emit results to.
|
|
20
|
+
*/
|
|
30
21
|
this._results = new ReplaySubject(1);
|
|
22
|
+
/**
|
|
23
|
+
* Mark data provider as data layer
|
|
24
|
+
*/
|
|
31
25
|
this.isDataLayer = true;
|
|
32
26
|
this._variableValueRecorder = new VariableValueRecorder();
|
|
33
27
|
this._variableDependency = new VariableDependencyConfig(this, {
|
|
@@ -103,6 +97,9 @@ class SceneDataLayerBase extends SceneObjectBase {
|
|
|
103
97
|
}
|
|
104
98
|
return false;
|
|
105
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* This helper function is to counter the contravariance of setState
|
|
102
|
+
*/
|
|
106
103
|
setStateHelper(state) {
|
|
107
104
|
setBaseClassState(this, state);
|
|
108
105
|
}
|