UNPKG

cloki

Version:

LogQL API with Clickhouse Backend

62 lines (59 loc) 1.76 kB
const { incAlertMark } = require('../../clickhouse_alerting') const { scanClickhouse } = require('../../clickhouse') const CallbackTimeSeriesAlertWatcher = require('./callbackTimeSeriesAlertWatcher') const { parseCliQL } = require('../../../cliql') class CallbackCliqlAlertWatcher extends CallbackTimeSeriesAlertWatcher { assertExpr () { } /** * @return {Promise<number>} * @private */ async _checkViews () { this.lastCheck = this.lastCheck || Date.now() const newMark = Date.now() const params = parseCliQL(this.rule.expr) const from = newMark - parseInt(params.interval) * 1000 let active = false const alerts = [] await new Promise((resolve, reject) => { try { scanClickhouse(params, { code: () => {}, send: (data) => { if (data.data && data.data.result) { for (const metric of data.data.result) { for (const val of metric.values) { active = true alerts.push({ labels: metric.metric, string: val[1] }) } } resolve(alerts) return } reject(new Error(data)) } }, { start: from + '000000', end: newMark + '000000', shift: from }) } catch (e) { reject(e) } }) await this.sendTextAlerts(alerts) await incAlertMark(this.nsName, this.group.name, this.rule.alert, (newMark * 2) + (active ? 1 : 0) ) await incAlertMark(this.nsName, this.group.name, this.rule.alert, this.activeSince, 1 ) return newMark } } module.exports = CallbackCliqlAlertWatcher