UNPKG

cloki

Version:

LogQL API with Clickhouse Backend

67 lines (65 loc) 1.54 kB
const hb = require('handlebars') const { addStream, isEOF } = require('../common') const { LineFmtOption } = require('../../../common') const { compile } = require('./go_native_fmt') const logger = require('../../../lib/logger') require('handlebars-helpers')(['math', 'string'], { handlebars: hb }) /** * @param token {Token} * @param query {Select} * @returns {Select} */ module.exports = (token, query) => { let processor = null const fmt = JSON.parse('"' + token.Child('quoted_str').value.replace(/(^"|^'|"$|'$)/g, '') + '"') if (LineFmtOption() === 'go_native' || token.Child('line_format_fn').value === 'line_format_native') { processor = compile(fmt) processor.then((p) => { processor = p }) } else { processor = { process: hb.compile(fmt), done: () => {} } } return addStream(query, /** * * @param s {DataStream} */ (s) => s.map(async (e) => { if (!e) { return e } if (isEOF(e)) { processor.done() return e } if (!e.labels) { return e } if (!processor) { return null } if (processor.then) { try { await processor } catch (err) { processor = null logger.error({ err }) } } try { const res = processor.process({ ...e.labels, _entry: e.string }) return { ...e, string: res } } catch (err) { return null } }).filter(e => e)) }