feat+fix: changed the primary data source for the data analysis and added the relative card in the dashboard page.
This commit is contained in:
@@ -118,6 +118,51 @@ async function exportSessionCSV(sensor, session, since, until = null) {
|
||||
return header + '\n' + csvRows.join('\n') + '\n';
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility interna: esegue una Flux query e restituisce le righe come array di oggetti.
|
||||
*/
|
||||
function runFlux(fluxQuery) {
|
||||
const rows = [];
|
||||
return new Promise((resolve, reject) => {
|
||||
querying.queryRows(fluxQuery, {
|
||||
next(row, tableMeta) { rows.push(tableMeta.toObject(row)); },
|
||||
error: reject,
|
||||
complete() { resolve(rows); },
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Elenca tutte le sessioni presenti in InfluxDB, con primo e ultimo timestamp.
|
||||
* Sorgente di verità: tag sensor + session sul measurement "logs".
|
||||
* @param {string} [lookback='-5y'] - range di ricerca (es. '-365d', '-5y')
|
||||
* @returns {Promise<Array<{session, sensor, startTime, endTime}>>}
|
||||
*/
|
||||
async function listInfluxSessions(lookback = '-5y') {
|
||||
const base = `
|
||||
from(bucket: "${sessionBucket}")
|
||||
|> range(start: ${lookback})
|
||||
|> filter(fn: (r) => r._measurement == "logs")
|
||||
|> group(columns: ["sensor", "session"])
|
||||
|> keep(columns: ["_time", "sensor", "session"])
|
||||
`;
|
||||
const [firstRows, lastRows] = await Promise.all([
|
||||
runFlux(base + '|> first()'),
|
||||
runFlux(base + '|> last()'),
|
||||
]);
|
||||
|
||||
const map = {};
|
||||
firstRows.forEach(r => {
|
||||
if (!r.session) return;
|
||||
map[r.session] = { session: r.session, sensor: r.sensor, startTime: r._time };
|
||||
});
|
||||
lastRows.forEach(r => {
|
||||
if (map[r.session]) map[r.session].endTime = r._time;
|
||||
});
|
||||
|
||||
return Object.values(map).sort((a, b) => new Date(b.startTime) - new Date(a.startTime));
|
||||
}
|
||||
|
||||
async function checkInflux() {
|
||||
try {
|
||||
const result = await querying.collectRows(
|
||||
@@ -139,6 +184,7 @@ module.exports = {
|
||||
write: append,
|
||||
writeBatch,
|
||||
query,
|
||||
listInfluxSessions,
|
||||
querySessionHistory,
|
||||
exportSessionCSV,
|
||||
checkInflux
|
||||
|
||||
Reference in New Issue
Block a user