65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
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);
|
|
});
|