Files
OLD-server-architecture/realtime/src/index.js
Giuseppe Raffa 0ce879aa44 feat: Add new API endpoints and HTML pages for ML model management
- Implemented HTML pages for datasets, models, training, testing, and results.
- Created API endpoints for managing repositories, results, tests, and training sessions.
- Added functionality for streaming training progress via Server-Sent Events (SSE).
- Introduced a Dockerfile for the ML runner with necessary dependencies.
- Developed an SDK for user code execution within the runner container.
- Enhanced CSS styles for improved UI layout and navigation.
- Established a layout template for consistent HTML structure across pages.
- Added JavaScript for dynamic interactions on the models page.
- Implemented WebSocket handling for real-time communication with kiosk devices and controllers.
- Implemented model registration and management API at /api/models
- Added Gitea proxy API for repository interactions at /api/repos
- Created results API for listing and comparing training results at /api/results
- Developed training management API for enqueueing and retrieving training jobs at /api/trainings
- Introduced SSE endpoint for live training progress updates
- Added HTML pages for models, datasets, and training management
- Created a Dockerfile for the ML runner with necessary dependencies
- Developed SDK for user code execution within the runner container
- Enhanced CSS styles for improved UI/UX
- Implemented WebSocket communication for real-time device and controller interactions in the kiosk system
2026-04-28 09:24:38 +02:00

58 lines
1.6 KiB
JavaScript

const express = require('express');
const crypto = require('crypto');
const parser = require('cookie-parser');
const app = express();
const db = require('./store/db')
const redis = require('./store/redis');
const wsHandler = require('./ws/handler');
app.use(express.json());
app.use(parser());
// CORS — consenti richieste dalla console e altri client browser
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
if (req.method === 'OPTIONS') return res.sendStatus(204);
next();
});
// DATABASE POSTGRESQL
app.get('/', (req, res) => {
res.redirect('/health');
});
app.get('/health', (req, res) => {
const sensorsDB = db.checkConnection('sensors');
const dataDB = db.checkConnection('data');
res.json({
status: 'ok',
databases: {
sensors: sensorsDB ? 'connected' : 'disconnected',
data: dataDB ? 'connected' : 'disconnected'
},
redis: redis.checkRedis() ? 'connected' : 'disconnected',
version: process.env.VERSION,
build_number: process.env.VERSION_BUILD
});
});
app.use('/connect', require('./routes/connect'));
app.use('/sensors', require('./routes/sensors'));
app.use('/sessions', require('./routes/sessions'));
app.use('/rules', require('./routes/rules'));
const server = app.listen(3000, '0.0.0.0', () => {
console.log(`Realtime started`);
});
wsHandler.setup(server);
// deve essere caricato DOPO setup per avere kioskRelay pronto
app.use('/kiosk', require('./routes/kiosk'));