@grafana/scenes 6.47.1--canary.1303.19493819306.0 → 6.47.1--canary.1303.19499670138.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/dist/esm/index.js +2 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/variables/utils.js +1 -47
- package/dist/esm/variables/utils.js.map +1 -1
- package/dist/index.d.ts +184 -188
- package/dist/index.js +1 -48
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/esm/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { buildPathIdFor } from './utils/pathId.js';
|
|
|
8
8
|
export { PATH_ID_SEPARATOR } from './utils/pathId.js';
|
|
9
9
|
import { isRepeatCloneOrChildOf } from './utils/utils.js';
|
|
10
10
|
import { registerVariableMacro } from './variables/macros/index.js';
|
|
11
|
-
import {
|
|
11
|
+
import { escapeURLDelimiters, escapeLabelValueInExactSelector, escapeLabelValueInRegexSelector, renderPrometheusLabelFilters } from './variables/utils.js';
|
|
12
12
|
export { escapeUrlPipeDelimiters } from './variables/utils.js';
|
|
13
13
|
import { isSwitchVariable, isGroupByVariable, isTextBoxVariable, isQueryVariable, isIntervalVariable, isDataSourceVariable, isCustomVariable, isConstantVariable, isAdHocVariable } from './variables/variants/guards.js';
|
|
14
14
|
export { isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject } from './core/types.js';
|
|
@@ -121,10 +121,7 @@ const sceneUtils = {
|
|
|
121
121
|
isGroupByVariable,
|
|
122
122
|
isSwitchVariable,
|
|
123
123
|
isRepeatCloneOrChildOf,
|
|
124
|
-
buildPathIdFor
|
|
125
|
-
//drilldowns
|
|
126
|
-
verifyDrilldownApplicability,
|
|
127
|
-
getDrilldownApplicability
|
|
124
|
+
buildPathIdFor
|
|
128
125
|
};
|
|
129
126
|
|
|
130
127
|
export { registerRuntimeDataSource, sceneUtils };
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n isSwitchVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\nexport * as performanceUtils from './performance';\nexport { writePerformanceLog } from './utils/writePerformanceLog';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n} from './behaviors/types';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { SwitchVariable } from './variables/variants/SwitchVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport { AdHocFiltersVariable } from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport type {\n AdHocFiltersController,\n AdHocFiltersControllerState,\n} from './variables/adhoc/controller/AdHocFiltersController';\nexport { AdHocFiltersVariableController } from './variables/adhoc/controller/AdHocFiltersVariableController';\nexport { AdHocFiltersComboboxRenderer } from './variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters } from './variables/utils';\n\nexport { type UrlSyncManagerLike, UrlSyncManager, NewSceneObjectAddedEvent } from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isSwitchVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwJO,MAAM,UAAa,GAAA;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
|
|
@@ -2,8 +2,6 @@ import { isEqual } from 'lodash';
|
|
|
2
2
|
import { sceneGraph } from '../core/sceneGraph/index.js';
|
|
3
3
|
import { SceneQueryRunner } from '../querying/SceneQueryRunner.js';
|
|
4
4
|
import { css } from '@emotion/css';
|
|
5
|
-
import { getDataSource } from '../utils/getDataSource.js';
|
|
6
|
-
import { wrapInSafeSerializableSceneObject } from '../utils/wrapInSafeSerializableSceneObject.js';
|
|
7
5
|
|
|
8
6
|
function isVariableValueEqual(a, b) {
|
|
9
7
|
if (a === b) {
|
|
@@ -187,50 +185,6 @@ function getNonApplicablePillStyles(theme) {
|
|
|
187
185
|
})
|
|
188
186
|
};
|
|
189
187
|
}
|
|
190
|
-
function verifyDrilldownApplicability(sourceObject, queriesDataSource, drilldownDatasource, isApplicabilityEnabled) {
|
|
191
|
-
const datasourceUid = sceneGraph.interpolate(sourceObject, queriesDataSource == null ? void 0 : queriesDataSource.uid);
|
|
192
|
-
return Boolean(
|
|
193
|
-
isApplicabilityEnabled && datasourceUid === sceneGraph.interpolate(sourceObject, drilldownDatasource == null ? void 0 : drilldownDatasource.uid)
|
|
194
|
-
);
|
|
195
|
-
}
|
|
196
|
-
async function getDrilldownApplicability(queryRunner, filtersVar, groupByVar) {
|
|
197
|
-
var _a, _b, _c, _d, _e, _f;
|
|
198
|
-
if (!filtersVar && !groupByVar) {
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
const datasource = queryRunner.state.datasource;
|
|
202
|
-
const queries = (_b = (_a = queryRunner.state.data) == null ? void 0 : _a.request) == null ? void 0 : _b.targets;
|
|
203
|
-
const ds = await getDataSource(datasource, {
|
|
204
|
-
__sceneObject: wrapInSafeSerializableSceneObject(queryRunner)
|
|
205
|
-
});
|
|
206
|
-
if (!ds.getDrilldownsApplicability) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
const dsUid = sceneGraph.interpolate(queryRunner, datasource == null ? void 0 : datasource.uid);
|
|
210
|
-
const timeRange = sceneGraph.getTimeRange(queryRunner).state.value;
|
|
211
|
-
const groupByKeys = [];
|
|
212
|
-
const filters = [];
|
|
213
|
-
const hasGroupByApplicability = groupByVar && dsUid === sceneGraph.interpolate(groupByVar, (_c = groupByVar == null ? void 0 : groupByVar.state.datasource) == null ? void 0 : _c.uid);
|
|
214
|
-
const hasFiltersApplicability = filtersVar && dsUid === sceneGraph.interpolate(filtersVar, (_e = (_d = filtersVar.state) == null ? void 0 : _d.datasource) == null ? void 0 : _e.uid);
|
|
215
|
-
if (!hasGroupByApplicability && !hasFiltersApplicability) {
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
if (hasGroupByApplicability) {
|
|
219
|
-
groupByKeys.push(
|
|
220
|
-
...Array.isArray(groupByVar.state.value) ? groupByVar.state.value.map((v) => String(v)) : groupByVar.state.value ? [String(groupByVar.state.value)] : []
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
if (hasFiltersApplicability) {
|
|
224
|
-
filters.push(...filtersVar.state.filters, ...(_f = filtersVar.state.originFilters) != null ? _f : []);
|
|
225
|
-
}
|
|
226
|
-
return await ds.getDrilldownsApplicability({
|
|
227
|
-
groupByKeys,
|
|
228
|
-
filters,
|
|
229
|
-
queries,
|
|
230
|
-
timeRange,
|
|
231
|
-
scopes: sceneGraph.getScopes(queryRunner)
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
188
|
|
|
235
|
-
export { dataFromResponse, escapeLabelValueInExactSelector, escapeLabelValueInRegexSelector, escapeOriginFilterUrlDelimiters, escapeURLDelimiters, escapeUrlCommaDelimiters, escapeUrlHashDelimiters, escapeUrlPipeDelimiters,
|
|
189
|
+
export { dataFromResponse, escapeLabelValueInExactSelector, escapeLabelValueInRegexSelector, escapeOriginFilterUrlDelimiters, escapeURLDelimiters, escapeUrlCommaDelimiters, escapeUrlHashDelimiters, escapeUrlPipeDelimiters, getNonApplicablePillStyles, getQueriesForVariables, handleOptionGroups, isVariableValueEqual, renderPrometheusLabelFilters, responseHasError, safeStringifyValue, toUrlCommaDelimitedString, unescapeUrlDelimiters };
|
|
236
190
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/variables/utils.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { VariableValue } from './types';\nimport {\n AdHocVariableFilter,\n DataQueryError,\n GetTagResponse,\n GrafanaTheme2,\n MetricFindValue,\n // @ts-expect-error (temporary till we update grafana/data)\n DrilldownsApplicability,\n SelectableValue,\n} from '@grafana/data';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneDataQuery, SceneObject, SceneObjectState } from '../core/types';\nimport { SceneQueryRunner } from '../querying/SceneQueryRunner';\nimport { DataSourceRef } from '@grafana/schema';\nimport { css } from '@emotion/css';\nimport { getDataSource } from '../utils/getDataSource';\nimport { wrapInSafeSerializableSceneObject } from '../utils/wrapInSafeSerializableSceneObject';\nimport { AdHocFiltersVariable } from './adhoc/AdHocFiltersVariable';\nimport { GroupByVariable } from './groupby/GroupByVariable';\n\nexport function isVariableValueEqual(a: VariableValue | null | undefined, b: VariableValue | null | undefined) {\n if (a === b) {\n return true;\n }\n\n return isEqual(a, b);\n}\n\nexport function safeStringifyValue(value: unknown) {\n // Avoid circular references ignoring those references\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_: string, value: object | null) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n try {\n return JSON.stringify(value, getCircularReplacer());\n } catch (error) {\n console.error(error);\n }\n\n return '';\n}\n\nexport function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]) {\n return filters.map((filter) => renderFilter(filter)).join(',');\n}\n\nfunction renderFilter(filter: AdHocVariableFilter) {\n let value = '';\n let operator = filter.operator;\n\n // map \"one of\" operator to regex\n if (operator === '=|') {\n operator = '=~';\n // TODO remove when we're on the latest version of @grafana/data\n // @ts-expect-error\n value = filter.values?.map(escapeLabelValueInRegexSelector).join('|');\n } else if (operator === '!=|') {\n operator = '!~';\n // TODO remove when we're on the latest version of @grafana/data\n // @ts-expect-error\n value = filter.values?.map(escapeLabelValueInRegexSelector).join('|');\n } else if (operator === '=~' || operator === '!~') {\n value = escapeLabelValueInRegexSelector(filter.value);\n } else {\n value = escapeLabelValueInExactSelector(filter.value);\n }\n\n return `${filter.key}${operator}\"${value}\"`;\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function escapeLabelValueInRegexSelector(labelValue: string): string {\n return escapeLabelValueInExactSelector(escapeLokiRegexp(labelValue));\n}\n\nexport function isRegexSelector(selector?: string) {\n if (selector && (selector.includes('=~') || selector.includes('!~'))) {\n return true;\n }\n return false;\n}\n\n// Loki regular-expressions use the RE2 syntax (https://github.com/google/re2/wiki/Syntax),\n// so every character that matches something in that list has to be escaped.\n// the list of meta characters is: *+?()|\\.[]{}^$\n// we make a javascript regular expression that matches those characters:\nconst RE2_METACHARACTERS = /[*+?()|\\\\.\\[\\]{}^$]/g;\nfunction escapeLokiRegexp(value: string): string {\n return value.replace(RE2_METACHARACTERS, '\\\\$&');\n}\n\n/**\n * Get all queries in the scene that have the same datasource as provided source object\n */\nexport function getQueriesForVariables(\n sourceObject: SceneObject<SceneObjectState & { datasource: DataSourceRef | null }>\n) {\n const runners = sceneGraph.findAllObjects(\n sourceObject.getRoot(),\n (o) => o instanceof SceneQueryRunner\n ) as SceneQueryRunner[];\n\n const interpolatedDsUuid = sceneGraph.interpolate(sourceObject, sourceObject.state.datasource?.uid);\n\n const applicableRunners = filterOutInactiveRunnerDuplicates(runners).filter((r) => {\n const interpolatedQueryDsUuid = sceneGraph.interpolate(sourceObject, r.state.datasource?.uid);\n\n return interpolatedQueryDsUuid === interpolatedDsUuid;\n });\n\n if (applicableRunners.length === 0) {\n return [];\n }\n\n const result: SceneDataQuery[] = [];\n applicableRunners.forEach((r) => {\n result.push(\n ...r.state.queries.filter((q) => {\n if (!q.datasource || !q.datasource.uid) {\n return true;\n }\n\n const interpolatedQueryDsUuid = sceneGraph.interpolate(sourceObject, q.datasource.uid);\n return interpolatedQueryDsUuid === interpolatedDsUuid;\n })\n );\n });\n\n return result;\n}\n\n// Filters out inactive runner duplicates, keeping only the ones that are currently active.\n// This is needed for scnearios whan a query runner is cloned and the original is not removed but de-activated.\n// Can happen i.e. when editing a panel in Grafana Core dashboards.\nfunction filterOutInactiveRunnerDuplicates(runners: SceneQueryRunner[]) {\n // Group items by key\n const groupedItems: { [key: string]: SceneQueryRunner[] } = {};\n\n for (const item of runners) {\n if (item.state.key) {\n if (!(item.state.key in groupedItems)) {\n groupedItems[item.state.key] = [];\n }\n groupedItems[item.state.key].push(item);\n }\n }\n\n // Filter out inactive items and concatenate active items\n return Object.values(groupedItems).flatMap((group) => {\n const activeItems = group.filter((item) => item.isActive);\n // Keep inactive items if there's only one item with the key\n if (activeItems.length === 0 && group.length === 1) {\n return group;\n }\n return activeItems;\n });\n}\n\nexport function escapeUrlPipeDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the pipe due to using it as a filter separator\n return (value = /\\|/g[Symbol.replace](value, '__gfp__'));\n}\n\nexport function escapeUrlCommaDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the comma due to using it as a value/label separator\n return /,/g[Symbol.replace](value, '__gfc__');\n}\n\nexport function escapeUrlHashDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the hash due to using it as a value/label separator\n return /#/g[Symbol.replace](value, '__gfh__');\n}\n\nexport function escapeOriginFilterUrlDelimiters(value: string | undefined): string {\n return escapeUrlHashDelimiters(escapeUrlPipeDelimiters(value));\n}\n\nexport function escapeURLDelimiters(value: string | undefined): string {\n return escapeUrlCommaDelimiters(escapeUrlPipeDelimiters(value));\n}\n\nexport function unescapeUrlDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n value = /__gfp__/g[Symbol.replace](value, '|');\n value = /__gfc__/g[Symbol.replace](value, ',');\n value = /__gfh__/g[Symbol.replace](value, '#');\n\n return value;\n}\n\nexport function toUrlCommaDelimitedString(key: string, label?: string): string {\n // Omit for identical key/label or when label is not set at all\n if (!label || key === label) {\n return escapeUrlCommaDelimiters(key);\n }\n\n return [key, label].map(escapeUrlCommaDelimiters).join(',');\n}\n\nexport function dataFromResponse(response: GetTagResponse | MetricFindValue[]) {\n return Array.isArray(response) ? response : response.data;\n}\n\nexport function responseHasError(\n response: GetTagResponse | MetricFindValue[]\n): response is GetTagResponse & { error: DataQueryError } {\n return !Array.isArray(response) && Boolean(response.error);\n}\n\n// Collect a flat list of SelectableValues with a `group` property into a hierarchical list with groups\nexport function handleOptionGroups(values: SelectableValue[]): Array<SelectableValue<string>> {\n const result: Array<SelectableValue<string>> = [];\n const groupedResults = new Map<string, Array<SelectableValue<string>>>();\n\n for (const value of values) {\n const groupLabel = value.group;\n if (groupLabel) {\n let group = groupedResults.get(groupLabel);\n\n if (!group) {\n group = [];\n groupedResults.set(groupLabel, group);\n result.push({ label: groupLabel, options: group });\n }\n\n group.push(value);\n } else {\n result.push(value);\n }\n }\n\n return result;\n}\n\nexport function getNonApplicablePillStyles(theme: GrafanaTheme2) {\n return {\n disabledPill: css({\n background: theme.colors.action.selected,\n color: theme.colors.text.disabled,\n border: 0,\n '&:hover': {\n background: theme.colors.action.selected,\n },\n }),\n strikethrough: css({\n textDecoration: 'line-through',\n }),\n };\n}\n\nexport function verifyDrilldownApplicability(\n sourceObject: SceneObject,\n queriesDataSource: DataSourceRef | undefined,\n drilldownDatasource: DataSourceRef | null,\n isApplicabilityEnabled?: boolean\n): boolean {\n const datasourceUid = sceneGraph.interpolate(sourceObject, queriesDataSource?.uid);\n\n return Boolean(\n isApplicabilityEnabled && datasourceUid === sceneGraph.interpolate(sourceObject, drilldownDatasource?.uid)\n );\n}\n\nexport async function getDrilldownApplicability(\n queryRunner: SceneQueryRunner,\n filtersVar?: AdHocFiltersVariable,\n groupByVar?: GroupByVariable\n): Promise<DrilldownsApplicability[] | undefined> {\n //if no drilldown vars return\n if (!filtersVar && !groupByVar) {\n return;\n }\n\n const datasource = queryRunner.state.datasource;\n const queries = queryRunner.state.data?.request?.targets;\n\n const ds = await getDataSource(datasource, {\n __sceneObject: wrapInSafeSerializableSceneObject(queryRunner),\n });\n\n // return if method not implemented\n // @ts-expect-error (temporary till we update grafana/data)\n if (!ds.getDrilldownsApplicability) {\n return;\n }\n\n const dsUid = sceneGraph.interpolate(queryRunner, datasource?.uid);\n const timeRange = sceneGraph.getTimeRange(queryRunner).state.value;\n const groupByKeys = [];\n const filters = [];\n\n const hasGroupByApplicability =\n groupByVar && dsUid === sceneGraph.interpolate(groupByVar, groupByVar?.state.datasource?.uid);\n const hasFiltersApplicability =\n filtersVar && dsUid === sceneGraph.interpolate(filtersVar, filtersVar.state?.datasource?.uid);\n\n // if neither vars use the ds from the queries, return\n if (!hasGroupByApplicability && !hasFiltersApplicability) {\n return;\n }\n\n if (hasGroupByApplicability) {\n groupByKeys.push(\n ...(Array.isArray(groupByVar.state.value)\n ? groupByVar.state.value.map((v) => String(v))\n : groupByVar.state.value\n ? [String(groupByVar.state.value)]\n : [])\n );\n }\n\n if (hasFiltersApplicability) {\n filters.push(...filtersVar.state.filters, ...(filtersVar.state.originFilters ?? []));\n }\n\n // @ts-expect-error (temporary till we update grafana/data)\n return await ds.getDrilldownsApplicability({\n groupByKeys,\n filters,\n queries,\n timeRange,\n scopes: sceneGraph.getScopes(queryRunner),\n });\n}\n"],"names":["value","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/variables/utils.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { VariableValue } from './types';\nimport {\n AdHocVariableFilter,\n DataQueryError,\n GetTagResponse,\n GrafanaTheme2,\n MetricFindValue,\n SelectableValue,\n} from '@grafana/data';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneDataQuery, SceneObject, SceneObjectState } from '../core/types';\nimport { SceneQueryRunner } from '../querying/SceneQueryRunner';\nimport { DataSourceRef } from '@grafana/schema';\nimport { css } from '@emotion/css';\n\nexport function isVariableValueEqual(a: VariableValue | null | undefined, b: VariableValue | null | undefined) {\n if (a === b) {\n return true;\n }\n\n return isEqual(a, b);\n}\n\nexport function safeStringifyValue(value: unknown) {\n // Avoid circular references ignoring those references\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_: string, value: object | null) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n try {\n return JSON.stringify(value, getCircularReplacer());\n } catch (error) {\n console.error(error);\n }\n\n return '';\n}\n\nexport function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]) {\n return filters.map((filter) => renderFilter(filter)).join(',');\n}\n\nfunction renderFilter(filter: AdHocVariableFilter) {\n let value = '';\n let operator = filter.operator;\n\n // map \"one of\" operator to regex\n if (operator === '=|') {\n operator = '=~';\n // TODO remove when we're on the latest version of @grafana/data\n // @ts-expect-error\n value = filter.values?.map(escapeLabelValueInRegexSelector).join('|');\n } else if (operator === '!=|') {\n operator = '!~';\n // TODO remove when we're on the latest version of @grafana/data\n // @ts-expect-error\n value = filter.values?.map(escapeLabelValueInRegexSelector).join('|');\n } else if (operator === '=~' || operator === '!~') {\n value = escapeLabelValueInRegexSelector(filter.value);\n } else {\n value = escapeLabelValueInExactSelector(filter.value);\n }\n\n return `${filter.key}${operator}\"${value}\"`;\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function escapeLabelValueInRegexSelector(labelValue: string): string {\n return escapeLabelValueInExactSelector(escapeLokiRegexp(labelValue));\n}\n\nexport function isRegexSelector(selector?: string) {\n if (selector && (selector.includes('=~') || selector.includes('!~'))) {\n return true;\n }\n return false;\n}\n\n// Loki regular-expressions use the RE2 syntax (https://github.com/google/re2/wiki/Syntax),\n// so every character that matches something in that list has to be escaped.\n// the list of meta characters is: *+?()|\\.[]{}^$\n// we make a javascript regular expression that matches those characters:\nconst RE2_METACHARACTERS = /[*+?()|\\\\.\\[\\]{}^$]/g;\nfunction escapeLokiRegexp(value: string): string {\n return value.replace(RE2_METACHARACTERS, '\\\\$&');\n}\n\n/**\n * Get all queries in the scene that have the same datasource as provided source object\n */\nexport function getQueriesForVariables(\n sourceObject: SceneObject<SceneObjectState & { datasource: DataSourceRef | null }>\n) {\n const runners = sceneGraph.findAllObjects(\n sourceObject.getRoot(),\n (o) => o instanceof SceneQueryRunner\n ) as SceneQueryRunner[];\n\n const interpolatedDsUuid = sceneGraph.interpolate(sourceObject, sourceObject.state.datasource?.uid);\n\n const applicableRunners = filterOutInactiveRunnerDuplicates(runners).filter((r) => {\n const interpolatedQueryDsUuid = sceneGraph.interpolate(sourceObject, r.state.datasource?.uid);\n\n return interpolatedQueryDsUuid === interpolatedDsUuid;\n });\n\n if (applicableRunners.length === 0) {\n return [];\n }\n\n const result: SceneDataQuery[] = [];\n applicableRunners.forEach((r) => {\n result.push(\n ...r.state.queries.filter((q) => {\n if (!q.datasource || !q.datasource.uid) {\n return true;\n }\n\n const interpolatedQueryDsUuid = sceneGraph.interpolate(sourceObject, q.datasource.uid);\n return interpolatedQueryDsUuid === interpolatedDsUuid;\n })\n );\n });\n\n return result;\n}\n\n// Filters out inactive runner duplicates, keeping only the ones that are currently active.\n// This is needed for scnearios whan a query runner is cloned and the original is not removed but de-activated.\n// Can happen i.e. when editing a panel in Grafana Core dashboards.\nfunction filterOutInactiveRunnerDuplicates(runners: SceneQueryRunner[]) {\n // Group items by key\n const groupedItems: { [key: string]: SceneQueryRunner[] } = {};\n\n for (const item of runners) {\n if (item.state.key) {\n if (!(item.state.key in groupedItems)) {\n groupedItems[item.state.key] = [];\n }\n groupedItems[item.state.key].push(item);\n }\n }\n\n // Filter out inactive items and concatenate active items\n return Object.values(groupedItems).flatMap((group) => {\n const activeItems = group.filter((item) => item.isActive);\n // Keep inactive items if there's only one item with the key\n if (activeItems.length === 0 && group.length === 1) {\n return group;\n }\n return activeItems;\n });\n}\n\nexport function escapeUrlPipeDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the pipe due to using it as a filter separator\n return (value = /\\|/g[Symbol.replace](value, '__gfp__'));\n}\n\nexport function escapeUrlCommaDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the comma due to using it as a value/label separator\n return /,/g[Symbol.replace](value, '__gfc__');\n}\n\nexport function escapeUrlHashDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the hash due to using it as a value/label separator\n return /#/g[Symbol.replace](value, '__gfh__');\n}\n\nexport function escapeOriginFilterUrlDelimiters(value: string | undefined): string {\n return escapeUrlHashDelimiters(escapeUrlPipeDelimiters(value));\n}\n\nexport function escapeURLDelimiters(value: string | undefined): string {\n return escapeUrlCommaDelimiters(escapeUrlPipeDelimiters(value));\n}\n\nexport function unescapeUrlDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n value = /__gfp__/g[Symbol.replace](value, '|');\n value = /__gfc__/g[Symbol.replace](value, ',');\n value = /__gfh__/g[Symbol.replace](value, '#');\n\n return value;\n}\n\nexport function toUrlCommaDelimitedString(key: string, label?: string): string {\n // Omit for identical key/label or when label is not set at all\n if (!label || key === label) {\n return escapeUrlCommaDelimiters(key);\n }\n\n return [key, label].map(escapeUrlCommaDelimiters).join(',');\n}\n\nexport function dataFromResponse(response: GetTagResponse | MetricFindValue[]) {\n return Array.isArray(response) ? response : response.data;\n}\n\nexport function responseHasError(\n response: GetTagResponse | MetricFindValue[]\n): response is GetTagResponse & { error: DataQueryError } {\n return !Array.isArray(response) && Boolean(response.error);\n}\n\n// Collect a flat list of SelectableValues with a `group` property into a hierarchical list with groups\nexport function handleOptionGroups(values: SelectableValue[]): Array<SelectableValue<string>> {\n const result: Array<SelectableValue<string>> = [];\n const groupedResults = new Map<string, Array<SelectableValue<string>>>();\n\n for (const value of values) {\n const groupLabel = value.group;\n if (groupLabel) {\n let group = groupedResults.get(groupLabel);\n\n if (!group) {\n group = [];\n groupedResults.set(groupLabel, group);\n result.push({ label: groupLabel, options: group });\n }\n\n group.push(value);\n } else {\n result.push(value);\n }\n }\n\n return result;\n}\n\nexport function getNonApplicablePillStyles(theme: GrafanaTheme2) {\n return {\n disabledPill: css({\n background: theme.colors.action.selected,\n color: theme.colors.text.disabled,\n border: 0,\n '&:hover': {\n background: theme.colors.action.selected,\n },\n }),\n strikethrough: css({\n textDecoration: 'line-through',\n }),\n };\n}\n"],"names":["value","_a"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -988,90 +988,11 @@ interface MacroVariableConstructor {
|
|
|
988
988
|
*/
|
|
989
989
|
declare function registerVariableMacro(name: string, macro: MacroVariableConstructor, replace?: boolean): () => void;
|
|
990
990
|
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
maxDataPoints?: number;
|
|
997
|
-
liveStreaming?: boolean;
|
|
998
|
-
maxDataPointsFromWidth?: boolean;
|
|
999
|
-
cacheTimeout?: DataQueryRequest['cacheTimeout'];
|
|
1000
|
-
queryCachingTTL?: DataQueryRequest['queryCachingTTL'];
|
|
1001
|
-
/**
|
|
1002
|
-
* When set to auto (the default) query runner will issue queries on activate (when variable dependencies are ready) or when time range change.
|
|
1003
|
-
* 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.
|
|
1004
|
-
*/
|
|
1005
|
-
runQueriesMode?: 'auto' | 'manual';
|
|
1006
|
-
dataLayerFilter?: DataLayerFilter;
|
|
1007
|
-
_hasFetchedData?: boolean;
|
|
1008
|
-
}
|
|
1009
|
-
declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {
|
|
1010
|
-
private _querySub?;
|
|
1011
|
-
private _dataLayersSub?;
|
|
1012
|
-
private _dataLayersMerger;
|
|
1013
|
-
private _timeSub?;
|
|
1014
|
-
private _timeSubRange?;
|
|
1015
|
-
private _containerWidth?;
|
|
1016
|
-
private _variableValueRecorder;
|
|
1017
|
-
private _results;
|
|
1018
|
-
private _scopedVars;
|
|
1019
|
-
private _layerAnnotations?;
|
|
1020
|
-
private _resultAnnotations?;
|
|
1021
|
-
private _isInView;
|
|
1022
|
-
private _bypassIsInView;
|
|
1023
|
-
private _queryNotExecutedWhenOutOfView;
|
|
1024
|
-
getResultsStream(): ReplaySubject<SceneDataProviderResult>;
|
|
1025
|
-
protected _variableDependency: VariableDependencyConfig<QueryRunnerState>;
|
|
1026
|
-
private _drilldownDependenciesManager;
|
|
1027
|
-
constructor(initialState: QueryRunnerState);
|
|
1028
|
-
private _onActivate;
|
|
1029
|
-
private _handleDataLayers;
|
|
1030
|
-
private _onLayersReceived;
|
|
1031
|
-
/**
|
|
1032
|
-
* This tries to start a new query whenever a variable completes or is changed.
|
|
1033
|
-
*
|
|
1034
|
-
* We care about variable update completions even when the variable has not changed and even when it is not a direct dependency.
|
|
1035
|
-
* Example: Variables A and B (B depends on A). A update depends on time range. So when time change query runner will
|
|
1036
|
-
* find that variable A is loading which is a dependency on of variable B so will set _isWaitingForVariables to true and
|
|
1037
|
-
* not issue any query.
|
|
1038
|
-
*
|
|
1039
|
-
* When A completes it's loading (with no value change, so B never updates) it will cause a call of this function letting
|
|
1040
|
-
* the query runner know that A has completed, and in case _isWaitingForVariables we try to run the query. The query will
|
|
1041
|
-
* only run if all variables are in a non loading state so in other scenarios where a query depends on many variables this will
|
|
1042
|
-
* be called many times until all dependencies are in a non loading state. *
|
|
1043
|
-
*/
|
|
1044
|
-
private onVariableUpdatesCompleted;
|
|
1045
|
-
/**
|
|
1046
|
-
* Check if value changed is a adhoc filter o group by variable that did not exist when we issued the last query
|
|
1047
|
-
*/
|
|
1048
|
-
private onAnyVariableChanged;
|
|
1049
|
-
private _isRelevantAutoVariable;
|
|
1050
|
-
private shouldRunQueriesOnActivate;
|
|
1051
|
-
private _isDataTimeRangeStale;
|
|
1052
|
-
private _onDeactivate;
|
|
1053
|
-
setContainerWidth(width: number): void;
|
|
1054
|
-
isDataReadyToDisplay(): boolean;
|
|
1055
|
-
private subscribeToTimeRangeChanges;
|
|
1056
|
-
runQueries(): void;
|
|
1057
|
-
private getMaxDataPoints;
|
|
1058
|
-
cancelQuery(): void;
|
|
1059
|
-
private runWithTimeRange;
|
|
1060
|
-
clone(withState?: Partial<QueryRunnerState>): this;
|
|
1061
|
-
private prepareRequests;
|
|
1062
|
-
private onDataReceived;
|
|
1063
|
-
private _combineDataLayers;
|
|
1064
|
-
private _setNoDataState;
|
|
1065
|
-
/**
|
|
1066
|
-
* Walk up the scene graph and find any ExtraQueryProviders.
|
|
1067
|
-
*
|
|
1068
|
-
* This will return an array of the closest provider of each type.
|
|
1069
|
-
*/
|
|
1070
|
-
private getClosestExtraQueryProviders;
|
|
1071
|
-
private isQueryModeAuto;
|
|
1072
|
-
isInViewChanged(isInView: boolean): void;
|
|
1073
|
-
bypassIsInViewChanged(bypassIsInView: boolean): void;
|
|
1074
|
-
}
|
|
991
|
+
declare function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]): string;
|
|
992
|
+
declare function escapeLabelValueInExactSelector(labelValue: string): string;
|
|
993
|
+
declare function escapeLabelValueInRegexSelector(labelValue: string): string;
|
|
994
|
+
declare function escapeUrlPipeDelimiters(value: string | undefined): string;
|
|
995
|
+
declare function escapeURLDelimiters(value: string | undefined): string;
|
|
1075
996
|
|
|
1076
997
|
declare class AdHocFiltersVariableUrlSyncHandler implements SceneObjectUrlSyncHandler {
|
|
1077
998
|
private _variable;
|
|
@@ -1244,6 +1165,20 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
|
|
|
1244
1165
|
}
|
|
1245
1166
|
declare function AdHocFiltersVariableRenderer({ model }: SceneComponentProps<AdHocFiltersVariable>): React__default.JSX.Element;
|
|
1246
1167
|
|
|
1168
|
+
interface ConstantVariableState extends SceneVariableState {
|
|
1169
|
+
value: VariableValue;
|
|
1170
|
+
}
|
|
1171
|
+
declare class ConstantVariable extends SceneObjectBase<ConstantVariableState> implements SceneVariable<ConstantVariableState> {
|
|
1172
|
+
protected _variableDependency: VariableDependencyConfig<ConstantVariableState>;
|
|
1173
|
+
private _prevValue;
|
|
1174
|
+
constructor(initialState: Partial<ConstantVariableState>);
|
|
1175
|
+
/**
|
|
1176
|
+
* This function is called on when SceneVariableSet is activated or when a dependency changes.
|
|
1177
|
+
*/
|
|
1178
|
+
validateAndUpdate(): Observable<ValidateAndUpdateResult>;
|
|
1179
|
+
getValue(): VariableValue;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1247
1182
|
interface MultiValueVariableState extends SceneVariableState {
|
|
1248
1183
|
value: VariableValue;
|
|
1249
1184
|
text: VariableValue;
|
|
@@ -1318,108 +1253,6 @@ declare abstract class MultiValueVariable<TState extends MultiValueVariableState
|
|
|
1318
1253
|
onSearchChange?(searchFilter: string): void;
|
|
1319
1254
|
}
|
|
1320
1255
|
|
|
1321
|
-
interface GroupByVariableState extends MultiValueVariableState {
|
|
1322
|
-
/** Defaults to "Group" */
|
|
1323
|
-
name: string;
|
|
1324
|
-
/** The visible keys to group on */
|
|
1325
|
-
defaultOptions?: MetricFindValue[];
|
|
1326
|
-
/** Base filters to always apply when looking up keys */
|
|
1327
|
-
baseFilters?: AdHocVariableFilter[];
|
|
1328
|
-
/** Datasource to use for getTagKeys and also controls which scene queries the group by should apply to */
|
|
1329
|
-
datasource: DataSourceRef | null;
|
|
1330
|
-
/** Default value set for this groupBy. When this field is set, changing value will allow the user to restore back to this default value */
|
|
1331
|
-
defaultValue?: {
|
|
1332
|
-
text: VariableValue;
|
|
1333
|
-
value: VariableValue;
|
|
1334
|
-
};
|
|
1335
|
-
/** Needed for url sync when passing flag to another dashboard */
|
|
1336
|
-
restorable?: boolean;
|
|
1337
|
-
/** Controls if the group by can be changed */
|
|
1338
|
-
readOnly?: boolean;
|
|
1339
|
-
/**
|
|
1340
|
-
* @experimental
|
|
1341
|
-
* Controls the layout and design of the label.
|
|
1342
|
-
* Vertical layout does not yet support operator selector.
|
|
1343
|
-
*/
|
|
1344
|
-
layout?: ControlsLayout;
|
|
1345
|
-
/**
|
|
1346
|
-
* Defaults to same-datasource which means group by will automatically be applied to all queries with the same data source as this GroupBySet.
|
|
1347
|
-
* In manual mode no queries are re-run on changes, and you have to manually apply the filter to whatever queries you want.
|
|
1348
|
-
*/
|
|
1349
|
-
applyMode?: 'auto' | 'manual';
|
|
1350
|
-
/**
|
|
1351
|
-
* Filter out the keys that do not match the regex.
|
|
1352
|
-
*/
|
|
1353
|
-
tagKeyRegexFilter?: RegExp;
|
|
1354
|
-
/**
|
|
1355
|
-
* Extension hook for customizing the key lookup.
|
|
1356
|
-
* Return replace: true if you want to override the default lookup
|
|
1357
|
-
* Return replace: false if you want to combine the results with the default lookup
|
|
1358
|
-
*/
|
|
1359
|
-
getTagKeysProvider?: getTagKeysProvider;
|
|
1360
|
-
/**
|
|
1361
|
-
* Holds the applicability for each of the selected keys
|
|
1362
|
-
*/
|
|
1363
|
-
keysApplicability?: DrilldownsApplicability[];
|
|
1364
|
-
/**
|
|
1365
|
-
* state for checking whether drilldown applicability is enabled
|
|
1366
|
-
*/
|
|
1367
|
-
applicabilityEnabled?: boolean;
|
|
1368
|
-
}
|
|
1369
|
-
type getTagKeysProvider = (set: GroupByVariable, currentKey: string | null) => Promise<{
|
|
1370
|
-
replace?: boolean;
|
|
1371
|
-
values: MetricFindValue[] | GetTagResponse;
|
|
1372
|
-
}>;
|
|
1373
|
-
declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
|
|
1374
|
-
static Component: typeof GroupByVariableRenderer;
|
|
1375
|
-
isLazy: boolean;
|
|
1376
|
-
protected _urlSync: SceneObjectUrlSyncHandler;
|
|
1377
|
-
validateAndUpdate(): Observable<ValidateAndUpdateResult>;
|
|
1378
|
-
private _updateValueGivenNewOptions;
|
|
1379
|
-
getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
|
|
1380
|
-
constructor(initialState: Partial<GroupByVariableState>);
|
|
1381
|
-
private _activationHandler;
|
|
1382
|
-
getApplicableKeys(): VariableValue;
|
|
1383
|
-
getGroupByApplicabilityForQueries(value: VariableValue, queries: SceneDataQuery[]): Promise<DrilldownsApplicability[] | undefined>;
|
|
1384
|
-
_verifyApplicability(): Promise<void>;
|
|
1385
|
-
checkIfRestorable(values: VariableValue): boolean;
|
|
1386
|
-
restoreDefaultValues(): void;
|
|
1387
|
-
/**
|
|
1388
|
-
* Get possible keys given current filters. Do not call from plugins directly
|
|
1389
|
-
*/
|
|
1390
|
-
_getKeys: (ds: DataSourceApi) => Promise<GetTagResponse | MetricFindValue[]>;
|
|
1391
|
-
/**
|
|
1392
|
-
* Allows clearing the value of the variable to an empty value. Overrides default behavior of a MultiValueVariable
|
|
1393
|
-
*/
|
|
1394
|
-
getDefaultMultiState(options: VariableValueOption[]): {
|
|
1395
|
-
value: VariableValueSingle[];
|
|
1396
|
-
text: string[];
|
|
1397
|
-
};
|
|
1398
|
-
}
|
|
1399
|
-
declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
|
|
1400
|
-
|
|
1401
|
-
declare function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]): string;
|
|
1402
|
-
declare function escapeLabelValueInExactSelector(labelValue: string): string;
|
|
1403
|
-
declare function escapeLabelValueInRegexSelector(labelValue: string): string;
|
|
1404
|
-
declare function escapeUrlPipeDelimiters(value: string | undefined): string;
|
|
1405
|
-
declare function escapeURLDelimiters(value: string | undefined): string;
|
|
1406
|
-
declare function verifyDrilldownApplicability(sourceObject: SceneObject, queriesDataSource: DataSourceRef | undefined, drilldownDatasource: DataSourceRef | null, isApplicabilityEnabled?: boolean): boolean;
|
|
1407
|
-
declare function getDrilldownApplicability(queryRunner: SceneQueryRunner, filtersVar?: AdHocFiltersVariable, groupByVar?: GroupByVariable): Promise<DrilldownsApplicability[] | undefined>;
|
|
1408
|
-
|
|
1409
|
-
interface ConstantVariableState extends SceneVariableState {
|
|
1410
|
-
value: VariableValue;
|
|
1411
|
-
}
|
|
1412
|
-
declare class ConstantVariable extends SceneObjectBase<ConstantVariableState> implements SceneVariable<ConstantVariableState> {
|
|
1413
|
-
protected _variableDependency: VariableDependencyConfig<ConstantVariableState>;
|
|
1414
|
-
private _prevValue;
|
|
1415
|
-
constructor(initialState: Partial<ConstantVariableState>);
|
|
1416
|
-
/**
|
|
1417
|
-
* This function is called on when SceneVariableSet is activated or when a dependency changes.
|
|
1418
|
-
*/
|
|
1419
|
-
validateAndUpdate(): Observable<ValidateAndUpdateResult>;
|
|
1420
|
-
getValue(): VariableValue;
|
|
1421
|
-
}
|
|
1422
|
-
|
|
1423
1256
|
interface CustomVariableState extends MultiValueVariableState {
|
|
1424
1257
|
query: string;
|
|
1425
1258
|
}
|
|
@@ -1513,6 +1346,86 @@ declare class QueryVariable extends MultiValueVariable<QueryVariableState> {
|
|
|
1513
1346
|
static Component: ({ model }: SceneComponentProps<MultiValueVariable>) => React__default.JSX.Element;
|
|
1514
1347
|
}
|
|
1515
1348
|
|
|
1349
|
+
interface GroupByVariableState extends MultiValueVariableState {
|
|
1350
|
+
/** Defaults to "Group" */
|
|
1351
|
+
name: string;
|
|
1352
|
+
/** The visible keys to group on */
|
|
1353
|
+
defaultOptions?: MetricFindValue[];
|
|
1354
|
+
/** Base filters to always apply when looking up keys */
|
|
1355
|
+
baseFilters?: AdHocVariableFilter[];
|
|
1356
|
+
/** Datasource to use for getTagKeys and also controls which scene queries the group by should apply to */
|
|
1357
|
+
datasource: DataSourceRef | null;
|
|
1358
|
+
/** Default value set for this groupBy. When this field is set, changing value will allow the user to restore back to this default value */
|
|
1359
|
+
defaultValue?: {
|
|
1360
|
+
text: VariableValue;
|
|
1361
|
+
value: VariableValue;
|
|
1362
|
+
};
|
|
1363
|
+
/** Needed for url sync when passing flag to another dashboard */
|
|
1364
|
+
restorable?: boolean;
|
|
1365
|
+
/** Controls if the group by can be changed */
|
|
1366
|
+
readOnly?: boolean;
|
|
1367
|
+
/**
|
|
1368
|
+
* @experimental
|
|
1369
|
+
* Controls the layout and design of the label.
|
|
1370
|
+
* Vertical layout does not yet support operator selector.
|
|
1371
|
+
*/
|
|
1372
|
+
layout?: ControlsLayout;
|
|
1373
|
+
/**
|
|
1374
|
+
* Defaults to same-datasource which means group by will automatically be applied to all queries with the same data source as this GroupBySet.
|
|
1375
|
+
* In manual mode no queries are re-run on changes, and you have to manually apply the filter to whatever queries you want.
|
|
1376
|
+
*/
|
|
1377
|
+
applyMode?: 'auto' | 'manual';
|
|
1378
|
+
/**
|
|
1379
|
+
* Filter out the keys that do not match the regex.
|
|
1380
|
+
*/
|
|
1381
|
+
tagKeyRegexFilter?: RegExp;
|
|
1382
|
+
/**
|
|
1383
|
+
* Extension hook for customizing the key lookup.
|
|
1384
|
+
* Return replace: true if you want to override the default lookup
|
|
1385
|
+
* Return replace: false if you want to combine the results with the default lookup
|
|
1386
|
+
*/
|
|
1387
|
+
getTagKeysProvider?: getTagKeysProvider;
|
|
1388
|
+
/**
|
|
1389
|
+
* Holds the applicability for each of the selected keys
|
|
1390
|
+
*/
|
|
1391
|
+
keysApplicability?: DrilldownsApplicability[];
|
|
1392
|
+
/**
|
|
1393
|
+
* state for checking whether drilldown applicability is enabled
|
|
1394
|
+
*/
|
|
1395
|
+
applicabilityEnabled?: boolean;
|
|
1396
|
+
}
|
|
1397
|
+
type getTagKeysProvider = (set: GroupByVariable, currentKey: string | null) => Promise<{
|
|
1398
|
+
replace?: boolean;
|
|
1399
|
+
values: MetricFindValue[] | GetTagResponse;
|
|
1400
|
+
}>;
|
|
1401
|
+
declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
|
|
1402
|
+
static Component: typeof GroupByVariableRenderer;
|
|
1403
|
+
isLazy: boolean;
|
|
1404
|
+
protected _urlSync: SceneObjectUrlSyncHandler;
|
|
1405
|
+
validateAndUpdate(): Observable<ValidateAndUpdateResult>;
|
|
1406
|
+
private _updateValueGivenNewOptions;
|
|
1407
|
+
getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
|
|
1408
|
+
constructor(initialState: Partial<GroupByVariableState>);
|
|
1409
|
+
private _activationHandler;
|
|
1410
|
+
getApplicableKeys(): VariableValue;
|
|
1411
|
+
getGroupByApplicabilityForQueries(value: VariableValue, queries: SceneDataQuery[]): Promise<DrilldownsApplicability[] | undefined>;
|
|
1412
|
+
_verifyApplicability(): Promise<void>;
|
|
1413
|
+
checkIfRestorable(values: VariableValue): boolean;
|
|
1414
|
+
restoreDefaultValues(): void;
|
|
1415
|
+
/**
|
|
1416
|
+
* Get possible keys given current filters. Do not call from plugins directly
|
|
1417
|
+
*/
|
|
1418
|
+
_getKeys: (ds: DataSourceApi) => Promise<GetTagResponse | MetricFindValue[]>;
|
|
1419
|
+
/**
|
|
1420
|
+
* Allows clearing the value of the variable to an empty value. Overrides default behavior of a MultiValueVariable
|
|
1421
|
+
*/
|
|
1422
|
+
getDefaultMultiState(options: VariableValueOption[]): {
|
|
1423
|
+
value: VariableValueSingle[];
|
|
1424
|
+
text: string[];
|
|
1425
|
+
};
|
|
1426
|
+
}
|
|
1427
|
+
declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
|
|
1428
|
+
|
|
1516
1429
|
interface SwitchVariableState extends SceneVariableState {
|
|
1517
1430
|
value: string;
|
|
1518
1431
|
enabledValue: string;
|
|
@@ -2175,6 +2088,91 @@ declare class SceneTimeZoneOverride extends SceneTimeRangeTransformerBase<SceneT
|
|
|
2175
2088
|
onTimeZoneChange(timeZone: string): void;
|
|
2176
2089
|
}
|
|
2177
2090
|
|
|
2091
|
+
interface QueryRunnerState extends SceneObjectState {
|
|
2092
|
+
data?: PanelData;
|
|
2093
|
+
queries: SceneDataQuery[];
|
|
2094
|
+
datasource?: DataSourceRef;
|
|
2095
|
+
minInterval?: string;
|
|
2096
|
+
maxDataPoints?: number;
|
|
2097
|
+
liveStreaming?: boolean;
|
|
2098
|
+
maxDataPointsFromWidth?: boolean;
|
|
2099
|
+
cacheTimeout?: DataQueryRequest['cacheTimeout'];
|
|
2100
|
+
queryCachingTTL?: DataQueryRequest['queryCachingTTL'];
|
|
2101
|
+
/**
|
|
2102
|
+
* When set to auto (the default) query runner will issue queries on activate (when variable dependencies are ready) or when time range change.
|
|
2103
|
+
* 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.
|
|
2104
|
+
*/
|
|
2105
|
+
runQueriesMode?: 'auto' | 'manual';
|
|
2106
|
+
dataLayerFilter?: DataLayerFilter;
|
|
2107
|
+
_hasFetchedData?: boolean;
|
|
2108
|
+
}
|
|
2109
|
+
declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {
|
|
2110
|
+
private _querySub?;
|
|
2111
|
+
private _dataLayersSub?;
|
|
2112
|
+
private _dataLayersMerger;
|
|
2113
|
+
private _timeSub?;
|
|
2114
|
+
private _timeSubRange?;
|
|
2115
|
+
private _containerWidth?;
|
|
2116
|
+
private _variableValueRecorder;
|
|
2117
|
+
private _results;
|
|
2118
|
+
private _scopedVars;
|
|
2119
|
+
private _layerAnnotations?;
|
|
2120
|
+
private _resultAnnotations?;
|
|
2121
|
+
private _isInView;
|
|
2122
|
+
private _bypassIsInView;
|
|
2123
|
+
private _queryNotExecutedWhenOutOfView;
|
|
2124
|
+
getResultsStream(): ReplaySubject<SceneDataProviderResult>;
|
|
2125
|
+
protected _variableDependency: VariableDependencyConfig<QueryRunnerState>;
|
|
2126
|
+
private _drilldownDependenciesManager;
|
|
2127
|
+
constructor(initialState: QueryRunnerState);
|
|
2128
|
+
private _onActivate;
|
|
2129
|
+
private _handleDataLayers;
|
|
2130
|
+
private _onLayersReceived;
|
|
2131
|
+
/**
|
|
2132
|
+
* This tries to start a new query whenever a variable completes or is changed.
|
|
2133
|
+
*
|
|
2134
|
+
* We care about variable update completions even when the variable has not changed and even when it is not a direct dependency.
|
|
2135
|
+
* Example: Variables A and B (B depends on A). A update depends on time range. So when time change query runner will
|
|
2136
|
+
* find that variable A is loading which is a dependency on of variable B so will set _isWaitingForVariables to true and
|
|
2137
|
+
* not issue any query.
|
|
2138
|
+
*
|
|
2139
|
+
* When A completes it's loading (with no value change, so B never updates) it will cause a call of this function letting
|
|
2140
|
+
* the query runner know that A has completed, and in case _isWaitingForVariables we try to run the query. The query will
|
|
2141
|
+
* only run if all variables are in a non loading state so in other scenarios where a query depends on many variables this will
|
|
2142
|
+
* be called many times until all dependencies are in a non loading state. *
|
|
2143
|
+
*/
|
|
2144
|
+
private onVariableUpdatesCompleted;
|
|
2145
|
+
/**
|
|
2146
|
+
* Check if value changed is a adhoc filter o group by variable that did not exist when we issued the last query
|
|
2147
|
+
*/
|
|
2148
|
+
private onAnyVariableChanged;
|
|
2149
|
+
private _isRelevantAutoVariable;
|
|
2150
|
+
private shouldRunQueriesOnActivate;
|
|
2151
|
+
private _isDataTimeRangeStale;
|
|
2152
|
+
private _onDeactivate;
|
|
2153
|
+
setContainerWidth(width: number): void;
|
|
2154
|
+
isDataReadyToDisplay(): boolean;
|
|
2155
|
+
private subscribeToTimeRangeChanges;
|
|
2156
|
+
runQueries(): void;
|
|
2157
|
+
private getMaxDataPoints;
|
|
2158
|
+
cancelQuery(): void;
|
|
2159
|
+
private runWithTimeRange;
|
|
2160
|
+
clone(withState?: Partial<QueryRunnerState>): this;
|
|
2161
|
+
private prepareRequests;
|
|
2162
|
+
private onDataReceived;
|
|
2163
|
+
private _combineDataLayers;
|
|
2164
|
+
private _setNoDataState;
|
|
2165
|
+
/**
|
|
2166
|
+
* Walk up the scene graph and find any ExtraQueryProviders.
|
|
2167
|
+
*
|
|
2168
|
+
* This will return an array of the closest provider of each type.
|
|
2169
|
+
*/
|
|
2170
|
+
private getClosestExtraQueryProviders;
|
|
2171
|
+
private isQueryModeAuto;
|
|
2172
|
+
isInViewChanged(isInView: boolean): void;
|
|
2173
|
+
bypassIsInViewChanged(bypassIsInView: boolean): void;
|
|
2174
|
+
}
|
|
2175
|
+
|
|
2178
2176
|
interface DataProviderSharerState extends SceneDataState {
|
|
2179
2177
|
source: SceneObjectRef<SceneDataProvider>;
|
|
2180
2178
|
}
|
|
@@ -3596,8 +3594,6 @@ declare const sceneUtils: {
|
|
|
3596
3594
|
isSwitchVariable: typeof isSwitchVariable;
|
|
3597
3595
|
isRepeatCloneOrChildOf: typeof isRepeatCloneOrChildOf;
|
|
3598
3596
|
buildPathIdFor: typeof buildPathIdFor;
|
|
3599
|
-
verifyDrilldownApplicability: typeof verifyDrilldownApplicability;
|
|
3600
|
-
getDrilldownApplicability: typeof getDrilldownApplicability;
|
|
3601
3597
|
};
|
|
3602
3598
|
|
|
3603
3599
|
export { AdHocFiltersComboboxRenderer, AdHocFiltersVariable, AdHocFiltersVariableController, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, SwitchVariable, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$2 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, loadResources, index$1 as performanceUtils, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync, writePerformanceLog };
|