const { trackRequestWithTiming, trackRequest } = require('../../../maintenance/metrics'); const { logError } = require('../../../infrastructure/logger'); const { createErrorResponse } = require('../../../infrastructure/error_handler'); const { collectAdminStats, collectHistoricalMinutes } = require('../stats-collector'); async function handleStatsRoutes(req, res) { const urlPath = req.urlPath || new URL(req.url, `https://${req.headers.host}`).pathname; const method = req.method; if (method === 'GET' && urlPath === '/api/stats') { try { const startTime = Date.now(); const stats = await collectAdminStats(); const responseTime = Date.now() - startTime; trackRequestWithTiming('/api/stats', true, responseTime); res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(stats)); } catch (err) { logError('Admin', `Error in /api/stats: ${err.message}`, err); trackRequest('/api/stats', false); const errorResponse = createErrorResponse(err, 500); res.writeHead(errorResponse.statusCode, errorResponse.headers); res.end(errorResponse.body); } return true; } if (method === 'GET' && urlPath === '/api/stats/historical') { try { let minutes = 60; if (req.url.includes('?')) { const queryString = req.url.split('?')[1]; const params = new URLSearchParams(queryString); const minutesParam = params.get('minutes'); if (minutesParam) { minutes = parseInt(minutesParam, 10); } } const startTime = Date.now(); const historical = collectHistoricalMinutes(minutes); const responseTime = Date.now() - startTime; trackRequestWithTiming('/api/stats/historical', true, responseTime); res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(historical)); } catch (err) { logError('Admin', `Error in /api/stats/historical: ${err.message}`, err); trackRequest('/api/stats/historical', false); const errorResponse = createErrorResponse(err, 500); res.writeHead(errorResponse.statusCode, errorResponse.headers); res.end(errorResponse.body); } return true; } return false; } module.exports = { handleStatsRoutes };