61 lines
1.3 KiB
TypeScript
61 lines
1.3 KiB
TypeScript
|
|
import { Server, RouteOptionsAccess } from "@hapi/hapi";
|
||
|
|
import { Prometheus } from "@promster/hapi";
|
||
|
|
|
||
|
|
interface StatusOptions {
|
||
|
|
path?: string;
|
||
|
|
auth?: RouteOptionsAccess;
|
||
|
|
}
|
||
|
|
|
||
|
|
const count = (statusCounter: any) => async () => {
|
||
|
|
statusCounter.inc();
|
||
|
|
return "Incremented metamigo_status_test counter";
|
||
|
|
};
|
||
|
|
|
||
|
|
const ping = async () => "OK";
|
||
|
|
|
||
|
|
const statusRoutes = (server: Server, opt?: StatusOptions) => {
|
||
|
|
const path = opt?.path || "/status";
|
||
|
|
const statusCounter = new Prometheus.Counter({
|
||
|
|
name: "metamigo_status_test",
|
||
|
|
help: "Test counter",
|
||
|
|
});
|
||
|
|
|
||
|
|
return [
|
||
|
|
{
|
||
|
|
method: "GET",
|
||
|
|
path: `${path}/ping`,
|
||
|
|
handler: ping,
|
||
|
|
options: {
|
||
|
|
auth: opt?.auth,
|
||
|
|
tags: ["api", "status", "ping"],
|
||
|
|
description: "Returns 200 and OK as the response.",
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
method: "GET",
|
||
|
|
path: `${path}/inc`,
|
||
|
|
handler: count(statusCounter),
|
||
|
|
options: {
|
||
|
|
auth: opt?.auth,
|
||
|
|
tags: ["api", "status", "prometheus"],
|
||
|
|
description: "Increments a test counter, for testing prometheus.",
|
||
|
|
},
|
||
|
|
},
|
||
|
|
];
|
||
|
|
};
|
||
|
|
|
||
|
|
const register = async (
|
||
|
|
server: Server,
|
||
|
|
options: StatusOptions
|
||
|
|
): Promise<void> => {
|
||
|
|
server.route(statusRoutes(server, options));
|
||
|
|
};
|
||
|
|
|
||
|
|
const StatusPlugin = {
|
||
|
|
register,
|
||
|
|
name: "status",
|
||
|
|
version: "0.0.1",
|
||
|
|
};
|
||
|
|
|
||
|
|
export default StatusPlugin;
|