@clickandmortar/kibana-url-builder
Version:
Kibana URL builder
110 lines (109 loc) • 3.96 kB
JavaScript
;
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;