@grafana/scenes 8.12.1 → 8.13.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/querying/SceneQueryRunner.js +1 -28
- package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
- package/dist/esm/variables/datasourceVariableRef.js +51 -0
- package/dist/esm/variables/datasourceVariableRef.js.map +1 -0
- package/dist/esm/variables/variants/query/QueryVariable.js +72 -58
- package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +107 -75
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryVariable.js","sources":["../../../../../src/variables/variants/query/QueryVariable.tsx"],"sourcesContent":["import { Observable, of, filter, take, mergeMap, catchError, throwError, from, lastValueFrom } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n CoreApp,\n DataQueryRequest,\n LoadingState,\n PanelData,\n ScopedVars,\n VariableRefresh,\n VariableSort,\n // @ts-expect-error TODO: remove suppression after updating grafana/data\n VariableRegexApplyTo,\n} from '@grafana/data';\n\nimport { sceneGraph } from '../../../core/sceneGraph';\nimport { SceneComponentProps, SceneDataQuery } from '../../../core/types';\nimport { VariableDependencyConfig } from '../../VariableDependencyConfig';\nimport { MultiOrSingleValueSelect } from '../../components/VariableValueSelect';\nimport { VariableValueOption } from '../../types';\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from '../MultiValueVariable';\n\nimport { createQueryVariableRunner } from './createQueryVariableRunner';\nimport { metricNamesToVariableValues, sortVariableValues } from './utils';\nimport { toMetricFindValues } from './toMetricFindValues';\nimport { getDataSource } from '../../../utils/getDataSource';\nimport { safeStringifyValue } from '../../utils';\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\nimport { SEARCH_FILTER_VARIABLE } from '../../constants';\nimport { debounce } from 'lodash';\nimport { registerQueryWithController } from '../../../querying/registerQueryWithController';\nimport { wrapInSafeSerializableSceneObject } from '../../../utils/wrapInSafeSerializableSceneObject';\nimport React from 'react';\n\nexport interface QueryVariableState extends MultiValueVariableState {\n type: 'query';\n datasource: DataSourceRef | null;\n query: string | SceneDataQuery;\n regex: string;\n regexApplyTo: VariableRegexApplyTo;\n refresh: VariableRefresh;\n sort: VariableSort;\n\n // works the same as query for custom variable, adding additional static options to ones returned by data source query\n staticOptions?: VariableValueOption[];\n\n // how to order static options in relation to options returned by query\n staticOptionsOrder?: 'before' | 'after' | 'sorted';\n /** @internal Only for use inside core dashboards */\n definition?: string;\n}\n\nexport class QueryVariable extends MultiValueVariable<QueryVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['regex', 'regexApplyTo', 'query', 'datasource'],\n });\n\n public constructor(initialState: Partial<QueryVariableState>) {\n super({\n type: 'query',\n name: '',\n value: '',\n text: '',\n options: [],\n datasource: null,\n regex: '',\n query: '',\n regexApplyTo: 'value',\n refresh: VariableRefresh.onDashboardLoad,\n sort: VariableSort.disabled,\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n if (!this.state.query) {\n return of([]);\n }\n\n this.setState({ loading: true, error: null });\n\n return from(\n getDataSource(this.state.datasource, {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n })\n ).pipe(\n mergeMap((ds) => {\n const runner = createQueryVariableRunner(ds);\n const target = runner.getTarget(this);\n const request = this.getRequest(target, args.searchFilter);\n\n return runner.runRequest({ variable: this, searchFilter: args.searchFilter }, request).pipe(\n registerQueryWithController({\n type: 'QueryVariable/getValueOptions',\n request: request,\n origin: this,\n }),\n filter((data) => data.state === LoadingState.Done || data.state === LoadingState.Error), // we only care about done or error for now\n take(1), // take the first result, using first caused a bug where it in some situations throw an uncaught error because of no results had been received yet\n mergeMap((data: PanelData) => {\n if (data.state === LoadingState.Error) {\n return throwError(() => data.error);\n }\n return of(data);\n }),\n toMetricFindValues(),\n mergeMap((values) => {\n let regex = '';\n if (this.state.regex) {\n regex = sceneGraph.interpolate(this, this.state.regex, undefined, 'regex');\n }\n let options = metricNamesToVariableValues({\n variableRegEx: regex,\n variableRegexApplyTo: this.state.regexApplyTo,\n sort: this.state.sort,\n metricNames: values,\n });\n if (this.state.staticOptions) {\n const customOptions = this.state.staticOptions;\n options = options.filter((option) => !customOptions.find((custom) => custom.value === option.value));\n if (this.state.staticOptionsOrder === 'after') {\n options.push(...customOptions);\n } else if (this.state.staticOptionsOrder === 'sorted') {\n options = sortVariableValues(options.concat(customOptions), this.state.sort);\n } else {\n options.unshift(...customOptions);\n }\n }\n return of(options);\n }),\n catchError((error) => {\n if (error.cancelled) {\n return of([]);\n }\n return throwError(() => error);\n })\n );\n })\n );\n }\n\n private getRequest(target: DataQuery | string, searchFilter?: string) {\n const scopedVars: ScopedVars = {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n };\n\n if (searchFilter) {\n scopedVars.__searchFilter = { value: searchFilter, text: searchFilter };\n }\n\n const range = sceneGraph.getTimeRange(this).state.value;\n\n const request: DataQueryRequest = {\n app: CoreApp.Dashboard,\n requestId: uuidv4(),\n timezone: '',\n range,\n interval: '',\n intervalMs: 0,\n // @ts-ignore\n targets: [target],\n scopedVars,\n startTime: Date.now(),\n };\n\n return request;\n }\n\n onSearchChange = (searchFilter: string) => {\n if (!containsSearchFilter(this.state.query)) {\n return;\n }\n\n this._updateOptionsBasedOnSearchFilter(searchFilter);\n };\n\n private _updateOptionsBasedOnSearchFilter = debounce(async (searchFilter: string) => {\n const result = await lastValueFrom(this.getValueOptions({ searchFilter }));\n this.setState({ options: result, loading: false });\n }, 400);\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return <MultiOrSingleValueSelect model={model} />;\n };\n}\n\nfunction containsSearchFilter(query: string | DataQuery) {\n const str = safeStringifyValue(query);\n return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;\n}\n"],"names":["uuidv4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryVariable.js","sources":["../../../../../src/variables/variants/query/QueryVariable.tsx"],"sourcesContent":["import { Observable, of, filter, take, mergeMap, catchError, throwError, from, lastValueFrom, forkJoin } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n CoreApp,\n DataQueryRequest,\n LoadingState,\n MetricFindValue,\n PanelData,\n ScopedVars,\n VariableRefresh,\n VariableSort,\n // @ts-expect-error TODO: remove suppression after updating grafana/data\n VariableRegexApplyTo,\n} from '@grafana/data';\n\nimport { sceneGraph } from '../../../core/sceneGraph';\nimport { SceneComponentProps, SceneDataQuery } from '../../../core/types';\nimport { VariableDependencyConfig } from '../../VariableDependencyConfig';\nimport { MultiOrSingleValueSelect } from '../../components/VariableValueSelect';\nimport { VariableValueOption } from '../../types';\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from '../MultiValueVariable';\n\nimport { createQueryVariableRunner } from './createQueryVariableRunner';\nimport { metricNamesToVariableValues, sortVariableValues } from './utils';\nimport { toMetricFindValues } from './toMetricFindValues';\nimport { getDataSource } from '../../../utils/getDataSource';\nimport { safeStringifyValue } from '../../utils';\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\nimport { SEARCH_FILTER_VARIABLE } from '../../constants';\nimport { debounce } from 'lodash';\nimport { registerQueryWithController } from '../../../querying/registerQueryWithController';\nimport { wrapInSafeSerializableSceneObject } from '../../../utils/wrapInSafeSerializableSceneObject';\nimport { expandMultiValueDatasourceUids } from '../../datasourceVariableRef';\nimport React from 'react';\n\nexport interface QueryVariableState extends MultiValueVariableState {\n type: 'query';\n datasource: DataSourceRef | null;\n query: string | SceneDataQuery;\n regex: string;\n regexApplyTo: VariableRegexApplyTo;\n refresh: VariableRefresh;\n sort: VariableSort;\n\n // works the same as query for custom variable, adding additional static options to ones returned by data source query\n staticOptions?: VariableValueOption[];\n\n // how to order static options in relation to options returned by query\n staticOptionsOrder?: 'before' | 'after' | 'sorted';\n /** @internal Only for use inside core dashboards */\n definition?: string;\n}\n\nexport class QueryVariable extends MultiValueVariable<QueryVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['regex', 'regexApplyTo', 'query', 'datasource'],\n });\n\n public constructor(initialState: Partial<QueryVariableState>) {\n super({\n type: 'query',\n name: '',\n value: '',\n text: '',\n options: [],\n datasource: null,\n regex: '',\n query: '',\n regexApplyTo: 'value',\n refresh: VariableRefresh.onDashboardLoad,\n sort: VariableSort.disabled,\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n if (!this.state.query) {\n return of([]);\n }\n\n this.setState({ loading: true, error: null });\n\n const fanOutUids = expandMultiValueDatasourceUids(this, this.state.datasource);\n const datasourceRefs: Array<DataSourceRef | null> = fanOutUids\n ? fanOutUids.map((uid) => ({ ...this.state.datasource, uid }))\n : [this.state.datasource];\n\n const scopedSceneObject = {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n };\n\n const perDatasource = datasourceRefs.map((datasource) =>\n from(getDataSource(datasource, scopedSceneObject)).pipe(\n mergeMap((ds) => this.runMetricFindForDatasource(ds, args)),\n catchError((error) => {\n if (error?.cancelled) {\n return of({ values: [] as MetricFindValue[], error: undefined });\n }\n return of({ values: [] as MetricFindValue[], error });\n })\n )\n );\n\n return forkJoin(perDatasource).pipe(\n mergeMap((results) => {\n const values = results.flatMap((result) => result.values);\n const errors = results.map((result) => result.error).filter(Boolean);\n\n if (values.length === 0 && errors.length > 0) {\n return throwError(() => errors[0]);\n }\n\n return of(this.metricFindValuesToOptions(values));\n })\n );\n }\n\n private runMetricFindForDatasource(\n ds: Awaited<ReturnType<typeof getDataSource>>,\n args: VariableGetOptionsArgs\n ): Observable<{ values: MetricFindValue[]; error?: unknown }> {\n const runner = createQueryVariableRunner(ds);\n const target = runner.getTarget(this);\n const request = this.getRequest(target, args.searchFilter);\n\n return runner.runRequest({ variable: this, searchFilter: args.searchFilter }, request).pipe(\n registerQueryWithController({\n type: 'QueryVariable/getValueOptions',\n request: request,\n origin: this,\n }),\n filter((data) => data.state === LoadingState.Done || data.state === LoadingState.Error),\n take(1),\n mergeMap((data: PanelData) => {\n if (data.state === LoadingState.Error) {\n return throwError(() => data.error);\n }\n return of(data);\n }),\n toMetricFindValues(),\n mergeMap((values) => of({ values, error: undefined as unknown }))\n );\n }\n\n private metricFindValuesToOptions(values: MetricFindValue[]): VariableValueOption[] {\n let regex = '';\n if (this.state.regex) {\n regex = sceneGraph.interpolate(this, this.state.regex, undefined, 'regex');\n }\n let options = metricNamesToVariableValues({\n variableRegEx: regex,\n variableRegexApplyTo: this.state.regexApplyTo,\n sort: this.state.sort,\n metricNames: values,\n });\n if (this.state.staticOptions) {\n const customOptions = this.state.staticOptions;\n options = options.filter((option) => !customOptions.find((custom) => custom.value === option.value));\n if (this.state.staticOptionsOrder === 'after') {\n options.push(...customOptions);\n } else if (this.state.staticOptionsOrder === 'sorted') {\n options = sortVariableValues(options.concat(customOptions), this.state.sort);\n } else {\n options.unshift(...customOptions);\n }\n }\n return options;\n }\n\n private getRequest(target: DataQuery | string, searchFilter?: string) {\n const scopedVars: ScopedVars = {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n };\n\n if (searchFilter) {\n scopedVars.__searchFilter = { value: searchFilter, text: searchFilter };\n }\n\n const range = sceneGraph.getTimeRange(this).state.value;\n\n const request: DataQueryRequest = {\n app: CoreApp.Dashboard,\n requestId: uuidv4(),\n timezone: '',\n range,\n interval: '',\n intervalMs: 0,\n // @ts-ignore\n targets: [target],\n scopedVars,\n startTime: Date.now(),\n };\n\n return request;\n }\n\n onSearchChange = (searchFilter: string) => {\n if (!containsSearchFilter(this.state.query)) {\n return;\n }\n\n this._updateOptionsBasedOnSearchFilter(searchFilter);\n };\n\n private _updateOptionsBasedOnSearchFilter = debounce(async (searchFilter: string) => {\n const result = await lastValueFrom(this.getValueOptions({ searchFilter }));\n this.setState({ options: result, loading: false });\n }, 400);\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return <MultiOrSingleValueSelect model={model} />;\n };\n}\n\nfunction containsSearchFilter(query: string | DataQuery) {\n const str = safeStringifyValue(query);\n return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;\n}\n"],"names":["uuidv4"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1518,6 +1518,8 @@ declare class QueryVariable extends MultiValueVariable<QueryVariableState> {
|
|
|
1518
1518
|
protected _variableDependency: VariableDependencyConfig<QueryVariableState>;
|
|
1519
1519
|
constructor(initialState: Partial<QueryVariableState>);
|
|
1520
1520
|
getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
|
|
1521
|
+
private runMetricFindForDatasource;
|
|
1522
|
+
private metricFindValuesToOptions;
|
|
1521
1523
|
private getRequest;
|
|
1522
1524
|
onSearchChange: (searchFilter: string) => void;
|
|
1523
1525
|
private _updateOptionsBasedOnSearchFilter;
|
package/dist/index.js
CHANGED
|
@@ -11070,21 +11070,6 @@ class DrilldownDependenciesManager {
|
|
|
11070
11070
|
}
|
|
11071
11071
|
}
|
|
11072
11072
|
|
|
11073
|
-
let counter$1 = 100;
|
|
11074
|
-
const MIXED_DATASOURCE_UID = "-- Mixed --";
|
|
11075
|
-
const MIXED_DATASOURCE_REF = { type: "mixed", uid: MIXED_DATASOURCE_UID };
|
|
11076
|
-
function getNextRequestId$1(prefix = "SQR") {
|
|
11077
|
-
return prefix + counter$1++;
|
|
11078
|
-
}
|
|
11079
|
-
function isTemplatedDatasourceUid(uid) {
|
|
11080
|
-
if (!uid) {
|
|
11081
|
-
return false;
|
|
11082
|
-
}
|
|
11083
|
-
return /^(?:\$[A-Za-z0-9_]+|\$\{[^}]+\})/.test(uid);
|
|
11084
|
-
}
|
|
11085
|
-
function isTemplatedDatasourceRef(datasource) {
|
|
11086
|
-
return isTemplatedDatasourceUid(datasource == null ? void 0 : datasource.uid);
|
|
11087
|
-
}
|
|
11088
11073
|
function getSimpleVariableNameFromDatasourceUid(uid) {
|
|
11089
11074
|
if (!uid) {
|
|
11090
11075
|
return void 0;
|
|
@@ -11099,19 +11084,53 @@ function getSimpleVariableNameFromDatasourceUid(uid) {
|
|
|
11099
11084
|
}
|
|
11100
11085
|
return void 0;
|
|
11101
11086
|
}
|
|
11102
|
-
function
|
|
11087
|
+
function getDatasourceVariableSelectedUids(sceneObject, variableName) {
|
|
11103
11088
|
const variable = sceneGraph.lookupVariable(variableName, sceneObject);
|
|
11104
11089
|
if (!variable) {
|
|
11105
11090
|
return void 0;
|
|
11106
11091
|
}
|
|
11107
11092
|
const value = variable.getValue();
|
|
11108
11093
|
if (Array.isArray(value)) {
|
|
11109
|
-
return value.filter((item) => item !== "default").
|
|
11094
|
+
return value.filter((item) => item !== "default").map(String);
|
|
11110
11095
|
}
|
|
11111
11096
|
if (value === null || value === void 0) {
|
|
11112
11097
|
return void 0;
|
|
11113
11098
|
}
|
|
11114
|
-
|
|
11099
|
+
if (value === "default") {
|
|
11100
|
+
return [];
|
|
11101
|
+
}
|
|
11102
|
+
return [String(value)];
|
|
11103
|
+
}
|
|
11104
|
+
function getDatasourceVariableSelectionCount(sceneObject, variableName) {
|
|
11105
|
+
const uids = getDatasourceVariableSelectedUids(sceneObject, variableName);
|
|
11106
|
+
return uids == null ? void 0 : uids.length;
|
|
11107
|
+
}
|
|
11108
|
+
function expandMultiValueDatasourceUids(sceneObject, datasource) {
|
|
11109
|
+
const variableName = getSimpleVariableNameFromDatasourceUid(datasource == null ? void 0 : datasource.uid);
|
|
11110
|
+
if (!variableName) {
|
|
11111
|
+
return void 0;
|
|
11112
|
+
}
|
|
11113
|
+
const uids = getDatasourceVariableSelectedUids(sceneObject, variableName);
|
|
11114
|
+
if (!uids || uids.length <= 1) {
|
|
11115
|
+
return void 0;
|
|
11116
|
+
}
|
|
11117
|
+
return uids;
|
|
11118
|
+
}
|
|
11119
|
+
|
|
11120
|
+
let counter$1 = 100;
|
|
11121
|
+
const MIXED_DATASOURCE_UID = "-- Mixed --";
|
|
11122
|
+
const MIXED_DATASOURCE_REF = { type: "mixed", uid: MIXED_DATASOURCE_UID };
|
|
11123
|
+
function getNextRequestId$1(prefix = "SQR") {
|
|
11124
|
+
return prefix + counter$1++;
|
|
11125
|
+
}
|
|
11126
|
+
function isTemplatedDatasourceUid(uid) {
|
|
11127
|
+
if (!uid) {
|
|
11128
|
+
return false;
|
|
11129
|
+
}
|
|
11130
|
+
return /^(?:\$[A-Za-z0-9_]+|\$\{[^}]+\})/.test(uid);
|
|
11131
|
+
}
|
|
11132
|
+
function isTemplatedDatasourceRef(datasource) {
|
|
11133
|
+
return isTemplatedDatasourceUid(datasource == null ? void 0 : datasource.uid);
|
|
11115
11134
|
}
|
|
11116
11135
|
function shouldUseMixedRuntimeDatasource(sceneObject, datasource, queries) {
|
|
11117
11136
|
const refs = [datasource, ...queries.map((query) => query.datasource)];
|
|
@@ -14389,66 +14408,79 @@ class QueryVariable extends MultiValueVariable {
|
|
|
14389
14408
|
return rxjs.of([]);
|
|
14390
14409
|
}
|
|
14391
14410
|
this.setState({ loading: true, error: null });
|
|
14392
|
-
|
|
14393
|
-
|
|
14394
|
-
|
|
14395
|
-
|
|
14396
|
-
|
|
14397
|
-
|
|
14398
|
-
|
|
14399
|
-
|
|
14400
|
-
|
|
14401
|
-
|
|
14402
|
-
|
|
14403
|
-
|
|
14404
|
-
|
|
14405
|
-
|
|
14406
|
-
|
|
14407
|
-
|
|
14408
|
-
|
|
14409
|
-
|
|
14410
|
-
|
|
14411
|
-
|
|
14412
|
-
|
|
14413
|
-
|
|
14414
|
-
|
|
14415
|
-
|
|
14416
|
-
}),
|
|
14417
|
-
toMetricFindValues(),
|
|
14418
|
-
rxjs.mergeMap((values) => {
|
|
14419
|
-
let regex = "";
|
|
14420
|
-
if (this.state.regex) {
|
|
14421
|
-
regex = sceneGraph.interpolate(this, this.state.regex, void 0, "regex");
|
|
14422
|
-
}
|
|
14423
|
-
let options = metricNamesToVariableValues({
|
|
14424
|
-
variableRegEx: regex,
|
|
14425
|
-
variableRegexApplyTo: this.state.regexApplyTo,
|
|
14426
|
-
sort: this.state.sort,
|
|
14427
|
-
metricNames: values
|
|
14428
|
-
});
|
|
14429
|
-
if (this.state.staticOptions) {
|
|
14430
|
-
const customOptions = this.state.staticOptions;
|
|
14431
|
-
options = options.filter((option) => !customOptions.find((custom) => custom.value === option.value));
|
|
14432
|
-
if (this.state.staticOptionsOrder === "after") {
|
|
14433
|
-
options.push(...customOptions);
|
|
14434
|
-
} else if (this.state.staticOptionsOrder === "sorted") {
|
|
14435
|
-
options = sortVariableValues(options.concat(customOptions), this.state.sort);
|
|
14436
|
-
} else {
|
|
14437
|
-
options.unshift(...customOptions);
|
|
14438
|
-
}
|
|
14439
|
-
}
|
|
14440
|
-
return rxjs.of(options);
|
|
14441
|
-
}),
|
|
14442
|
-
rxjs.catchError((error) => {
|
|
14443
|
-
if (error.cancelled) {
|
|
14444
|
-
return rxjs.of([]);
|
|
14445
|
-
}
|
|
14446
|
-
return rxjs.throwError(() => error);
|
|
14447
|
-
})
|
|
14448
|
-
);
|
|
14411
|
+
const fanOutUids = expandMultiValueDatasourceUids(this, this.state.datasource);
|
|
14412
|
+
const datasourceRefs = fanOutUids ? fanOutUids.map((uid) => ({ ...this.state.datasource, uid })) : [this.state.datasource];
|
|
14413
|
+
const scopedSceneObject = {
|
|
14414
|
+
__sceneObject: wrapInSafeSerializableSceneObject(this)
|
|
14415
|
+
};
|
|
14416
|
+
const perDatasource = datasourceRefs.map(
|
|
14417
|
+
(datasource) => rxjs.from(getDataSource(datasource, scopedSceneObject)).pipe(
|
|
14418
|
+
rxjs.mergeMap((ds) => this.runMetricFindForDatasource(ds, args)),
|
|
14419
|
+
rxjs.catchError((error) => {
|
|
14420
|
+
if (error == null ? void 0 : error.cancelled) {
|
|
14421
|
+
return rxjs.of({ values: [], error: void 0 });
|
|
14422
|
+
}
|
|
14423
|
+
return rxjs.of({ values: [], error });
|
|
14424
|
+
})
|
|
14425
|
+
)
|
|
14426
|
+
);
|
|
14427
|
+
return rxjs.forkJoin(perDatasource).pipe(
|
|
14428
|
+
rxjs.mergeMap((results) => {
|
|
14429
|
+
const values = results.flatMap((result) => result.values);
|
|
14430
|
+
const errors = results.map((result) => result.error).filter(Boolean);
|
|
14431
|
+
if (values.length === 0 && errors.length > 0) {
|
|
14432
|
+
return rxjs.throwError(() => errors[0]);
|
|
14433
|
+
}
|
|
14434
|
+
return rxjs.of(this.metricFindValuesToOptions(values));
|
|
14449
14435
|
})
|
|
14450
14436
|
);
|
|
14451
14437
|
}
|
|
14438
|
+
runMetricFindForDatasource(ds, args) {
|
|
14439
|
+
const runner = createQueryVariableRunner(ds);
|
|
14440
|
+
const target = runner.getTarget(this);
|
|
14441
|
+
const request = this.getRequest(target, args.searchFilter);
|
|
14442
|
+
return runner.runRequest({ variable: this, searchFilter: args.searchFilter }, request).pipe(
|
|
14443
|
+
registerQueryWithController({
|
|
14444
|
+
type: "QueryVariable/getValueOptions",
|
|
14445
|
+
request,
|
|
14446
|
+
origin: this
|
|
14447
|
+
}),
|
|
14448
|
+
rxjs.filter((data$1) => data$1.state === data.LoadingState.Done || data$1.state === data.LoadingState.Error),
|
|
14449
|
+
rxjs.take(1),
|
|
14450
|
+
rxjs.mergeMap((data$1) => {
|
|
14451
|
+
if (data$1.state === data.LoadingState.Error) {
|
|
14452
|
+
return rxjs.throwError(() => data$1.error);
|
|
14453
|
+
}
|
|
14454
|
+
return rxjs.of(data$1);
|
|
14455
|
+
}),
|
|
14456
|
+
toMetricFindValues(),
|
|
14457
|
+
rxjs.mergeMap((values) => rxjs.of({ values, error: void 0 }))
|
|
14458
|
+
);
|
|
14459
|
+
}
|
|
14460
|
+
metricFindValuesToOptions(values) {
|
|
14461
|
+
let regex = "";
|
|
14462
|
+
if (this.state.regex) {
|
|
14463
|
+
regex = sceneGraph.interpolate(this, this.state.regex, void 0, "regex");
|
|
14464
|
+
}
|
|
14465
|
+
let options = metricNamesToVariableValues({
|
|
14466
|
+
variableRegEx: regex,
|
|
14467
|
+
variableRegexApplyTo: this.state.regexApplyTo,
|
|
14468
|
+
sort: this.state.sort,
|
|
14469
|
+
metricNames: values
|
|
14470
|
+
});
|
|
14471
|
+
if (this.state.staticOptions) {
|
|
14472
|
+
const customOptions = this.state.staticOptions;
|
|
14473
|
+
options = options.filter((option) => !customOptions.find((custom) => custom.value === option.value));
|
|
14474
|
+
if (this.state.staticOptionsOrder === "after") {
|
|
14475
|
+
options.push(...customOptions);
|
|
14476
|
+
} else if (this.state.staticOptionsOrder === "sorted") {
|
|
14477
|
+
options = sortVariableValues(options.concat(customOptions), this.state.sort);
|
|
14478
|
+
} else {
|
|
14479
|
+
options.unshift(...customOptions);
|
|
14480
|
+
}
|
|
14481
|
+
}
|
|
14482
|
+
return options;
|
|
14483
|
+
}
|
|
14452
14484
|
getRequest(target, searchFilter) {
|
|
14453
14485
|
const scopedVars = {
|
|
14454
14486
|
__sceneObject: wrapInSafeSerializableSceneObject(this)
|