Skip to main content

Fastify Setup

LoadFlux integrates as a Fastify plugin.

Basic setup​

import Fastify from "fastify";
import { loadfluxFastify } from "loadflux";

const app = Fastify();

app.register(loadfluxFastify({
auth: {
username: "admin",
password: "secret",
},
}));

// Your routes
app.get("/api/users", async () => {
return [{ id: 1, name: "Alice" }];
});

app.listen({ port: 3000 }, () => {
console.log("Server running on http://localhost:3000");
console.log("Dashboard at http://localhost:3000/loadflux");
});

Custom path​

app.register(loadfluxFastify({
path: "/monitor",
auth: { username: "admin", password: "secret" },
}));

Full example​

import Fastify from "fastify";
import { loadfluxFastify } from "loadflux";

const app = Fastify({ logger: true });

app.register(loadfluxFastify({
path: "/loadflux",
auth: {
username: process.env.LOADFLUX_USERNAME || "admin",
password: process.env.LOADFLUX_PASSWORD || "password",
},
retention: { days: 30 },
slowRequestThreshold: 1000,
excludeRoutes: ["/health"],
}));

app.get("/health", async () => "ok");
app.get("/api/users", async () => [{ id: 1, name: "Alice" }]);

app.listen({ port: 3000 });

How it works​

The Fastify plugin:

  1. Registers dashboard routes inside an encapsulated Fastify context with body parsing disabled (so the raw API handler can read POST bodies directly).
  2. Adds an onResponse hook to record metrics for all non-LoadFlux routes. Fastify provides reply.elapsedTime for precise request duration.

Route patterns are resolved via request.routeOptions.url, so parameterized routes like /api/users/:id are grouped correctly.