diff --git a/relaystatus.py b/relaystatus.py index 7491687..12afd35 100644 --- a/relaystatus.py +++ b/relaystatus.py @@ -12,36 +12,63 @@ url = "https://onionoo.torproject.org/details" r = requests.get(url) relays = json.loads(r.content)["relays"] -old_text = open(old_file, "r").read() -old_text = json.loads(old_text)["relays"] +#sorted_relays = sorted(relays, key=lambda x : x['nickname'], reverse=True) -diff1 = diff(old_text, relays, syntax='symmetric') +#old_text = open(old_file, "r").read() +#old_text = json.loads(old_text)["relays"] -status = """From: relay status -To: relaystatus@lists.encryptionin.space -Subject: Relay Status """ + datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H') + """\n\n""" +#sorted_old = sorted(old_text, key=lambda x : x['nickname'], reverse=True) -for new_relay in diff1[jd.insert]: - exit = "no" - if new_relay[1]["exit_policy"][0] != "reject *:*": - exit = "yes" - status = status + "New relay: \"" + new_relay[1]["nickname"], "\", fingerpint: " + new_relay[1]["fingerprint"] + ", potential exit: " + exit + ", effective family size: " + str(len(new_relay[1]["effective_family"])) + "\n" +#email = "From: relay status \nTo: relaystatus@lists.encryptionin.space\nSubject: Relay Status " + datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d %H') + "\n\n" -for updated_relay in diff1: - if updated_relay != jd.insert and updated_relay != jd.delete: - if "flags" in diff1[updated_relay]: - if "Exit" in diff1[updated_relay]["flags"][jd.insert]: - relay = old_text[updated_relay] - new_flags = "" - for flag in diff1[updated_relay]["flags"][jd.insert]: - new_flags = new_flags+flag[1]+"," - status = status + "\"" + relay["nickname"] + "\" (" + relay["fingerprint"] + ") got new flag(s): \"" + new_flags + "\"\n" +status = "" -with open(old_file, "w") as output: - output.write(r.text) +#diff takes too long +#print("beginning diff " + datetime.datetime.now().strftime("%H-%M-%S")) +#diff1 = diff(old_text, relays, syntax='symmetric') +#print("done diffing " + datetime.datetime.now().strftime("%H-%M-%S")) -try: - smtp = smtplib.SMTP('localhost') - smtp.sendmail('relaystatus@encryptionin.space', ['relaystatus@lists.encryptionin.space'], status) -except SMTPException: - print("couldn't send") +#print("starting diff") +for new_relay in relays: + if datetime.datetime.strptime(new_relay["first_seen"], "%Y-%m-%d %H:%M:%S") > (datetime.datetime.now() - datetime.timedelta(hours=2)): + #added_relays += new_relay[1]["fingerprint"] + "\n" + exit = "no" + if new_relay["exit_policy"][0] != "reject *:*": + exit = "yes" + #print("New relay: \"" + new_relay[1]["nickname"] + "\", fingerpint: " + new_relay[1]["fingerprint"] + ", potential exit: " + exit + ", effective family size: " + str(len(new_relay[1]["effective_family"])) + ", first seen: " + new_relay[1]["first_seen"] + "\n") + status += "New relay: \"" + new_relay["nickname"] + "\", fingerpint: " + new_relay["fingerprint"] + ", potential exit: " + exit + ", effective family size: " + str(len(new_relay["effective_family"])) + "\n" + +#if jd.delete in diff1: +# for deleted_relay in diff1[jd.delete]: +# #deleted_relays += deleted_relay[1]["fingerprint"] + "\n" +# print("Deleted relay: \"" + deleted_relay[1]["nickname"] + "\", fingerpint: " + deleted_relay[1]["fingerprint"] + "\n") +# status += "Deleted relay: \"" + deleted_relay[1]["nickname"] + "\", fingerpint: " + deleted_relay[1]["fingerprint"] + "\n" + +#for updated_relay in diff1: +# if updated_relay != jd.insert and updated_relay != jd.delete: +# try: +# if "flags" in diff1[updated_relay]: +# if jd.insert in diff1[updated_relay]["flags"]: +# if "Exit" in diff1[updated_relay]["flags"][jd.insert]: +# relay = old_text[updated_relay] +# new_flags = "" +# for flag in diff1[updated_relay]["flags"][jd.insert]: +# new_flags = new_flags+flag[1]+"," +# status += "\"" + relay["nickname"] + "\" (" + relay["fingerprint"] + ") got new flag(s): \"" + new_flags + "\"\n" +# except: +# print(diff1[updated_relay]) + +#print(status) +#with open("status.txt", "a") as output: +# output.write(status) + +#with open(old_file, "w") as output: + # output.write(r.text) + +if status: + email += status + try: + smtp = smtplib.SMTP('localhost') + smtp.sendmail('relaystatus@encryptionin.space', ['relaystatus@lists.encryptionin.space'], status) + except SMTPException: + print("couldn't send")