Skip to content

Instantly share code, notes, and snippets.

@red010182
Last active November 4, 2016 11:22
Show Gist options
  • Save red010182/17214f2ca94265ecbe9d0f155f4ce8ec to your computer and use it in GitHub Desktop.
Save red010182/17214f2ca94265ecbe9d0f155f4ce8ec to your computer and use it in GitHub Desktop.
An implementation of pinger-async-await.js in iced-coffeescript (originally: https://hackernoon.com/an-ode-to-async-await-7da2dd3c2056#.46ow5v6g9)
request = require 'request'
delay = (sec, func) -> setTimeout func, sec*1000
repeat = (sec, func) -> setInterval func, sec*1000
servers = [
{ url: "http://www.sevengramscaffe.com", failures: 0 },
{ url: "http://www.hernanparra.co", failures: 0 },
{ url: "http://www.thetimeandyou.com", failures: 0 },
{ url: "http://www.luchoycarmelo.com", failures: 0 }
]
repeatTimes = 3
delaySeconds = 1
pingOneServer = (url, times, delaySeconds, callback) ->
delayPing = (sec, url, callback) -> delay sec, -> request url, (err, res, body) -> callback(err,res,body)
repeated = 0
failures = 0
for i in [0...times]
delayPing delaySeconds, url, (err, res, body) ->
failures += 1 if err or res.statusCode isnt 200
callback failures if ++repeated is times
pingServers = (servers) ->
( (server) -> pingOneServer server.url, repeatTimes, delaySeconds, (failures) ->
console.log "#{server.url} fails #{failures} times"
)(server) for server in servers
pingServers servers
request = require 'request'
delay = (sec, func) -> setTimeout func, sec*1000
repeat = (sec, func) -> setInterval func, sec*1000
servers = [
{ url: "http://www.sevengramscaffe.com", failures: 0 },
{ url: "http://www.hernanparra.co", failures: 0 },
{ url: "http://www.thetimeandyou.com", failures: 0 },
{ url: "http://www.luchoycarmelo.com", failures: 0 }
]
repeatTimes = 3
delaySeconds = 1
pingOneServer = (url, times, delaySeconds, callback) ->
delayPing = (sec, url, callback) -> delay sec, -> request url, (err, res, body) -> callback(err,res,body)
failures = 0
for i in [0...times]
await delayPing delaySeconds, url, defer err, res, body
failures = failures + 1 if err or res.statusCode isnt 200
callback failures
pingServers = (servers) ->
await pingOneServer server.url, repeatTimes, delaySeconds, defer server.failures for server in servers
console.log "#{server.url} fails #{server.failures} times" for server in servers
pingServers servers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment