الملفات
ghaymah-exam-AhmedNasser-SRE/q1-deploy-monitor/app.js

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}`);
});