Skip to content

Instantly share code, notes, and snippets.

@orestis
Created June 17, 2011 09:24
Show Gist options
  • Save orestis/1031116 to your computer and use it in GitHub Desktop.
Save orestis/1031116 to your computer and use it in GitHub Desktop.
monitor3.py
from twisted.web.resource import Resource
from twisted.web.server import Site, NOT_DONE_YET
from twisted.web.client import getPage
from twisted.internet import reactor, defer, task
from twisted.names.client import createResolver
from twisted.names import dns
from twisted.python import log
import sys
log.startLogging(sys.stdout)
class Index(Resource):
def got_site(self, data, site, request, aggregates):
aggregates['OK'] += 1
request.write(str(aggregates))
request.write('\r\n')
def got_error(self, error, site, request, aggregates):
if error.type == defer.TimeoutError:
aggregates['TIMEOUT'] += 1
request.write(site)
request.write(' ')
request.write('TIMEOUT')
request.write('\r\n')
else:
aggregates['ERROR'] += 1
request.write(site)
request.write(' ')
request.write(str(error.value))
request.write(' ')
if isinstance(error.value, dns.Message):
print 'DNS MESSAGE'
request.write(error.value.toStr())
else:
request.write(error.getErrorMessage())
request.write('\r\n')
request.write(str(aggregates))
request.write('\r\n')
def getPage(self, address, request, aggregates):
d = getPage(address, timeout=10)
d.addCallback(self.got_site, address, request, aggregates)
d.addErrback(self.got_error, address, request, aggregates)
return d
def render_GET(self, request):
request.write('<html><body>')
dl = []
aggregates = {
'OK': 0,
'TIMEOUT': 0,
'ERROR': 0
}
SITES = ["apple.com", 'adobe.com']
work = (self.getPage('http://' + site, request, aggregates) for site in SITES)
for i in range(10):
d = task.cooperate(work).whenDone()
dl.append(d)
dl = defer.DeferredList(dl)
def finished(results):
request.write('</body></html>')
request.finish()
dl.addCallback(finished)
return NOT_DONE_YET
root = Resource()
root.putChild('', Index())
factory = Site(root)
reactor.installResolver(createResolver())
reactor.listenTCP(8000, factory)
reactor.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment