UNPKG

cloki

Version:

LogQL API with Clickhouse Backend

75 lines (71 loc) 1.93 kB
const json = require('./json') const re = require('./regexp') const { hasExtraLabels, getPlugins, isEOF, hasStream, addStream } = require('../common') const logfmt = require('./logfmt') const logger = require('../../../lib/logger') module.exports = { /** * * @param token {Token} * @param query {Select} * @returns {Select} */ json: (token, query) => { if (!token.Children('parameter').length || (query.stream && query.stream.length) || hasExtraLabels(query)) { return json.viaStream(token, query) } return json.viaClickhouseQuery(token, query) }, /** * * @param token {Token} * @param query {Select} * @returns {Select} */ logfmt: (token, query) => { return logfmt.viaStream(token, query) }, /** * * @param token {Token} * @param query {Select} * @returns {Select} */ regexp: (token, query) => { if (hasStream(query) || hasExtraLabels(query)) { return re.viaStream(token, query) } try { return re.viaRequest(token, query) } catch (err) { logger.error({ err }) return re.viaStream(token, query) } }, ...getPlugins('parser_registry', (plugin) => { if (plugin.map) { return (token, query) => { const mapper = plugin.map(token.Children('parameter').map(p => p.value)) return addStream(query, (s) => s.map((e) => { if (!e || isEOF(e) || !e.labels || !e.string) { return e } return mapper(e) })) } } if (plugin.remap) { return (token, query) => { const remapper = plugin.remap(token.Children('parameter').map(p => p.value)) return addStream(query, (s) => s.remap((emit, e) => { if (!e || isEOF(e) || !e.labels || !e.string) { emit(e) return } remapper(emit, e) })) } } }) }