Skip to content

Instantly share code, notes, and snippets.

@vivekseth
Last active August 29, 2015 14:09
Show Gist options
  • Save vivekseth/395d7dceefcc2faf93f4 to your computer and use it in GitHub Desktop.
Save vivekseth/395d7dceefcc2faf93f4 to your computer and use it in GitHub Desktop.
# Monitor Internet Connection #
import os
import sys
import time
import datetime
import argparse
RECONNECT_COMMAND = """
networksetup -setairportpower en0 off;
sleep 1;
networksetup -setairportpower en0 on;
"""
HAS_INTERNET_COMMAND = """
curl -i --connect-timeout 3 --max-time 5 www.google.com 1> stdout.txt 2> stderr.txt;
TEMP_OUTPUT=$(cat stdout.txt | grep "HTTP/1.1 200 OK")
if [ -n "$TEMP_OUTPUT" ]
then
exit 0;
fi
exit 1;
"""
def time_stamp():
return datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
# return 0 if okay
# assume error if not 0
def check_internet():
return interruptible_command(HAS_INTERNET_COMMAND)
def reconnect_to_internet():
os.system(RECONNECT_COMMAND)
def interruptible_command(com_str):
try:
return_value = os.system(com_str)
if return_value == 2:
raise KeyboardInterrupt()
return return_value
except KeyboardInterrupt, e:
raise e
def monitor_connection(verbose=True, interval=0.5):
counter = 0
print "Beginnning Monitor (interval: {0} sec)...".format(interval)
while True:
time.sleep(interval)
counter = counter + 1
sys.stdout.write('\r' + str(counter) + ' ticks')
sys.stdout.flush()
if check_internet() != 0:
print ''
print '---'
print 'internet lost, waiting 2 sec for reconnect...'
time.sleep(2.0)
if check_internet() != 0:
print 'internet still lost, force reconnect...'
print 'counter = 0'
counter = 0
reconnect_to_internet()
print 'wait for 2 sec before beginning loop...'
time.sleep(2.0)
print '---'
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Automatically reconnect if internet connection is lost')
parser.add_argument('--interval', '-i', type=float, default=0.5, help='Interval time (default: 0.5 sec)')
parser.add_argument('--verbose', '-v', action='store_true')
args = parser.parse_args()
try:
monitor_connection(verbose=args.verbose, interval=args.interval)
except KeyboardInterrupt, e:
print "\n\nQuitting now..."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment