UNPKG

hirefire-resource

Version:

HireFire integration library for Node.js applications

70 lines (60 loc) 1.73 kB
const HireFire = require(".") const VERSION = require("./version") class RequestInfo { constructor(path, requestStartTime = null, token = null) { this.path = path this.requestStartTime = requestStartTime ? parseInt(requestStartTime, 10) : null this.token = token } } async function request(requestInfo) { await processRequestQueueTime(requestInfo) if (matchesHireFirePath(requestInfo) || matchesInfoPath(requestInfo)) { return { status: 200, headers: { "Content-Type": "application/json", "Cache-Control": "must-revalidate, private, max-age=0", "HireFire-Resource": `Node-${VERSION}`, }, body: await Promise.all( HireFire.configuration.workers.map(async (worker) => ({ name: worker.name, value: await worker.value(), })), ), } } return null } function matchesHireFirePath(requestInfo) { return ( process.env.HIREFIRE_TOKEN && requestInfo.path === "/hirefire" && requestInfo.token === process.env.HIREFIRE_TOKEN ) } function matchesInfoPath(requestInfo) { return ( process.env.HIREFIRE_TOKEN && requestInfo.path === `/hirefire/${process.env.HIREFIRE_TOKEN}/info` ) } async function processRequestQueueTime(requestInfo) { if ( process.env.HIREFIRE_TOKEN && HireFire.configuration.web && requestInfo.requestStartTime ) { await HireFire.configuration.web.startDispatcher() await HireFire.configuration.web.addToBuffer( calculateRequestQueueTime(requestInfo), ) } } function calculateRequestQueueTime(requestInfo) { return Math.max(Date.now() - requestInfo.requestStartTime, 0) } module.exports = { RequestInfo, request }