const express = require('express'); const { protect } = require('../middleware/auth'); const database = require('../config/database'); const logger = require('../utils/logger'); const router = express.Router(); // Get dashboard overview router.get('/dashboard', protect, async (req, res) => { try { // Get total devices const [deviceCount] = await database.query('SELECT COUNT(*) as count FROM devices'); // Get online devices const [onlineDevices] = await database.query("SELECT COUNT(*) as count FROM devices WHERE status = 'online'"); // Get total alerts in last 24h const [alerts24h] = await database.query( 'SELECT COUNT(*) as count FROM alerts WHERE created_at >= DATE_SUB(NOW(), INTERVAL 24 HOUR)' ); // Get critical alerts const [criticalAlerts] = await database.query( "SELECT COUNT(*) as count FROM alerts WHERE severity = 'critical' AND status = 'active'" ); const overview = { total_devices: deviceCount.count, online_devices: onlineDevices.count, offline_devices: deviceCount.count - onlineDevices.count, alerts_24h: alerts24h.count, critical_alerts: criticalAlerts.count, uptime_percentage: deviceCount.count > 0 ? ((onlineDevices.count / deviceCount.count) * 100).toFixed(2) : 0 }; res.json({ success: true, data: overview }); } catch (error) { logger.error('Get dashboard overview error:', error); res.status(500).json({ success: false, message: 'Failed to get dashboard overview' }); } }); // Get device performance metrics router.get('/performance', protect, async (req, res) => { try { const { period = '24h' } = req.query; let timeFilter; switch (period) { case '1h': timeFilter = 'DATE_SUB(NOW(), INTERVAL 1 HOUR)'; break; case '24h': timeFilter = 'DATE_SUB(NOW(), INTERVAL 24 HOUR)'; break; case '7d': timeFilter = 'DATE_SUB(NOW(), INTERVAL 7 DAY)'; break; default: timeFilter = 'DATE_SUB(NOW(), INTERVAL 24 HOUR)'; } // Get data points count const [dataPoints] = await database.query( `SELECT COUNT(*) as count FROM device_data WHERE created_at >= ${timeFilter}` ); // Get average data size const [avgDataSize] = await database.query( `SELECT AVG(JSON_LENGTH(raw_data)) as avg_size FROM device_data WHERE created_at >= ${timeFilter}` ); const performance = { period, data_points: dataPoints.count, avg_data_size: avgDataSize.avg_size || 0, data_rate_per_hour: period === '1h' ? dataPoints.count : Math.round(dataPoints.count / 24) }; res.json({ success: true, data: performance }); } catch (error) { logger.error('Get performance metrics error:', error); res.status(500).json({ success: false, message: 'Failed to get performance metrics' }); } }); module.exports = router;