Added rebooter
This commit is contained in:
parent
1dbbaf23e6
commit
805365259c
|
@ -0,0 +1,14 @@
|
|||
FROM python:3.11
|
||||
|
||||
WORKDIR /code
|
||||
|
||||
ENTRYPOINT ["python", "rebooter.py"]
|
||||
|
||||
RUN apt update --fix-missing
|
||||
RUN apt install -y firefox-esr iputils-ping
|
||||
|
||||
RUN pip3 install --upgrade pip
|
||||
COPY requirements.txt .
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
COPY src .
|
|
@ -0,0 +1 @@
|
|||
selenium==4.9.1
|
|
@ -0,0 +1,64 @@
|
|||
import os
|
||||
from time import sleep
|
||||
from datetime import datetime
|
||||
from subprocess import Popen, DEVNULL
|
||||
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
|
||||
|
||||
class Router:
|
||||
def __init__(self, ip, password):
|
||||
self.ip = ip
|
||||
self.password = password
|
||||
|
||||
def _ping(self, ip, count=3, timeout=3):
|
||||
process = Popen(['ping', '-c', str(count), '-w', str(timeout), ip], stdout=DEVNULL, stderr=DEVNULL)
|
||||
exit_code = process.wait()
|
||||
return exit_code == 0
|
||||
|
||||
def check_lan_connectivity(self):
|
||||
return self._ping(ip)
|
||||
|
||||
def check_internet_connectivity(self):
|
||||
return self._ping('8.8.8.8')
|
||||
|
||||
def reboot(self):
|
||||
options = webdriver.FirefoxOptions()
|
||||
options.headless = True
|
||||
|
||||
with webdriver.Firefox(options=options) as driver:
|
||||
driver.get(f'http://{self.ip}/webpages/login.html')
|
||||
sleep(10)
|
||||
|
||||
password_input = driver.find_elements(By.CSS_SELECTOR, 'input.l[type=password]')[2]
|
||||
password_input.send_keys(self.password)
|
||||
sleep(1)
|
||||
password_input.send_keys(Keys.ENTER)
|
||||
sleep(10)
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, 'a#top-control-reboot').click()
|
||||
sleep(1)
|
||||
driver.find_element(By.CSS_SELECTOR, '#reboot_confirm_msg button.btn-msg-ok').click()
|
||||
sleep(1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
router = Router(os.environ['ROUTER_IP'], os.environ['ROUTER_PASSWORD'])
|
||||
|
||||
while True:
|
||||
if not router.check_internet_connectivity():
|
||||
# Internet is down
|
||||
if router.check_lan_connectivity():
|
||||
# LAN is up
|
||||
with open('/logs/connectivity.log', 'a') as log:
|
||||
log.write(f'{datetime.now()} - Internet down')
|
||||
|
||||
router.reboot()
|
||||
else:
|
||||
# LAN is down
|
||||
with open('/logs/connectivity.log', 'a') as log:
|
||||
log.write(f'{datetime.now()} - Internet and LAN down')
|
||||
|
||||
sleep(60)
|
Loading…
Reference in New Issue