const express = require('express'); const cors = require('cors'); const { createClient } = require('redis'); const analyticsRoutes = require('./routes/analytics.routes'); const app = express(); const port = process.env.GOOGLE_ANALYTICS_PORT || 3007; // Redis client setup const redisClient = createClient({ url: process.env.REDIS_URL || 'redis://localhost:6379' }); redisClient.on('error', (err) => console.error('Redis Client Error:', err)); redisClient.on('connect', () => console.log('Redis Client Connected')); // Connect to Redis (async () => { try { await redisClient.connect(); } catch (err) { console.error('Redis connection error:', err); } })(); // Middleware app.use(cors()); app.use(express.json()); // Make Redis client available in requests app.use((req, res, next) => { req.redisClient = redisClient; next(); }); // Routes app.use('/api/analytics', analyticsRoutes); // Error handling middleware app.use((err, req, res, next) => { console.error('Server error:', err); res.status(err.status || 500).json({ success: false, message: err.message || 'Internal server error', error: process.env.NODE_ENV === 'production' ? err : {} }); }); // Start server app.listen(port, () => { console.log(`Google Analytics server running on port ${port}`); }); // Handle graceful shutdown process.on('SIGTERM', async () => { console.log('SIGTERM received. Shutting down gracefully...'); await redisClient.quit(); process.exit(0); }); process.on('SIGINT', async () => { console.log('SIGINT received. Shutting down gracefully...'); await redisClient.quit(); process.exit(0); });