UNPKG

judoscale-node-core

Version:

Core dependencies for NodeJS adapters for the JudoScale autoscaling add-on for Heroku

56 lines (44 loc) 1.46 kB
const Api = require('./api') const Report = require('./report') const forever = require('async/forever') class Reporter { constructor() { this.started = this.hasStarted() || false } start(config, adapters) { if (!this.hasStarted()) { this.started = true if (!config.api_base_url) { config.logger.info(`[Judoscale] Reporter not started: JUDOSCALE_URL is not set`) return } const adapterMsg = adapters.map((a) => a.identifier).join(', ') config.logger.info( `[Judoscale] Reporter starting, will report every ${config.report_interval_seconds} seconds. Adapters: [${adapterMsg}]` ) forever((next) => { setTimeout(() => { this.report(adapters, config).then(() => { next() }) }, config.report_interval_seconds * 1000) }) } } stop() { this.started = false } hasStarted() { return this.started } async report(adapters, config) { const collectors = adapters.map((a) => a.collector) const metrics = (await Promise.all(collectors.map((collector) => collector.collect()))).flat() const report = new Report(adapters, config, metrics) config.logger.info(`[Judoscale] Reporting ${report.metrics.length} metrics`) new Api(config).reportMetrics(report.payload()).then(async () => { config.logger.debug('[Judoscale] Reported successfully') }) } } module.exports = Reporter