#!/usr/bin/env python

"""Log whether the Internet connection is up.

Call this script from cron every few minutes.  Append the output
to a file.  It will contain a Unix timestamp then a 1 for up or
0 for down.
"""

# Configuration
public_hosts = set([
  "http://yahoo.com", 
  "http://google.com", 
  "http://myspace.com", 
  "http://msn.com", 
  "http://ebay.com", 
  "http://amazon.com",
  "http://craigslist.org",
  "http://cnn.com",
  "http://wikipedia.org",
])

num_retries = 2


import time
import random
import urllib
import socket

def pick_random_host(tried):
    host = random.choice(list(public_hosts - tried))
    tried.add(host)
    return host

def connect_to_host(host):
    try:
        fil = urllib.urlopen(host)
        unused = fil.read()
        return unused
    except IOError:
        return False

def is_internet_up():
    tried = set()
    while len(tried) < num_retries:
        host = pick_random_host(tried)
        connected = connect_to_host(host)
        if connected:
            return True
    return False

def main():
    socket.setdefaulttimeout(20)
    now = int(time.time())
    up = int(is_internet_up())
    print "%d %d" % (now, up)

if __name__ == "__main__":
    main()