UNPKG

dsl-builder

Version:

OpenSearch Query Builder - Extract from OpenSearch Dashboards

73 lines (72 loc) 2.88 kB
/* * 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'); };