commit 2ae19e5c25dca6acdb0307c147dc93f73e257f7e Author: hiro <h...@torproject.org> Date: Mon Oct 21 19:54:50 2019 +0200
Add service status check --- scripts/check_status | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/scripts/check_status b/scripts/check_status new file mode 100644 index 0000000..8f8f3e5 --- /dev/null +++ b/scripts/check_status @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# This file is part of BridgeDB, a Tor bridge distribution system. +# +# :authors: hiro <h...@torproject.org> +# see also AUTHORS file +# +# :license: This is Free Software. See LICENSE for license information. + +import sys +import smtplib +import time +import imaplib +import email +import time + +# Standard Nagios return codes +OK, WARNING, CRITICAL, UNKNOWN = range(4) + +ORG_EMAIL = "@gmail.com" +FROM_EMAIL = "test.bridges.browser" + ORG_EMAIL +SMTP_SERVER = "imap.gmail.com" +SMTP_PORT = 993 + +MESSAGE_FROM = "brid...@torproject.org" +MESSAGE_SUBJECT = "Bridges" +MESSAGE_BODY = ":443" + +STATUS_FILE = "/srv/bridgedb.torproject.org/check/status" + +# ------------------------------------------------- +# +# Utility to read email from Gmail Using Python +# +# ------------------------------------------------ + +def test_email_from_gmail(password): + try: + mail = imaplib.IMAP4_SSL(SMTP_SERVER) + mail.login(FROM_EMAIL, password) + mail.select('INBOX') + + type, data = mail.search(None, 'ALL') + mail_ids = data[0] + + id_list = mail_ids.split() + first_email_id = int(str(id_list[0], 'utf-8')) + latest_email_id = int(str(id_list[-1], 'utf-8')) + + for i in range(int(latest_email_id), int(first_email_id), -1): + typ, data = mail.fetch(str(i), '(RFC822)') + + for response_part in data: + if isinstance(response_part, tuple): + m = str(response_part[1], 'utf-8') + msg = email.message_from_string(m) + email_subject = "{}".format(msg['subject']) + email_from = "{}".format(msg['from']) + email_body = "{}".format(msg.as_string()) + + if (MESSAGE_FROM == email_from) and (MESSAGE_SUBJECT == email_subject) and (MESSAGE_BODY in email_body): + mail.store(str(i), '+FLAGS', '\\Deleted') + mail.close() + return OK, "Bridgedb is good and sending emails with working bridges" + else: + mail.store(str(i), '+FLAGS', '\\Deleted') + + mail.close() + return WARNING, "No emails from gettor found" + + except Exception as e: + return CRITICAL, str(e) + +def send_email_from_gmail(password): + sent_from = FROM_EMAIL + sent_to = ["{}".format(MESSAGE_FROM)] + subject = 'Bridges' + body = 'get bridges' + + email_text = """From: %s\nTo: %s\nSubject: %s\n\n%s""" % (sent_from, ", ".join(sent_to), subject, body) + + try: + mail = smtplib.SMTP_SSL('smtp.gmail.com', 465) + mail.ehlo() + mail.login(sent_from, password) + mail.sendmail(sent_from, sent_to, email_text) + mail.close() + return OK, "Test email sent" + except Exception as e: + return UNKNOWN, str(e) + + if __name__ == "__main__": + status, message = None, None + + if len(sys.argv) == 2: + password = sys.argv[1] + else: + password = "yourPassword" + + status_file = open(STATUS_FILE, 'r') + message = status_file.read() + status_file.close() + + try: + status, message = send_email_from_gmail(password) + except Exception as e: + status = UNKNOWN + message = repr(e) + status_file = open(STATUS_FILE,'w') + status_file.write("UNKNOWN\n3: %s" % message) + status_file.close() + + time.sleep(600) + + try: + status, message = test_email_from_gmail(password) + except KeyboardInterrupt: + status, message = CRITICAL, "Caught Control-C..." + except Exception as e: + status = CRITICAL + message = repr(e) + finally: + status_file = open(STATUS_FILE,'w') + if status == OK: + status_file.write("OK\n0: %s" % message) + elif status == WARNING: + status_file.write("WARNING\n1: %s" % message) + elif status == CRITICAL: + status_file.write("CRITICAL\n2: %s" % message) + else: + status_file.write("UNKNOWN\n3: %s" % message) + status = UNKNOWN + + status_file.close() + + sys.exit(status) _______________________________________________ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits