Skip to content

Instantly share code, notes, and snippets.

@airdrummingfool
Last active August 29, 2015 14:04
Show Gist options
  • Select an option

  • Save airdrummingfool/572fc6c42c5c2a0b5a5a to your computer and use it in GitHub Desktop.

Select an option

Save airdrummingfool/572fc6c42c5c2a0b5a5a to your computer and use it in GitHub Desktop.

Revisions

  1. airdrummingfool revised this gist Oct 30, 2014. 1 changed file with 11 additions and 3 deletions.
    14 changes: 11 additions & 3 deletions pinger.py
    Original file line number Diff line number Diff line change
    @@ -13,18 +13,26 @@

    # input parsing
    try:
    opts, args = getopt.getopt(sys.argv[1:],"hvl:",["logfile="])
    opts, args = getopt.getopt(sys.argv[1:],"hvt:l:",["tolerance=", "logfile="])
    except getopt.GetoptError:
    print 'pinger.py <ip> <backup ip> [-v] [-l <logfile>]'
    print 'pinger.py <ip> <backup ip> [-v] [-t <tolerance>] [-l <logfile>]'
    sys.exit(2)
    verbosity = VERBOSITY_OFF
    logfile = None
    tolerance = 3
    for opt, arg in opts:
    if opt == '-h':
    print 'pinger.py -i <inputfile> -o <outputfile>'
    sys.exit()
    elif opt == '-v':
    verbosity = VERBOSITY_LOW
    elif opt in ("-t", "--tolerance"):
    argi = int(arg)
    if argi >= 0 and argi < 10:
    tolerance = argi + 1
    else:
    print 'Tolerance must be between 0 and 9 (entered: ' + arg +').'
    exit(1)
    elif opt in ("-l", "--logfile"):
    logfile = arg
    if len(args) < 1:
    @@ -92,7 +100,7 @@ def ping(hostname, backup_hostname=None):
    if fail_date == None:
    fail_date = datetime.datetime.now()
    fail_counter += 1
    if fail_counter == 3:
    if fail_counter == tolerance:
    if not is_windows:
    os.system("say yo yo yo the internet is down again sucka &")
    debug_print('\ninternet went down at {}'.format(fail_date), VERBOSITY_OFF)
  2. airdrummingfool created this gist Jul 15, 2014.
    103 changes: 103 additions & 0 deletions pinger.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,103 @@
    """
    pinger.py
    Tommy Goode
    tgoode.com
    """

    import os, sys, time
    import datetime
    import getopt

    VERBOSITY_OFF = 0
    VERBOSITY_LOW = 1

    # input parsing
    try:
    opts, args = getopt.getopt(sys.argv[1:],"hvl:",["logfile="])
    except getopt.GetoptError:
    print 'pinger.py <ip> <backup ip> [-v] [-l <logfile>]'
    sys.exit(2)
    verbosity = VERBOSITY_OFF
    logfile = None
    for opt, arg in opts:
    if opt == '-h':
    print 'pinger.py -i <inputfile> -o <outputfile>'
    sys.exit()
    elif opt == '-v':
    verbosity = VERBOSITY_LOW
    elif opt in ("-l", "--logfile"):
    logfile = arg
    if len(args) < 1:
    print 'Please specify an IP address to ping.'
    exit(1)
    ip = args[0]
    backup_ip = args[1] if len(args) >= 2 else None

    is_windows = os.name == 'nt'

    # print function for non-line breaks and debugging
    def debug_print(str, level=VERBOSITY_OFF, linebreak=True):
    if level > verbosity:
    return
    sys.stdout.write(str)
    if linebreak:
    sys.stdout.write('\n')
    sys.stdout.flush()

    def debug_log(str):
    if logfile is None:
    return
    log = open(logfile, 'a')
    log.write(str + '\n')
    log.close()

    # ping method declaration
    def ping(hostname, backup_hostname=None):
    ping_format = "ping -n 1 -w 2000 {} > NUL" if is_windows else "ping -c 1 -t 2 {} > /dev/null 2>&1"

    response = os.system(ping_format.format(hostname))
    if response == 0:
    return True
    if backup_hostname == None:
    return False
    backup_response = os.system(ping_format.format(backup_hostname))
    if backup_response == 0:
    debug_print('h', VERBOSITY_LOW, linebreak=False)
    return True
    else:
    return False

    # ping given IP
    is_down = False
    fail_date = None
    up_date = datetime.datetime.now()
    fail_counter = 0
    debug_print('Pinger started at {}. IP {}, backup {}'.format(datetime.datetime.now(), ip, backup_ip), VERBOSITY_OFF)
    debug_log('Pinger started at {}. IP {}, backup {}'.format(datetime.datetime.now(), ip, backup_ip))
    try:
    while True:
    if ping(ip, backup_ip):
    debug_print(' ', VERBOSITY_LOW, linebreak=False)
    if is_down:
    up_date = datetime.datetime.now()
    if not is_windows:
    os.system("say bro the internet is finally back &")
    debug_print('\ninternet returned at {} after {} failed checks totaling {} seconds'.format(up_date, fail_counter, (up_date-fail_date).total_seconds()), VERBOSITY_OFF)
    debug_log('{},{},{}\n'.format(fail_date,up_date, fail_counter))
    fail_date = None
    fail_counter = 0
    is_down = False
    else:
    debug_print('.', VERBOSITY_LOW, linebreak=False)
    if fail_date == None:
    fail_date = datetime.datetime.now()
    fail_counter += 1
    if fail_counter == 3:
    if not is_windows:
    os.system("say yo yo yo the internet is down again sucka &")
    debug_print('\ninternet went down at {}'.format(fail_date), VERBOSITY_OFF)
    is_down = True
    time.sleep(2)
    except(KeyboardInterrupt):
    debug_print('\nPinger stopped at {}'.format(datetime.datetime.now()), VERBOSITY_OFF)
    debug_log('Pinger stopped at {}'.format(datetime.datetime.now()))