Searching.ton
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.

46 lines
1.4 KiB

2 years ago
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'
case InfluxPeriod.D:
start ='-1d'
period = '144m'
case InfluxPeriod.W:
start ='-1w'
period = '1008m'
case InfluxPeriod.M:
start ='-1mo'
period = '3d'
case InfluxPeriod.Y:
start ='-1y'
period = '36d'
case InfluxPeriod.tenminute:
start ='10m'
period = '1m'
}
const influxPeriod = fluxDuration(period);
const influxStart = fluxDuration(start);
return `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")`
}
export const processInfluxResult = (res:unknown[]) => {
return res.map(i=>({
value: i._value,
time: i._time
}))
}