UNPKG

@lokalise/fastify-extras

Version:

Opinionated set of fastify plugins, commonly used in Lokalise

61 lines 1.96 kB
import fastify from 'fastify'; import fastifyMetrics from 'fastify-metrics'; import fp from 'fastify-plugin'; const METRICS_PORT = 9080; function plugin(app, opts, done) { // @ts-expect-error fixme void app.register(fastifyMetrics, { defaultMetrics: { enabled: true }, endpoint: null, clearRegisterOnInit: true, name: 'metrics', routeMetrics: { enabled: true }, }); try { const promServer = fastify({ loggerInstance: opts.logger ? opts.logger : undefined, logger: opts.logger === false ? false : undefined, disableRequestLogging: opts.disablePrometheusRequestLogging ?? true, }); promServer.route({ url: '/metrics', method: 'GET', logLevel: 'info', schema: { // hide route from swagger plugins hide: true, }, handler: async (_, reply) => { const metrics = await app.metrics.client.register.metrics(); return reply.type('text/plain').send(metrics); }, }); app.addHook('onClose', async () => { await promServer.close(); }); promServer .listen({ port: METRICS_PORT, host: opts.bindAddress, listenTextResolver: (address) => { return `Prometheus metrics server listening at ${address}`; }, }) .then(() => { done(); }) .catch((err) => { const logObject = opts.errorObjectResolver(err); promServer.log.error(logObject); done(new Error('Critical error when trying to launch metrics server')); }); } catch (err) { done(err); } } export const metricsPlugin = fp(plugin, { fastify: '5.x', name: 'metrics-plugin', }); //# sourceMappingURL=metricsPlugin.js.map