cloki
Version:
LogQL API with Clickhouse Backend
62 lines (57 loc) • 1.28 kB
JavaScript
/**
*
* @param labels {Object | string[] | string}
* @returns {Object}
*/
module.exports.parseLabels = (labels) => {
if (Array.isArray(labels)) {
return labels.reduce((sum, l) => {
sum[l[0]] = l[1]
return sum
}, {})
}
if (typeof labels === 'object') {
return labels
}
return JSON.parse(labels)
}
/**
*
* @param labels {Object | string[] | string}
* @returns {string}
*/
module.exports.hashLabels = (labels) => {
if (Array.isArray(labels)) {
return JSON.stringify(labels)
}
if (typeof labels === 'object' && labels !== null) {
const res = [...Object.entries(labels)]
res.sort()
return JSON.stringify(labels)
}
return labels
}
/**
*
* @param durationStr {string}
* @returns {number}
*/
module.exports.durationToMs = (durationStr) => {
const durations = {
ns: 1 / 1000000,
us: 1 / 1000,
ms: 1,
s: 1000,
m: 60000,
h: 60000 * 60
}
for (const k of Object.keys(durations)) {
const m = durationStr.match(new RegExp(`^([0-9][.0-9]*)${k}$`))
if (m) {
return parseInt(m[1]) * durations[k]
}
}
throw new Error('Unsupported duration')
}
module.exports.LineFmtOption = () => process.env.LINE_FMT || 'handlebars'
module.exports.errors = require('./lib/handlers/errors')