UNPKG

judoscale-express

Version:

ExpressJS package for the Judoscale autoscaler

41 lines (30 loc) 1.35 kB
const { Judoscale, MetricsStore, requestMetrics, UtilizationTracker, WebMetricsCollector } = require('judoscale-node-core') const packageInfo = require('../package.json') const expressPackageInfo = require('express/package.json') const metricsStore = new MetricsStore() const utilizationTracker = new UtilizationTracker() function middleware(judoscale) { return (req, res, next) => { utilizationTracker.start() utilizationTracker.incr() const queueTime = requestMetrics.queueTimeFromHeaders(req.headers, new Date()) const requestId = requestMetrics.requestId(req.headers) if (queueTime !== null) { metricsStore.push('qt', queueTime) judoscale.config.logger.debug(`[Judoscale] queue_time=${queueTime}ms request_id=${requestId}`) } const startTime = requestMetrics.monotonicTime() res.on('finish', () => { const appTime = requestMetrics.elapsedTime(startTime) metricsStore.push('at', appTime) judoscale.config.logger.debug(`[Judoscale] app_time=${appTime}ms request_id=${requestId}`) utilizationTracker.decr() }) next() } } Judoscale.registerAdapter('judoscale-express', new WebMetricsCollector(metricsStore, utilizationTracker), { adapter_version: packageInfo.version, runtime_version: expressPackageInfo.version, }) module.exports = { Judoscale, middleware }