55 أسطر
1.3 KiB
JavaScript
55 أسطر
1.3 KiB
JavaScript
const express = require('express');
|
|
const path = require('path');
|
|
|
|
const app = express();
|
|
const port = process.env.PORT || 3000;
|
|
|
|
let requestCount = 0;
|
|
|
|
app.use((req, res, next) => {
|
|
requestCount += 1;
|
|
const startedAt = process.hrtime.bigint();
|
|
|
|
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
|
|
res.on('finish', () => {
|
|
const responseTimeMs = Number(process.hrtime.bigint() - startedAt) / 1000000;
|
|
console.log(`${req.method} ${req.originalUrl} ${res.statusCode} ${responseTimeMs.toFixed(2)}ms`);
|
|
});
|
|
|
|
next();
|
|
});
|
|
|
|
app.get('/', (req, res) => {
|
|
res.json({
|
|
message: 'Ahmed Nasser SRE Assessment API'
|
|
});
|
|
});
|
|
|
|
app.get('/health', (req, res) => {
|
|
res.json({
|
|
status: 'UP',
|
|
uptime: Number(process.uptime().toFixed(2)),
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
});
|
|
|
|
app.get('/metrics', (req, res) => {
|
|
const memoryUsageMB = process.memoryUsage().rss / 1024 / 1024;
|
|
|
|
res.json({
|
|
status: 'UP',
|
|
uptime: Number(process.uptime().toFixed(2)),
|
|
requests: requestCount,
|
|
memoryUsageMB: Number(memoryUsageMB.toFixed(2)),
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
});
|
|
|
|
app.get('/dashboard', (req, res) => {
|
|
res.sendFile(path.join(__dirname, 'dashboard.html'));
|
|
});
|
|
|
|
app.listen(port, () => {
|
|
console.log(`Server running on port ${port}`);
|
|
}); |