"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DashboardController = void 0; const device_1 = require("../models/device"); const clientConnection_1 = require("../models/clientConnection"); const mqttMessage_1 = require("../models/mqttMessage"); class DashboardController { static async getOverview(req, res) { try { const [deviceCount, deviceStats, connectionCount, connectionStats, connectionEventStats, messageCount, messageTypeStats, recentConnections, recentMessages] = await Promise.all([ device_1.DeviceModel.getCount(), device_1.DeviceModel.getStatusStats(), clientConnection_1.ClientConnectionModel.getCount(), clientConnection_1.ClientConnectionModel.getConnectionStats(), clientConnection_1.ClientConnectionModel.getEventStats(), mqttMessage_1.MqttMessageModel.getCount(), mqttMessage_1.MqttMessageModel.getTypeStats(), clientConnection_1.ClientConnectionModel.getAll(10), mqttMessage_1.MqttMessageModel.getAll(10) ]); const deviceStatusCounts = { online: 0, offline: 0, unknown: 0 }; deviceStats.forEach(stat => { deviceStatusCounts[stat.status] = stat.count; }); const connectionEventCounts = { connected: 0, disconnected: 0 }; connectionStats.forEach(stat => { if (stat.connection_type in connectionEventCounts) { connectionEventCounts[stat.connection_type] = stat.count; } }); const messageTypeCounts = { publish: 0, subscribe: 0, unsubscribe: 0 }; messageTypeStats.forEach(stat => { messageTypeCounts[stat.message_type] = stat.count; }); const dailyStats = await clientConnection_1.ClientConnectionModel.getDailyStats(7); const hourlyStats = await mqttMessage_1.MqttMessageModel.getHourlyStats(24); res.status(200).json({ success: true, data: { summary: { totalDevices: deviceCount, onlineDevices: deviceStatusCounts.online, totalConnections: connectionCount, totalMessages: messageCount }, deviceStats: deviceStatusCounts, connectionStats: connectionEventCounts, messageStats: messageTypeCounts, dailyStats: dailyStats || [], hourlyStats: hourlyStats || [], recentConnections: recentConnections || [], recentMessages: recentMessages || [] } }); } catch (error) { console.error('获取仪表板概览数据失败:', error); res.status(500).json({ success: false, message: '获取仪表板概览数据失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getChartData(req, res) { try { const { type, period } = req.query; let data; switch (type) { case 'connections': const days = Number(period) || 7; data = await clientConnection_1.ClientConnectionModel.getDailyStats(days); break; case 'messages': const hours = Number(period) || 24; data = await mqttMessage_1.MqttMessageModel.getHourlyStats(hours); break; case 'deviceStatus': data = await device_1.DeviceModel.getStatusStats(); break; case 'messageTypes': data = await mqttMessage_1.MqttMessageModel.getTypeStats(); break; case 'qosLevels': data = await mqttMessage_1.MqttMessageModel.getQosStats(); break; case 'popularTopics': const limit = Number(period) || 10; data = await mqttMessage_1.MqttMessageModel.getPopularTopics(limit); break; case 'activeClients': const clientLimit = Number(period) || 10; data = await mqttMessage_1.MqttMessageModel.getActiveClients(clientLimit); break; default: res.status(400).json({ success: false, message: '无效的图表类型' }); return; } res.status(200).json({ success: true, data }); } catch (error) { console.error('获取图表数据失败:', error); res.status(500).json({ success: false, message: '获取图表数据失败', error: error instanceof Error ? error.message : '未知错误' }); } } static async getDeviceStats(req, res) { try { const stats = await device_1.DeviceModel.getDeviceStats(); res.status(200).json({ success: true, data: stats, message: '获取设备统计成功' }); } catch (error) { res.status(500).json({ success: false, message: '获取设备统计失败', error: error instanceof Error ? error.message : String(error) }); } } static async getSystemInfo(req, res) { try { const uptimeSeconds = process.uptime(); const days = Math.floor(uptimeSeconds / 86400); const hours = Math.floor((uptimeSeconds % 86400) / 3600); const minutes = Math.floor((uptimeSeconds % 3600) / 60); let uptimeStr = ''; if (days > 0) uptimeStr += `${days}天 `; if (hours > 0 || days > 0) uptimeStr += `${hours}小时 `; uptimeStr += `${minutes}分钟`; res.status(200).json({ success: true, data: { nodeVersion: process.version.replace('v', ''), uptime: uptimeStr, platform: process.platform, arch: process.arch, memoryUsage: process.memoryUsage() } }); } catch (error) { res.status(500).json({ success: false, message: '获取系统信息失败', error: error instanceof Error ? error.message : String(error) }); } } } exports.DashboardController = DashboardController; //# sourceMappingURL=dashboardController.js.map