Last active
November 30, 2018 01:18
-
-
Save Quacky2200/4d93050fb737d8936a8acf053b0d34db to your computer and use it in GitHub Desktop.
Creates a log, useful for dodgy internet. Checks every minute and creates an empty lock file to stop being run more than once. Add to cron or set as a service to make it start automatically
This file contains hidden or 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
import time | |
import sys | |
import datetime | |
from os.path import isfile as file_exists | |
from os import remove as file_delete | |
import os | |
from ping3 import ping | |
import signal | |
import sys | |
# User configurable settings | |
LOG_FILENAME = "uptime_log.txt" | |
LOCK_FILENAME = "uptime.lock" | |
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" | |
RECORD_INTERVAL_SECS_DETECT = 30 | |
RECORD_INTERVAL_SECS_FAILURE = 5 | |
def write_log(text): | |
log = open(LOG_FILENAME, "a", os.O_NONBLOCK) | |
dt = datetime.datetime.now() | |
log.write(dt.strftime(DATETIME_FORMAT) + ': ' + text + '\n') | |
log.close() | |
if file_exists(LOCK_FILENAME): | |
write_log("cron - checking uptime script is running.") | |
sys.exit(0) | |
last = -1 | |
lock = open(LOCK_FILENAME, "x") | |
def sig_handler(sig, frame): | |
write_log("stopping internet uptime check") | |
time.sleep(1) | |
lock.close() | |
file_delete(LOCK_FILENAME) | |
print('Stopped') | |
sys.exit(0) | |
signal.signal(signal.SIGINT, sig_handler) | |
signal.signal(signal.SIGTERM, sig_handler) | |
while True: | |
internet = ping("8.8.8.8") is not None | |
if last == -1: | |
write_log("start of internet uptime check") | |
if not last == internet: | |
write_log('internet is ' + ('up' if internet else 'down')) | |
last = internet | |
time.sleep((RECORD_INTERVAL_SECS_DETECT if internet else RECORD_INTERVAL_SECS_FAILURE)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment