1
0
mirror of https://github.com/metrico/qryn.git synced 2025-03-15 19:18:09 +00:00

logql + dots

This commit is contained in:
akvlad
2022-08-30 16:25:17 +00:00
parent 9fc6c0fc3a
commit 5d75bd84ce
6 changed files with 40 additions and 6 deletions

@ -46,7 +46,7 @@ module.exports.parseCliQL = (query) => {
} else if (query.startsWith('clickhouse(')) {
let queries = null
const _query = /\{(.*?)\}/g.exec(query)[1] || query
queries = _query.replace(/\!?="/g, ':"')
queries = _query //_query.replace(/\!?="/g, ':"')
return toJSON(queries)
}
return undefined

@ -190,7 +190,7 @@ const reloadFingerprints = function () {
stream.on('end', function () {
rows.forEach(function (row) {
try {
const JSONLabels = toJSON(row[1].replace(/\!?=/g, ':'))
const JSONLabels = toJSON(row[1]/*.replace(/\!?=/g, ':')*/)
labels.add(row[0], JSON.stringify(JSONLabels))
for (const key in JSONLabels) {
// logger.debug('Adding key',row);

@ -31,7 +31,7 @@ function processStream (stream, labels, bulkLabels, bulk, toJSON, fingerPrint) {
JSONLabels = stream.stream
} else {
JSONLabels = toJSON(
stream.labels.replace(/\!?="/g, ':"')
stream.labels //stream.labels.replace(/\!?="/g, ':"')
)
}
// Calculate Fingerprint

@ -19,7 +19,7 @@ const logger = pino({
res.stack = err.stack
return res.toString() + '\n' + res.stack.toString()
}
return err.message.toString() + '\n' + err.stack.toString()
return err.message.toString() + (err.stack ? '\n' + err.stack.toString() : '')
})
}
})

@ -44,7 +44,41 @@ const fingerPrint = function (text, hex, alg) {
else return parseInt(shortHash(text), 16)
}
const toJSON = require('jsonic')
/**
*
* @param str {string}
* @returns Object
*/
const toJSON = (function () {
const labelsLang = `
<SYNTAX> ::= <OWSP> <pair> <OWSP> *("," <OWSP> <pair>) <OWSP>
label ::= (<ALPHA> | "_") *(<ALPHA> | "." | "_" | <DIGITS>)
pair ::= <label> <OWSP> "=" <OWSP> <QLITERAL>
`
const Compiler = require('bnf/Compiler').Compiler
const compiler = new Compiler()
compiler.AddLanguage(labelsLang, 'labels')
const getPairs = (root) => {
let tokens = []
for (let i = 0; i < root.tokens.length; i++) {
if (root.tokens[i].name === 'pair') {
tokens.push(root.tokens[i])
}
tokens = [...tokens, ...getPairs(root.tokens[i])]
}
return tokens
}
return (str) => {
const script = compiler.ParseScript(str)
const pairs = getPairs(script.rootToken)
const res = {}
for (const pair of pairs) {
res[pair.Child('label').value] = JSON.parse(pair.Child('QLITERAL').value)
}
return res
}
})() //require('jsonic')
const parseOrDefault = (str, def) => {
try {

@ -4,7 +4,7 @@ log_stream_fp_selector ::= "{" <OWSP> <log_stream_selector_rule> *(<OWSP> "," <O
log_stream_selector ::= <log_stream_fp_selector> <OWSP> *(<OWSP><log_pipeline>)
log_stream_selector_rule ::= <label> <OWSP> <operator> <OWSP> <quoted_str>
label ::= (<ALPHA> | "_") *(<ALPHA> | "_" | <DIGITS>)
label ::= (<ALPHA> | "_") *(<ALPHA> | "." | "_" | <DIGITS>)
operator ::= <stream_selector_operator_registry>
quoted_str ::= <QLITERAL> | <AQLITERAL>