cloki
Version:
LogQL API with Clickhouse Backend
38 lines (36 loc) • 1.24 kB
JavaScript
const { PluginLoaderBase } = require('plugnplay')
module.exports = class extends PluginLoaderBase {
exportSync (api) {
return {
derivative: {
/**
*
* @param sum {any} previous value for the current time bucket
* @param val {{unwrapped: number}} current values
* @param time {number} timestamp in ms for the current value
* @returns {any}
*/
run: (sum, val, time) => {
sum = sum || {}
sum.first = sum && sum.first && time > sum.first.time
? sum.first
: {
time: time,
val: val.unwrapped
}
sum.last = sum && sum.last && time < sum.last ? sum.last : { time: time, val: val.unwrapped }
return sum
},
/**
* @param sum {any} sum of the time bucket you have created during "run"
* @returns {number}
*/
approx: (sum) => {
return sum && sum.last && sum.first && sum.last.time > sum.first.time
? (sum.last.val - sum.first.val) / (sum.last.time - sum.first.time) * 1000
: 0
}
}
}
}
}