Skip to content

Instantly share code, notes, and snippets.

@Quacky2200
Last active November 30, 2018 01:18
Show Gist options
  • Save Quacky2200/4d93050fb737d8936a8acf053b0d34db to your computer and use it in GitHub Desktop.
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
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