Last active
August 29, 2015 14:09
-
-
Save vivekseth/395d7dceefcc2faf93f4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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