UNPKG

grunt-service-status

Version:

hit the service-status endpoint to verify deployment

115 lines (93 loc) 3.15 kB
module.exports = function(grunt){ var request = require('request'), async = require('async'); var buildUrl = function(baseUrl, monitorName){ return baseUrl + '/' + monitorName; }; var verify = function(url, done){ grunt.verbose.writeln('Making request: ' + url); var res = request({ url: url, headers: { 'user-agent': 'grunt-service-status' } }, function(err, res, body){ if(err){ done(err); } if(res.statusCode !== 200){ grunt.warn('status code was: ' + res.statusCode); } var result = JSON.parse(body); var status = (result.status || result.Status || "").toLowerCase(); var monitorName = (result.monitorname || result.MonitorName); if(!status || status === 'failed'){ grunt.log.error(monitorName + ': ' + status + ' (' + result.response + ')'); return done(new Error('failed service-status check: ' + JSON.stringify(result))); } grunt.log.ok(monitorName + ': ' + status + ' (' + result.response + ')'); done(); }); }; var warmUp = function(options, done){ var res = {}; var url = options.warmUpUrl || options.baseUrl; grunt.verbose.writeln('[WarmUp] Making request: ' + url); res = request({ url: url, headers: { 'user-agent': 'grunt-service-status' } }, function(err, res, body){ if(err){ grunt.verbose.writeln('[WarmUp]' + JSON.stringify(err)); } if(res.statusCode){ grunt.verbose.writeln('[WarmUp] statusCode: ' + res.statusCode); } if(body){ grunt.verbose.writeln('[WarmUp] ' + body); } done(); }); }; var warmUps = function(options, done){ var ws = []; for(var i=0; i<options.warmUps; i++){ ws.push(warmUp); } async.eachSeries(ws, function(w, cb){ w(options, cb); }, function(err){ if(err){ grunt.fail.fatal(err); } done(); }); }; var monitors = function(options, done){ async.eachSeries(options.monitors, function(m, cb){ verify(buildUrl(options.baseUrl, m.monitorname || m), cb); }, function(err){ if(err){ grunt.fail.fatal(err); } done(); }); }; grunt.registerMultiTask('service-status', function(){ var done = this.async(); var options = this.options({ baseUrl: 'http://127.0.0.1/service-status/', monitors: [], warmUps: 0, waitAfterWarmUp: 0 }); grunt.verbose.writeflags(options); warmUps(options, function(){ setTimeout(function(){ monitors(options, done); }, options.waitAfterWarmUp); }); }); };