2021-10-29 12:57:24 -05:00
|
|
|
import { DataQuery, DataSourceInstanceSettings, DataSourceRef, getDataSourceRef } from '@grafana/data';
|
2021-11-05 10:12:55 -05:00
|
|
|
import { isExpressionReference } from '@grafana/runtime/src/utils/DataSourceWithBackend';
|
2019-03-14 11:20:33 -05:00
|
|
|
|
2020-07-09 08:16:35 -05:00
|
|
|
export const getNextRefIdChar = (queries: DataQuery[]): string => {
|
2021-06-23 08:23:02 -05:00
|
|
|
for (let num = 0; ; num++) {
|
|
|
|
const refId = getRefId(num);
|
|
|
|
if (!queries.some((query) => query.refId === refId)) {
|
|
|
|
return refId;
|
|
|
|
}
|
|
|
|
}
|
2019-03-14 11:20:33 -05:00
|
|
|
};
|
2019-10-18 06:09:55 -05:00
|
|
|
|
2021-10-29 12:57:24 -05:00
|
|
|
export function addQuery(queries: DataQuery[], query?: Partial<DataQuery>, datasource?: DataSourceRef): DataQuery[] {
|
2019-10-18 06:09:55 -05:00
|
|
|
const q = query || {};
|
|
|
|
q.refId = getNextRefIdChar(queries);
|
2021-01-19 07:04:54 -06:00
|
|
|
q.hide = false;
|
2021-10-13 10:49:40 -05:00
|
|
|
|
|
|
|
if (!q.datasource && datasource) {
|
|
|
|
q.datasource = datasource;
|
|
|
|
}
|
|
|
|
|
2019-10-18 06:09:55 -05:00
|
|
|
return [...queries, q as DataQuery];
|
|
|
|
}
|
2020-08-20 04:32:10 -05:00
|
|
|
|
2021-10-13 10:49:40 -05:00
|
|
|
export function updateQueries(
|
|
|
|
newSettings: DataSourceInstanceSettings,
|
|
|
|
queries: DataQuery[],
|
|
|
|
dsSettings?: DataSourceInstanceSettings
|
|
|
|
): DataQuery[] {
|
2021-10-29 12:57:24 -05:00
|
|
|
const datasource = getDataSourceRef(newSettings);
|
|
|
|
|
2021-10-13 10:49:40 -05:00
|
|
|
if (!newSettings.meta.mixed && dsSettings?.meta.mixed) {
|
|
|
|
return queries.map((q) => {
|
2021-11-05 10:12:55 -05:00
|
|
|
if (!isExpressionReference(q.datasource)) {
|
2021-10-29 12:57:24 -05:00
|
|
|
q.datasource = datasource;
|
2021-10-13 10:49:40 -05:00
|
|
|
}
|
|
|
|
return q;
|
|
|
|
});
|
|
|
|
} else if (!newSettings.meta.mixed && dsSettings?.meta.id !== newSettings.meta.id) {
|
|
|
|
// we are changing data source type, clear queries
|
2021-10-29 12:57:24 -05:00
|
|
|
return [{ refId: 'A', datasource }];
|
2021-10-13 10:49:40 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return queries;
|
|
|
|
}
|
|
|
|
|
2020-08-20 04:32:10 -05:00
|
|
|
export function isDataQuery(url: string): boolean {
|
|
|
|
if (
|
|
|
|
url.indexOf('api/datasources/proxy') !== -1 ||
|
|
|
|
url.indexOf('api/tsdb/query') !== -1 ||
|
|
|
|
url.indexOf('api/ds/query') !== -1
|
|
|
|
) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function isLocalUrl(url: string) {
|
|
|
|
return !url.match(/^http/);
|
|
|
|
}
|
2021-06-23 08:23:02 -05:00
|
|
|
|
|
|
|
function getRefId(num: number): string {
|
|
|
|
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
|
|
|
|
|
|
if (num < letters.length) {
|
|
|
|
return letters[num];
|
|
|
|
} else {
|
|
|
|
return getRefId(Math.floor(num / letters.length) - 1) + letters[num % letters.length];
|
|
|
|
}
|
|
|
|
}
|