# -*- coding: utf-8 -*- """ Uptime check, at the moment HTTPS only domains Usage of own healthchecks.io instance and config file """ from requests import get, post from config import HC_ROOT, CONFIG def check_domain(domain): try: r = get('https://%s' % domain, timeout=6) except Exception as e: return (e, 0) return (r.status_code, r.elapsed) def ping_with_info(url, fail=False, data=None): try: if fail: url = '%s/fail' % url post(url, timeout=10, data=data) except Exception as e: print("Ping failed: %s" % e) for check_item in CONFIG: print('Checking %s : %s' % (check_item['host'], ', '.join(check_item['domains']))) fail = False data = [] for domain in check_item['domains']: (status, timed) = check_domain(domain) if not fail and status != 200: fail = True if isinstance(status, Exception): data.append('%s : %s' % (domain, status)) else: data.append('%s : %s (%sms)' % ( domain, status, round(timed.total_seconds() * 1000.0) )) url = '%s/ping/%s' % (HC_ROOT, check_item['uuid']) ping_with_info(url, fail=fail, data='\n'.join(data))