dsl-builder
Version:
OpenSearch Query Builder - Extract from OpenSearch Dashboards
73 lines (72 loc) • 2.88 kB
JavaScript
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*
* Any modifications Copyright OpenSearch Contributors. See
* GitHub history for details.
*/
/**
* Returns an object matching a given title
*
* @param client {SavedObjectsClientCommon}
* @param title {string}
* @param dataSourceId {string}{optional}
* @returns {Promise<SavedObject|undefined>}
*/
export async function findByTitle(client, title, dataSourceId) {
if (title) {
const savedObjects = (await client.find({
type: 'index-pattern',
perPage: 10,
search: `"${title}"`,
searchFields: ['title'],
fields: ['title'],
})).filter((obj) => {
return obj && obj.attributes && validateDataSourceReference(obj, dataSourceId);
});
return savedObjects.find((obj) => obj.attributes.title.toLowerCase() === title.toLowerCase());
}
}
// This is used to validate datasource reference of index pattern
export const validateDataSourceReference = (indexPattern, dataSourceId) => {
const references = indexPattern.references;
if (dataSourceId) {
return references.some((ref) => ref.id === dataSourceId && ref.type === 'data-source');
}
else {
// No datasource id passed as input meaning we are getting index pattern from default cluster,
// and it's supposed to be an empty array
return references.length === 0;
}
};
export const getIndexPatternTitle = async (indexPatternTitle, references, getDataSource) => {
let dataSourceTitle;
const dataSourceReference = getDataSourceReference(references);
// If an index-pattern references datasource, prepend data source name with index pattern name for display purpose
if (dataSourceReference) {
const dataSourceId = dataSourceReference.id;
try {
const { attributes: { title }, error, } = await getDataSource(dataSourceId);
dataSourceTitle = error ? dataSourceId : title;
}
catch (e) {
// use datasource id as title when failing to fetch datasource
dataSourceTitle = dataSourceId;
}
return concatDataSourceWithIndexPattern(dataSourceTitle, indexPatternTitle);
}
else {
// if index pattern doesn't reference datasource, return as it is.
return indexPatternTitle;
}
};
export const concatDataSourceWithIndexPattern = (dataSourceTitle, indexPatternTitle) => {
const DATA_SOURCE_INDEX_PATTERN_DELIMITER = '::';
return dataSourceTitle.concat(DATA_SOURCE_INDEX_PATTERN_DELIMITER).concat(indexPatternTitle);
};
export const getDataSourceReference = (references) => {
return references.find((ref) => ref.type === 'data-source');
};