Created
June 22, 2016 09:50
-
-
Save chozabu/405655e5f322819bee6e281f3d012f8b 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
#!/usr/bin/env python2 | |
"""picofix.py: reboot the a router when it fails to contact a distant node.""" | |
__author__ = "Alex 'Chozabu' P-B" | |
import pyping | |
from time import sleep | |
from datetime import datetime | |
import pxssh | |
def reboot_router(): | |
try: | |
s = pxssh.pxssh() | |
s.login('192.168.2.209', 'root', 'thereisapassword') | |
s.sendline('reboot') # run a command | |
s.prompt() # match the prompt | |
print(s.before) # print everything before the prompt. | |
s.logout() | |
except pxssh.ExceptionPxssh as e: | |
print("pxssh failed on login.") | |
print(e) | |
def main_loop(): | |
reboots = [None] | |
fail_count = 0 | |
ok_count = 0 | |
while True: | |
if pyping.ping('192.168.32.1').ret_code: | |
ok_count = 0 | |
fail_count += 1 | |
print("FAIL", fail_count) | |
if fail_count > 10: | |
reboots.append(datetime.now().strftime("%Y-%m-%m %H:%M")) | |
print("rebooting router!") | |
reboot_router() | |
print("rebooted router, waiting 60 seconds") | |
print('reboots:', reboots) | |
sleep(60) | |
print("OK, back to normal") | |
fail_count = 0 | |
else: | |
fail_count = 0 | |
ok_count += 1 | |
print("seems OK, ok_count:", ok_count, 'last_reboot:', reboots[-1], 'of', len(reboots)-1) | |
sleep(2) | |
if __name__ == "__main__": | |
main_loop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Your router must support SSH for this script, you may be able to enable it via the web interface, otherwise you may need a different script, or different router.