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.
64 lines
1.7 KiB
64 lines
1.7 KiB
import { fluxDuration, InfluxDB } from "@influxdata/influxdb-client" |
|
import { Point } from "@influxdata/influxdb-client" |
|
import { influxBucket, influxHost, influxOrg, influxPointName, influxToken } from "./constants" |
|
import { influxQuery, processInfluxResult } from "./helpers" |
|
import { InfluxField, InfluxPeriod } from "./types" |
|
|
|
interface WriteSitesCounteParams { |
|
all: number |
|
available: number |
|
} |
|
|
|
interface QueryParams { |
|
field: InfluxField |
|
period: InfluxPeriod |
|
} |
|
|
|
class InfluxDb { |
|
private client: InfluxDB |
|
constructor() { |
|
this.client = new InfluxDB({ url: process.env.INFLUX_URL as string, token: influxToken }) |
|
} |
|
getWriteApi() { |
|
const writeApi = this.client.getWriteApi(influxOrg, influxBucket) |
|
writeApi.useDefaultTags({ host: influxHost }) |
|
return writeApi |
|
} |
|
writeSitesCount({ all, available }: WriteSitesCounteParams) { |
|
const writeApi = this.getWriteApi() |
|
const pointAll = new Point(influxPointName).intField(InfluxField.ALL_SITES, all) |
|
const pointAvailable = new Point(influxPointName).intField( |
|
InfluxField.AVAILABLE_SITES, |
|
available |
|
) |
|
writeApi.writePoint(pointAll) |
|
writeApi.writePoint(pointAvailable) |
|
writeApi.close() |
|
} |
|
async query({ field, period }: QueryParams) { |
|
const queryApi = this.client.getQueryApi(influxOrg) |
|
|
|
const query = influxQuery(field, period) |
|
const result = await queryApi.collectRows(query) |
|
return processInfluxResult(result); |
|
} |
|
|
|
async getHistoryOfState(period: InfluxPeriod) { |
|
const all = await this.query({ |
|
field: InfluxField.ALL_SITES, |
|
period, |
|
}) |
|
|
|
const available = await this.query({ |
|
field: InfluxField.AVAILABLE_SITES, |
|
period, |
|
}) |
|
|
|
return { |
|
all, |
|
available, |
|
} |
|
} |
|
} |
|
|
|
export default new InfluxDb()
|
|
|