@vaibhavkaul69/monitoring-logger
Version:
Reusable monitoring and logging middleware for backend servicses
37 lines (30 loc) • 1.03 kB
JavaScript
require("dotenv").config();
const client = require("prom-client");
const responseTime = require("response-time");
client.collectDefaultMetrics();
const reqResTime = new client.Histogram({
name: "http_request_duration_seconds",
help: "Duration of HTTP requests in seconds",
labelNames: ["route", "status_code"],
buckets: [0.1, 0.5, 1, 1.5, 2, 5],
});
const getOnlyRouteFromRequest = (url) => {
// Customize this based on your use case
return url.split("?")[0];
};
const monitoringMiddleware = (app) => {
app.use(
responseTime((req, res, time) => {
const timeInSeconds = time / 1000;
const route = getOnlyRouteFromRequest(req.originalUrl);
const statusCode = res.statusCode;
reqResTime.labels(route, statusCode).observe(timeInSeconds);
})
);
app.get("/metrics", async (req, res) => {
res.setHeader("Content-Type", client.register.contentType);
const metrics = await client.register.metrics();
res.send(metrics);
});
};
module.exports = monitoringMiddleware;