You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
import { fluxDuration } from "@influxdata/influxdb-client"
|
|
|
|
import { influxBucket, influxHost, influxPointName } from "./constants"
|
|
|
|
import { InfluxField, InfluxPeriod } from "./types"
|
|
|
|
|
|
|
|
export const influxQuery = (field: InfluxField, fetchPeriod: InfluxPeriod) => {
|
|
|
|
let start
|
|
|
|
let period
|
|
|
|
|
|
|
|
switch (fetchPeriod) {
|
|
|
|
case InfluxPeriod.H:
|
|
|
|
start = "-1h"
|
|
|
|
period = "6m"
|
|
|
|
break
|
|
|
|
case InfluxPeriod.D:
|
|
|
|
start = "-1d"
|
|
|
|
period = "144m"
|
|
|
|
break
|
|
|
|
// case InfluxPeriod.W:
|
|
|
|
// start = "-1w"
|
|
|
|
// period = "1008m"
|
|
|
|
// break
|
|
|
|
// case InfluxPeriod.M:
|
|
|
|
// start = "-1mo"
|
|
|
|
// period = "3d"
|
|
|
|
// break
|
|
|
|
// case InfluxPeriod.Y:
|
|
|
|
// start = "-1y"
|
|
|
|
// period = "36d"
|
|
|
|
// break
|
|
|
|
// case InfluxPeriod.tenminute:
|
|
|
|
// start ='-10m'
|
|
|
|
// period = '1m'
|
|
|
|
}
|
|
|
|
|
|
|
|
const query = `from(bucket: "${influxBucket}")
|
|
|
|
|> range(start: ${start}, stop: now())
|
|
|
|
|> filter(fn: (r) => r["host"] == "${influxHost}")
|
|
|
|
|> filter(fn: (r) => r["_field"] == "${field}")
|
|
|
|
|> filter(fn: (r) => r["_measurement"] == "${influxPointName}")
|
|
|
|
|> aggregateWindow(every: ${period}, fn: mean, createEmpty: false)
|
|
|
|
|> yield(name: "mean")`
|
|
|
|
|
|
|
|
return query
|
|
|
|
}
|
|
|
|
|
|
|
|
export const processInfluxResult = (res: unknown[]) => {
|
|
|
|
return res.map((i) => ({
|
|
|
|
value: i._value,
|
|
|
|
time: i._time,
|
|
|
|
}))
|
|
|
|
}
|