from mail import MailBox, Logger
|
|
import time
|
|
from threading import Thread
|
|
from subprocess import Popen, PIPE
|
|
import sys
|
|
import json
|
|
|
|
class MailWatcher(Thread):
|
|
def __init__(self, account, interval, creds, sensitivity, thresh, logger):
|
|
Thread.__init__(self)
|
|
self.account = account
|
|
self.interval = interval
|
|
self.threshold = thresh
|
|
self.creds = creds
|
|
self.sensitivity = sensitivity
|
|
self.running = True
|
|
self.stopped = False
|
|
self.logger = logger
|
|
|
|
def run(self):
|
|
mailbox_obj = MailBox(self.account["uname"], self.account["password"], self.account["server"], self.account["port"],self.creds, self.sensitivity, self.threshold, self.logger)
|
|
while 1 and self.running:
|
|
time.sleep(self.interval/100)
|
|
mailbox_obj.refresh_new_mails()
|
|
|
|
self.stopped = True
|
|
|
|
def stop(self):
|
|
self.running = False
|
|
|
|
def thread_done(thread:MailWatcher):
|
|
return thread.stopped
|
|
|
|
conf = json.loads(sys.stdin.readline())
|
|
workdir = sys.stdin.readline()
|
|
|
|
threads = []
|
|
loggers = []
|
|
mysql_creds = {}
|
|
main_log = Logger(workdir[:-1] + "/logs/main_process")
|
|
main_log.info("Started main process")
|
|
|
|
for i in conf:
|
|
if i.startswith("mysql"):
|
|
mysql_creds[i] = conf[i]
|
|
|
|
for i in conf["accounts"]:
|
|
loggers.append(Logger(workdir[:-1] + "/logs/" + i["uname"]))
|
|
threads.append(MailWatcher(i, conf["refresh_millis"], mysql_creds, conf["sensitivity"], conf["threshold"], loggers[-1]))
|
|
threads[-1].start()
|
|
|
|
main_log.info("Created listeners")
|
|
|
|
while str(input()) != "0":
|
|
continue
|
|
main_log.info("Detected interrupt. Stopping!")
|
|
for thread in threads:
|
|
thread.stop()
|
|
|
|
main_log.info("Sent stop signal to all threads!")
|
|
while not all(map(thread_done,threads)):
|
|
continue
|
|
main_log.info("All threads stopped!")
|
|
|
|
for logger in loggers:
|
|
logger.stop()
|
|
|
|
exit(0)
|