UNPKG

@clickandmortar/kibana-url-builder

Version:

Kibana URL builder

110 lines (109 loc) 3.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildDiscoverUrl = void 0; const rison = require("rison"); const defaultPeriod = { from: 'now-15m', mode: 'quick', to: 'now' }; function buildDiscoverUrl({ host, refreshInterval, period, columns, filters, index, interval, query, sort }) { if (!columns || columns.length === 0) { columns = ['_source']; } const queryFilters = []; filters.forEach((filter) => { var _b, _c, _d; if (!index) { throw new Error('index pattern is required for filters'); } const queryFilter = {}; queryFilter.$state = { store: 'appState' }; queryFilter.meta = { alias: (_b = filter.alias) !== null && _b !== void 0 ? _b : null, disabled: (_c = filter.disabled) !== null && _c !== void 0 ? _c : false, index: index !== null && index !== void 0 ? index : 'missing-index-pattern', key: filter.field, negate: (_d = filter.negate) !== null && _d !== void 0 ? _d : false, type: filter.type }; if (filter.type === 'exists') { queryFilter.exists = { field: filter.field }; queryFilter.meta.value = 'exists'; } else if (filter.type === 'query') { const params = { query: filter.value, type: 'phrase' }; queryFilter.query = { match: { [filter.field]: params } }; queryFilter.meta.params = params; queryFilter.meta.value = filter.value; } else if (filter.type === 'phrases') { if (!Array.isArray(filter.value)) { throw new Error('Filter value must be an array when using phrases filter'); } queryFilter.meta.params = filter.value; queryFilter.meta.value = filter.value.join(', '); queryFilter.query = { bool: { minimum_should_match: 1, should: [] } }; filter.value.forEach((value) => { queryFilter.query.bool.should.push({ match_phrase: { [filter.field]: value } }); }); } else if (filter.type === 'range') { if (!Array.isArray(filter.value) || filter.value.length !== 2) { throw new Error('Filter value must be an array of 2 values when using range filter'); } const params = { gte: parseInt(filter.value[0]), lte: parseInt(filter.value[1]) }; queryFilter.meta.params = params; queryFilter.meta.value = encodeURIComponent(`${params.gte} to ${params.lte}`); queryFilter.range = { [filter.field]: params }; } else { throw new Error(`Unknown filter type [${filter.type}]`); } queryFilters.push(queryFilter); }); interval = interval !== null && interval !== void 0 ? interval : 'auto'; sort = sort !== null && sort !== void 0 ? sort : { field: '@timestamp', direction: 'desc' }; const _g = { time: Object.assign({}, defaultPeriod, period) }; if (refreshInterval) { _g.refreshInterval = refreshInterval; } const _a = { columns, interval, filters: queryFilters, sort: [sort.field, sort.direction] }; if (index) { _a.index = index; } _a.query = { language: 'lucene', query: query !== null && query !== void 0 ? query : '' }; return `${host.replace(/\/$/, '')}/app/kibana#/discover?_g=${rison.encode(_g)}&_a=${rison.encode(_a)}`; } exports.buildDiscoverUrl = buildDiscoverUrl;