feat: initialize microservice architecture with auth, api, realtime, copernicus, ml, and console modules
This commit is contained in:
67
api/src/storage/influx.js
Normal file
67
api/src/storage/influx.js
Normal file
@@ -0,0 +1,67 @@
|
||||
const { InfluxDB, Point } = require('@influxdata/influxdb-client');
|
||||
|
||||
const url = process.env.INFLX_URL;
|
||||
const token = process.env.INFLX_TOKEN;
|
||||
const org = process.env.INFLX_ORG;
|
||||
|
||||
const boatTelemetry = "boat"
|
||||
|
||||
const client = new InfluxDB({ url, token })
|
||||
const write = client.getWriteApi(org, boatTelemetry);
|
||||
const querying = client.getQueryApi(org);
|
||||
|
||||
|
||||
async function append(measurement, sensor, data) {
|
||||
const point = new Point(measurement)
|
||||
.tag("sensor", sensor)
|
||||
.floatField('temperature', data.temperature)
|
||||
.floatField('humidity', data.humidity)
|
||||
|
||||
write.writePoint(point);
|
||||
await write.flush();
|
||||
|
||||
}
|
||||
|
||||
async function writeBatch(datas) {
|
||||
datas.forEach(data => {
|
||||
append(data.measurement, data.sensor, data.data);
|
||||
})
|
||||
}
|
||||
|
||||
async function query(bucket, relativeTime, measurement, sensor, field) {
|
||||
|
||||
const fluxTimeRange = relativeTime || "-1h";
|
||||
let fluxQuery = `
|
||||
from(bucket: "${bucket}")
|
||||
|> range(start: ${fluxTimeRange})
|
||||
|> filter(fn: (r) => r._measurement == "${measurement}")`;
|
||||
|
||||
if (sensor) {
|
||||
fluxQuery += `\n |> filter(fn: (r) => r.sensor == "${sensor}")`;
|
||||
}
|
||||
|
||||
if (field) {
|
||||
fluxQuery += `\n |> filter(fn: (r) => r._field == "${field}")`;
|
||||
}
|
||||
|
||||
fluxQuery += `\n |> yield(name: "data")`;
|
||||
|
||||
try {
|
||||
const data = [];
|
||||
for await (const { values, tableMeta } of querying.iterateRows(fluxQuery)) {
|
||||
data.push(tableMeta.toObject(values));
|
||||
}
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error("Error in query:", error);
|
||||
return [];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
write:append,
|
||||
writeBatch,
|
||||
query
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user