321 lines
12 KiB
JavaScript
321 lines
12 KiB
JavaScript
function setupRoutes(router, lastCallRef, app) {
|
|
router.get("/ping", async (req, res) => {
|
|
try {
|
|
const text = lastCallRef.current || "pong";
|
|
res.status(200).sendFile(__dirname + "/steering_support/helm_steering_destra.html");
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
router.get("/helm_steering_destro", (req, res) => {
|
|
try {
|
|
res.status(200).sendFile(__dirname + "/steering_support/helm_steering_destro.html");
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
router.get("/tools", (req, res) => {
|
|
try {
|
|
const path = require("path");
|
|
const filePath = path.join(__dirname, "..", "public", "decrypt_tool.html");
|
|
res.status(200).sendFile(filePath);
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// LOGS DATASETS
|
|
router.post("/dataset/start", (req, res) => {
|
|
try {
|
|
if (!app.datasetControl) {
|
|
return res.status(503).json({ error: "Dataset control non disponibile" });
|
|
}
|
|
const result = app.datasetControl.start();
|
|
res.json({ success: result, message: result ? "Registrazione avviata" : "Registrazione già in corso" });
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
router.post("/dataset/stop", (req, res) => {
|
|
try {
|
|
if (!app.datasetControl) {
|
|
return res.status(503).json({ error: "Dataset control non disponibile" });
|
|
}
|
|
const result = app.datasetControl.stop();
|
|
res.json({ success: result, message: result ? "Registrazione fermata" : "Nessuna registrazione in corso" });
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
router.post("/dataset/restart", (req, res) => {
|
|
try {
|
|
if (!app.datasetControl) {
|
|
return res.status(503).json({ error: "Dataset control non disponibile" });
|
|
}
|
|
const result = app.datasetControl.restart();
|
|
res.json({ success: result, message: "Registrazione riavviata" });
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
router.get("/dataset/status", (req, res) => {
|
|
try {
|
|
if (!app.datasetControl) {
|
|
return res.status(503).json({ error: "Dataset control non disponibile" });
|
|
}
|
|
const status = app.datasetControl.getStatus();
|
|
res.json(status);
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
router.get("/dataset/files", (req, res) => {
|
|
try {
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const logsDirectory = path.join(__dirname, '..', 'datasetModels', 'saved_datas');
|
|
|
|
if (!fs.existsSync(logsDirectory)) {
|
|
return res.json({ files: [], count: 0 });
|
|
}
|
|
|
|
const items = fs.readdirSync(logsDirectory);
|
|
const files = items
|
|
.filter(item => {
|
|
const fullPath = path.join(logsDirectory, item);
|
|
return fs.statSync(fullPath).isFile();
|
|
})
|
|
.map(file => {
|
|
const fullPath = path.join(logsDirectory, file);
|
|
const stats = fs.statSync(fullPath);
|
|
return {
|
|
name: file,
|
|
size: stats.size,
|
|
created: stats.birthtime,
|
|
modified: stats.mtime
|
|
};
|
|
})
|
|
.sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
|
|
res.json({ files, count: files.length });
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
// ==================== GRAPHS API ====================
|
|
const graphsCore = require('../datasetModels/graphsCore.js');
|
|
|
|
// Serve la pagina HTML dei grafici
|
|
router.get("/graphs", (req, res) => {
|
|
try {
|
|
const path = require("path");
|
|
const filePath = path.join(__dirname, "..", "public", "graphs.html");
|
|
res.status(200).sendFile(filePath);
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// API per ottenere dati grafici
|
|
router.get("/api/graphs", (req, res) => {
|
|
try {
|
|
const hours = parseInt(req.query.hours) || 24;
|
|
const data = graphsCore.getAllGraphsData(hours);
|
|
|
|
// Aggiungi valori attuali dalla cache condivisa
|
|
const sharedData = graphsCore.getSharedWeatherData();
|
|
data.current = {
|
|
temperature: sharedData.forecast?.temperature,
|
|
windSpeed: sharedData.forecast?.windSpeed,
|
|
waveHeight: sharedData.waves?.waveHeight,
|
|
humidity: sharedData.forecast?.humidity
|
|
};
|
|
|
|
// Aggiungi unità di misura
|
|
data.units = graphsCore.getUnits();
|
|
|
|
res.json(data);
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
// API per statistiche archivio
|
|
router.get("/api/graphs/stats", (req, res) => {
|
|
try {
|
|
const stats = graphsCore.getArchiveStats();
|
|
res.json(stats);
|
|
} catch (e) {
|
|
res.status(500).json({ error: e.message });
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function getOpenApiSpec() {
|
|
return {
|
|
openapi: "3.0.0",
|
|
info: { title: "MebWeather API Portal", version: "1.0.0" },
|
|
servers: [{ url: "/plugins/meb-weather" }],
|
|
paths: {
|
|
"/ping": {
|
|
get: {
|
|
summary: "Called /ping route",
|
|
responses: {
|
|
200: {
|
|
description: "OK",
|
|
content: {
|
|
"application/json": {
|
|
schema: {
|
|
type: "object",
|
|
properties: { message: { type: "string" } },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"/meb/suggestion": {
|
|
get: {
|
|
summary: "Pagina di test MEB Suggestion",
|
|
responses: {
|
|
200: {
|
|
description: "OK",
|
|
content: {
|
|
"text/html": {
|
|
schema: { type: "string" },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"/dataset/start": {
|
|
post: {
|
|
summary: "Avvia la registrazione dataset",
|
|
responses: {
|
|
200: {
|
|
description: "Registrazione avviata",
|
|
content: {
|
|
"application/json": {
|
|
schema: {
|
|
type: "object",
|
|
properties: {
|
|
success: { type: "boolean" },
|
|
message: { type: "string" }
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"/dataset/stop": {
|
|
post: {
|
|
summary: "Ferma la registrazione dataset",
|
|
responses: {
|
|
200: {
|
|
description: "Registrazione fermata",
|
|
content: {
|
|
"application/json": {
|
|
schema: {
|
|
type: "object",
|
|
properties: {
|
|
success: { type: "boolean" },
|
|
message: { type: "string" }
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"/dataset/restart": {
|
|
post: {
|
|
summary: "Riavvia la registrazione dataset",
|
|
responses: {
|
|
200: {
|
|
description: "Registrazione riavviata",
|
|
content: {
|
|
"application/json": {
|
|
schema: {
|
|
type: "object",
|
|
properties: {
|
|
success: { type: "boolean" },
|
|
message: { type: "string" }
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"/dataset/status": {
|
|
get: {
|
|
summary: "Ottieni lo stato della registrazione dataset",
|
|
responses: {
|
|
200: {
|
|
description: "Stato corrente",
|
|
content: {
|
|
"application/json": {
|
|
schema: {
|
|
type: "object",
|
|
properties: {
|
|
isRecording: { type: "boolean" },
|
|
recordCount: { type: "number" }
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"/dataset/files": {
|
|
get: {
|
|
summary: "Ottieni la lista dei file log salvati",
|
|
responses: {
|
|
200: {
|
|
description: "Lista file log",
|
|
content: {
|
|
"application/json": {
|
|
schema: {
|
|
type: "object",
|
|
properties: {
|
|
files: {
|
|
type: "array",
|
|
items: {
|
|
type: "object",
|
|
properties: {
|
|
name: { type: "string" },
|
|
size: { type: "number" },
|
|
created: { type: "string" },
|
|
modified: { type: "string" }
|
|
}
|
|
}
|
|
},
|
|
count: { type: "number" }
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
}
|
|
|
|
module.exports = { setupRoutes, getOpenApiSpec }; |