57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
import express from 'express';
|
|
import { AircallService } from '../services/aircall/AircallService.js';
|
|
|
|
export const createAircallRoutes = (config, logger) => {
|
|
const router = express.Router();
|
|
const aircallService = new AircallService(config);
|
|
|
|
router.get('/metrics/:timeRange?', async (req, res) => {
|
|
try {
|
|
const { timeRange = 'today' } = req.params;
|
|
const allowedRanges = ['today', 'yesterday', 'last7days', 'last30days', 'last90days'];
|
|
|
|
if (!allowedRanges.includes(timeRange)) {
|
|
return res.status(400).json({
|
|
error: 'Invalid time range',
|
|
allowedRanges
|
|
});
|
|
}
|
|
|
|
const metrics = await aircallService.getMetrics(timeRange);
|
|
|
|
res.json({
|
|
...metrics,
|
|
_meta: {
|
|
timeRange,
|
|
generatedAt: new Date().toISOString(),
|
|
dataPoints: metrics.daily_data?.length || 0
|
|
}
|
|
});
|
|
} catch (error) {
|
|
logger.error('Error fetching Aircall metrics:', error);
|
|
res.status(500).json({
|
|
error: 'Failed to fetch Aircall metrics',
|
|
message: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Health check endpoint
|
|
router.get('/health', (req, res) => {
|
|
const mongoConnected = !!aircallService.mongodb?.db;
|
|
const redisConnected = !!aircallService.redis?.isOpen;
|
|
|
|
const health = {
|
|
status: mongoConnected && redisConnected ? 'ok' : 'degraded',
|
|
service: 'aircall',
|
|
timestamp: new Date().toISOString(),
|
|
connections: {
|
|
mongodb: mongoConnected,
|
|
redis: redisConnected
|
|
}
|
|
};
|
|
res.json(health);
|
|
});
|
|
|
|
return router;
|
|
};
|