Skip to content

Commit 0360cba

Browse files
committed
Add prometheus on backend-javascript
1 parent 40ded7b commit 0360cba

File tree

6 files changed

+78
-0
lines changed

6 files changed

+78
-0
lines changed

backend-javascript/package-lock.json

Lines changed: 38 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend-javascript/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
"mysql2": "3.14.2",
8282
"nodemon": "3.1.10",
8383
"pg": "8.16.3",
84+
"prom-client": "^15.1.3",
8485
"swagger-jsdoc": "6.2.8",
8586
"swagger-ui-express": "5.0.1",
8687
"uuid": "^11.1.0",

backend-javascript/src/app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import requestLogger from './infrastructure/logger/request-logger.js';
1616

1717
import fakeAuth from './middlewares/auth/fake-auth.js';
1818

19+
import metricsRoutes from './routes/metrics.routes.js';
1920
import healthRoutes from './routes/health.routes.js';
2021
import versionRoutes from './routes/version.routes.js';
2122
import swaggerRoutes from './routes/swagger.routes.js';
@@ -38,6 +39,7 @@ if (['development', 'test'].includes(appConfig.app.nodeEnv)) {
3839
app.use(correlationIdMiddleware);
3940
app.use(requestLogger);
4041

42+
app.use(metricsRoutes);
4143
app.use(healthRoutes);
4244

4345
app.use(versionRoutes);

backend-javascript/src/infrastructure/logger/request-logger.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import logger from './logger.js';
2+
import { incrementHttpRequests } from '../metrics/metrics.js';
23

34
const requestLogger = (req, res, next) => {
5+
6+
res.on('finish', () => {
7+
incrementHttpRequests(req.method, req.originalUrl, res.statusCode);
8+
});
9+
410
logger.info(`[${req.method}] ${req.originalUrl}`, {
511
method: req.method,
612
route: req.originalUrl,
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import client from 'prom-client';
2+
3+
client.collectDefaultMetrics();
4+
5+
const httpRequestCounter = new client.Counter({
6+
name: 'http_requests_total',
7+
help: 'Nombre total de requêtes HTTP',
8+
labelNames: ['method', 'route', 'status'],
9+
});
10+
11+
function incrementHttpRequests(method, route, status) {
12+
httpRequestCounter.inc({ method, route, status });
13+
}
14+
15+
export { client, incrementHttpRequests };
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import express from 'express';
2+
import { client } from '../infrastructure/metrics/metrics.js';
3+
4+
const router = express.Router();
5+
6+
router.get('/metrics', async (req, res) => {
7+
res.set('Content-Type', client.register.contentType);
8+
const metric = await client.register.getSingleMetricAsString('http_requests_total');
9+
res.end(metric);
10+
11+
// res.set('Content-Type', client.register.contentType);
12+
// res.end(await client.register.metrics());
13+
14+
});
15+
16+
export default router;

0 commit comments

Comments
 (0)