Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python2
- """see http://www.craigaddyman.com/python-script-to-monitor-site-up-time/"""
- import sched
- import time
- import urllib2
- def notify_down(url, email):
- print "Hey %s, %s is down" % (email, url)
- def notify_up(url, email):
- print "Hey %s, %s is up again" % (email, url)
- POLL_TIME_UP = 60 # 1 min
- POLL_TIME_DOWN = 60 * 15 # 15 min
- def poll(scheduler, url, email, lastup = True):
- """Checks the given URL, notifies on status changes and schedules again
- Arguments:
- scheduler -- sched.scheduler. Function will schedule itself again with
- POLL_TIME_UP or POLL_TIME_DOWN
- url -- http or https URL. GET request will be made. Response code 200 is
- expected
- email -- e-mail address that will be notified when site changes from up to
- down or vice versa
- lastup -- True if the site was up on the last check
- """
- print "Checking %s" % url
- try:
- response = urllib2.urlopen(url)
- try:
- isup = response.getcode() == 200
- finally:
- response.close()
- except (urllib2.URLError, urllib2.HTTPError):
- isup = False
- if isup:
- if not lastup:
- notify_up(url, email)
- polltime = POLL_TIME_UP
- else:
- if lastup:
- notify_down(url, email)
- polltime = POLL_TIME_DOWN
- # schedule self for next iteration
- scheduler.enter(polltime, 0, poll, (scheduler, url, email, isup))
- def main():
- scheduler = sched.scheduler(time.time, time.sleep)
- observed = (('http://www.example.com', 'john.doe@example.com'),
- ('http://localhost', 'root@localhost'),
- )
- for url, email in observed:
- # check immediately, then adds itself to scheduler
- poll(scheduler, url, email)
- scheduler.run()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement