Aggiunta stili CSS per Kiosk, struttura HTML per la Mappa e Riferimenti ai Sensori
• Creato un nuovo file CSS per gli stili del chiosco (kiosk) con variabili, stili per le schede (card) e animazioni. • Aggiunto un file HTML per l'interfaccia della mappa utilizzando Mapbox, inclusi gli stili e il JavaScript per le funzionalità della mappa. • Introdotto un file JSON per i riferimenti ai sensori, definendo percorsi ed elementi per i dati di temperatura, vento, onde, posizione, batteria, motore e sistema. Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
27
plugin/routes/collection/cloud.js
Normal file
27
plugin/routes/collection/cloud.js
Normal file
@@ -0,0 +1,27 @@
|
||||
const router = require('express').Router();
|
||||
const {
|
||||
FORECAST_CURRENT,
|
||||
FORECAST_HOURLY,
|
||||
MARINE_CURRENT,
|
||||
MARINE_HOURLY,
|
||||
LOG_PATHS
|
||||
} = require('../../rules');
|
||||
|
||||
const api_url = process.env.API_URL || 'http://api-services:3003';
|
||||
|
||||
router.get('/status', (req, res) => {
|
||||
res.json({ cloud: 'active', api: api_url, version: '2.0' });
|
||||
});
|
||||
|
||||
// Ritorna la configurazione statica corrente
|
||||
router.get('/config', (req, res) => {
|
||||
res.json({
|
||||
forecast_current: FORECAST_CURRENT,
|
||||
forecast_hourly: FORECAST_HOURLY,
|
||||
marine_current: MARINE_CURRENT,
|
||||
marine_hourly: MARINE_HOURLY,
|
||||
log_paths: LOG_PATHS
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
16
plugin/routes/collection/dashboard.js
Normal file
16
plugin/routes/collection/dashboard.js
Normal file
@@ -0,0 +1,16 @@
|
||||
const router = require('express').Router();
|
||||
const express = require('express');
|
||||
const path = require('path')
|
||||
|
||||
|
||||
const kioskPath = path.join(__dirname, '../../tools/kiosk');
|
||||
|
||||
router.use('/', express.static(kioskPath));
|
||||
router.get('/', (req, res) => {
|
||||
res.sendFile(path.join(kioskPath, 'dashboard.html'));
|
||||
});
|
||||
|
||||
|
||||
router.get('/api/', (req, res) => {});
|
||||
|
||||
module.exports = router;
|
||||
38
plugin/routes/collection/data.js
Normal file
38
plugin/routes/collection/data.js
Normal file
@@ -0,0 +1,38 @@
|
||||
const router = require('express').Router();
|
||||
const db = require('../../config/skFlow')
|
||||
|
||||
const config = require('../../config/configManager.js')
|
||||
|
||||
router.get('/', (req, res) => {
|
||||
const { path } = req.query;
|
||||
const data = db.get(path);
|
||||
res.json(data);
|
||||
});
|
||||
|
||||
router.get('/', (req, res) => {
|
||||
const { source } = req.query;
|
||||
const data = db.getBySource(source);
|
||||
res.json(data);
|
||||
});
|
||||
|
||||
router.get('/info', (req, res) => {
|
||||
const info = {
|
||||
|
||||
telegram: config.getTelegramToken(),
|
||||
|
||||
sensor: {
|
||||
name: config.getSensorName(),
|
||||
code: config.getSensorCode()
|
||||
},
|
||||
|
||||
other: {
|
||||
api_url: process.env.API_URL,
|
||||
realtime_url: process.env.REALTIME_URL,
|
||||
realtime_socket_url: process.env.REALTIME_SOCKET_URL,
|
||||
reconnect_delay: config.getReconnectDelay()
|
||||
}
|
||||
}
|
||||
res.json(info);
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
34
plugin/routes/collection/kiosk.js
Normal file
34
plugin/routes/collection/kiosk.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const router = require('express').Router();
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const configManager = require('../../config/configManager.js');
|
||||
|
||||
const kioskPath = path.join(__dirname, '../../tools/kiosk');
|
||||
const htmlFile = path.join(kioskPath, 'kiosk.html');
|
||||
|
||||
router.use('/', express.static(kioskPath));
|
||||
|
||||
router.get('/', (req, res) => {
|
||||
const apiUrl = process.env.API_URL || 'https://api.mebboat.it';
|
||||
const realtimeUrl = process.env.REALTIME_URL || 'https://realtime.mebboat.it';
|
||||
const realtimeWsUrl = process.env.REALTIME_SOCKET_URL || 'wss://realtime.mebboat.it';
|
||||
const sensorCode = configManager.getSensorCode();
|
||||
const sensorName = configManager.getSensorName();
|
||||
|
||||
const esc = (s) => String(s || '').replace(/"/g, '"');
|
||||
const metas = `
|
||||
<meta name="api-url" content="${esc(apiUrl)}">
|
||||
<meta name="realtime-url" content="${esc(realtimeUrl)}">
|
||||
<meta name="realtime-ws-url" content="${esc(realtimeWsUrl)}">
|
||||
<meta name="sensor-code" content="${esc(sensorCode)}">
|
||||
<meta name="sensor-name" content="${esc(sensorName)}">
|
||||
`;
|
||||
let html;
|
||||
try { html = fs.readFileSync(htmlFile, 'utf8'); }
|
||||
catch (e) { return res.status(500).send('kiosk.html not found'); }
|
||||
html = html.replace('</head>', metas + '</head>');
|
||||
res.set('Content-Type', 'text/html').send(html);
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
9
plugin/routes/collection/map.js
Normal file
9
plugin/routes/collection/map.js
Normal file
@@ -0,0 +1,9 @@
|
||||
const router = require('express').Router();
|
||||
const path = require('path')
|
||||
//Endpoints per controllare lo stato di un servizio di mappe da implementare poi..
|
||||
|
||||
router.get('/', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, '../tools/map/map.html'));
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
55
plugin/routes/collection/rec.js
Normal file
55
plugin/routes/collection/rec.js
Normal file
@@ -0,0 +1,55 @@
|
||||
const core = require('../../cores/logs.local')
|
||||
const router = require('express').Router();
|
||||
|
||||
|
||||
router.post('/start', async (req, res) => {
|
||||
const { name } = req.body;
|
||||
const session = await core.startRecording(name);
|
||||
res.status(200).send({
|
||||
status: 'Started',
|
||||
session: session
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/', (req, res) => {
|
||||
const session = core.getSession();
|
||||
if (session) {
|
||||
res.status(200).send(session);
|
||||
} else {
|
||||
res.status(404).send({ session: 'Nessuna sessione attiva' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/list', async (req, res) => {
|
||||
const logs = await core.listLogs();
|
||||
res.status(200).send(logs);
|
||||
});
|
||||
|
||||
router.get('/:log', async (req, res) => {
|
||||
const { log } = req.params
|
||||
const data = await core.getLog(log);
|
||||
if (data) {
|
||||
res.status(200).send(data);
|
||||
} else {
|
||||
res.status(404).send({ error: 'Log non trovato' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/download/:name', (req, res) => {
|
||||
const name = req.params.name;
|
||||
const filePath = core.getLogFile(name);
|
||||
if (filePath) {
|
||||
res.download(filePath);
|
||||
} else {
|
||||
res.status(404).send({ error: 'File non trovato' });
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/stop', async (req, res) => {
|
||||
await core.stopRecording();
|
||||
res.status(200).send({
|
||||
status: 'Stopped'
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user