53 lines
1.4 KiB
JavaScript
Executable File
53 lines
1.4 KiB
JavaScript
Executable File
import express from "express";
|
|
import prometheus from "prom-client";
|
|
import dotenv from "dotenv";
|
|
import pkg from "pg";
|
|
|
|
dotenv.config();
|
|
|
|
const { Client } = pkg;
|
|
|
|
// --- Connexion PostgreSQL ---
|
|
const db = new Client({
|
|
host: process.env.DB_HOST,
|
|
user: process.env.DB_USER,
|
|
password: process.env.DB_PASS,
|
|
database: process.env.DB_NAME,
|
|
});
|
|
|
|
db.connect()
|
|
.then(() => console.log("✅ Connecté à PostgreSQL avec succès"))
|
|
.catch(err => console.error("❌ Erreur de connexion à PostgreSQL :", err));
|
|
|
|
// --- App Express ---
|
|
const app = express();
|
|
const port = process.env.PORT || 4000;
|
|
app.use(express.json());
|
|
|
|
// --- Prometheus ---
|
|
const register = new prometheus.Registry();
|
|
prometheus.collectDefaultMetrics({ register });
|
|
|
|
const httpRequestsTotal = new prometheus.Counter({
|
|
name: "http_requests_total",
|
|
help: "Nombre total de requêtes HTTP",
|
|
labelNames: ["method", "route", "status"],
|
|
registers: [register],
|
|
});
|
|
|
|
// Route API
|
|
app.get("/api", (req, res) => {
|
|
httpRequestsTotal.labels("GET", "/api", "200").inc();
|
|
res.json({ message: "Bienvenue sur The Tip Top API!" });
|
|
});
|
|
|
|
// Endpoint de métriques Prometheus
|
|
app.get("/metrics", async (req, res) => {
|
|
res.set("Content-Type", register.contentType);
|
|
res.end(await register.metrics());
|
|
});
|
|
|
|
app.listen(port, "0.0.0.0", () => {
|
|
console.log(`🚀 Backend The Tip Top lancé sur le port ${port}`);
|
|
});
|