From 2371e43b83697dee248d57605c698080ee36de92 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Wed, 31 Jul 2019 17:02:56 +0200 Subject: [PATCH] feat(scheduler): prepare future fetaure work --- index.js | 13 ++++++++----- lib/get-infos.js | 3 ++- lib/github-queue.js | 3 ++- lib/scheduler.js | 10 ++++++++++ 4 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 lib/scheduler.js diff --git a/index.js b/index.js index c597ba5c..b76a0ed9 100644 --- a/index.js +++ b/index.js @@ -11,6 +11,7 @@ const Queue = require('promise-queue') const env = require('./lib/env') const dbs = require('./lib/dbs') const statsd = require('./lib/statsd') +const { connect, cron } = require('./lib/scheduler') const enterpriseSetup = require('./lib/enterprise-setup') require('./lib/rollbar') @@ -62,11 +63,12 @@ require('./lib/rollbar') const q = queues[queueId] = queues[queueId] || new Queue(1, Infinity) return q.add(() => worker(job)) } - channel.consume(env.EVENTS_QUEUE_NAME, consume) - channel.consume(env.JOBS_QUEUE_NAME, consume) + + // connect queues with consume function + connect(channel, consume) if (env.NODE_ENV !== 'testing') { - setInterval(function collectAccountQueueStats () { + cron('collectAccountQueueStats', function collectAccountQueueStats () { const queueKeys = Object.keys(queues) statsd.gauge('queues.account-jobs', queueKeys.length) queueKeys.map((queueId) => { @@ -96,9 +98,10 @@ require('./lib/rollbar') console.log(e) } } + setTimeout(scheduleReminders, 5000) - setInterval(scheduleReminders, 24 * 60 * 60 * 1000) - setInterval(scheduleMonorepoReleaseSupervisor, 5 * 60 * 1000) + cron('reminders', scheduleReminders, 24 * 60 * 60 * 1000) + cron('monorepoReleaseSupervisor', scheduleMonorepoReleaseSupervisor, 5 * 60 * 1000) const isBad = (data) => { const values = Object.values(data) diff --git a/lib/get-infos.js b/lib/get-infos.js index 650846ed..74e97a36 100644 --- a/lib/get-infos.js +++ b/lib/get-infos.js @@ -6,6 +6,7 @@ const githubFromGit = require('github-url-from-git') const getRelease = require('./get-release') const getDiffCommits = require('./get-diff-commits') const statsd = require('../lib/statsd') +const { cron } = require('../lib/scheduler') // returns a url object if you pass in a GitHub repositoryURL, // returns a string with an npm URL if you just pass in a dependency name @@ -70,7 +71,7 @@ function resolver ({ dependency, version, diffBase }) { const memoizedGetInfos = _.memoize(getInfos, resolver) if (process.env.NODE_ENV !== 'testing') { - setInterval(() => { + cron('get-info:stats', () => { statsd.gauge('get_infos_cached', memoizedGetInfos.cache.size) }, 60000) } diff --git a/lib/github-queue.js b/lib/github-queue.js index 99cbb2ce..598729c2 100644 --- a/lib/github-queue.js +++ b/lib/github-queue.js @@ -6,6 +6,7 @@ const Log = require('gk-log') const statsd = require('./statsd') const getToken = require('./get-token') const Github = require('../lib/github') +const { cron } = require('../lib/scheduler') const readQueues = {} const writeQueues = {} @@ -132,7 +133,7 @@ function read (installationId, gen) { } if (env.NODE_ENV !== 'testing') { - setInterval( + cron('github-queue:stats', function collectGitHubQueueStats () { const readQueueKeys = Object.keys(readQueues) const writeQueueKeys = Object.keys(writeQueues) diff --git a/lib/scheduler.js b/lib/scheduler.js new file mode 100644 index 00000000..c08be7ee --- /dev/null +++ b/lib/scheduler.js @@ -0,0 +1,10 @@ +const env = require('./env') + +module.exports.connect = (channel, consume) => { + channel.consume(env.EVENTS_QUEUE_NAME, consume) + channel.consume(env.JOBS_QUEUE_NAME, consume) +} + +module.exports.cron = (_name, job, interval) => { + setInterval(job, interval) +}