UNPKG

jenkins-monitor

Version:
43 lines (31 loc) 1.16 kB
'use strict'; const async = require('async'); const redis = require('ioredis').createClient(6379, 'redis'); const OFFLINE_THRESH = parseInt(process.env.OFFLINE_THRESH || 3, 10); module.exports = redis; module.exports.jenkinsChanged = function jenkinsChanged(nodes, cb) { async.filter(nodes, (node, done) => { const key = `node:${node.name}`; redis.hget(key, 'offline', (redisErr1, offline) => { if (redisErr1) { return done(redisErr1); } const wasOffline = parseInt(offline || 0, 10); const isOffline = parseInt(node.offline || 0, 10); const newOffline = (isOffline === 0 ? 0 : wasOffline + 1); return redis.hset(key, 'offline', newOffline, (redisErr2) => { if (redisErr2) { return done(redisErr2); } // Node has come back online if (newOffline === 0 && wasOffline >= OFFLINE_THRESH) { return done(true); } // Node has become online if (newOffline === OFFLINE_THRESH) { return done(true); } // Node has not changed return done(false); }); }); }, (filteredNodes) => { cb(null, filteredNodes); }); };