feat: initialize microservice architecture with auth, api, realtime, copernicus, ml, and console modules

This commit is contained in:
Giuseppe Raffa
2026-03-28 15:29:34 +01:00
commit bcfce32adb
89 changed files with 12025 additions and 0 deletions

67
api/src/storage/influx.js Normal file
View 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
}