Compare commits

...

2 commits

Author SHA1 Message Date
Morgan McMillian ab5c6e7712 Add http_get notification type and toggle for read_only mailbox
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/manual/woodpecker Pipeline failed
This closes #2
2023-04-02 05:49:33 -07:00
Morgan McMillian 6cf37aebb2 Add http get request to logger thread for passive monitoring
This closes #1
2023-04-01 14:34:01 -07:00
2 changed files with 50 additions and 4 deletions

View file

@ -4,6 +4,7 @@ import logging
import signal
import requests
from requests.exceptions import ConnectionError
from multiprocessing import Process, Event, Queue
from logging.handlers import QueueHandler
from imapclient import IMAPClient, exceptions
@ -35,7 +36,8 @@ class MailboxNotifier(object):
with IMAPClient(self.mailbox.imap_host) as self.imap:
self.imap.login(self.mailbox.imap_user,
self.mailbox.imap_pass)
self.imap.select_folder("INBOX", readonly=True)
self.imap.select_folder("INBOX",
readonly=self.mailbox.read_only)
self.log.info("Connected to INBOX")
messages = self.imap.search("UNSEEN")
if len(messages) > 0:
@ -113,6 +115,9 @@ class MailboxNotifier(object):
if target.service == "mattermost" and target.enabled:
self.send_mattermost(target.target, text)
if target.service == "http_get" and target.enabled:
self.send_http_get(target.target)
def send_pushover(self, po_user, text):
notifier = Notifier.get(Notifier.service == "pushover")
url = "https://api.pushover.net/1/messages.json"
@ -133,11 +138,15 @@ class MailboxNotifier(object):
self.log.debug(response.status_code)
self.log.debug(response.text)
def send_http_get(self, url):
response = requests.get(url)
self.log.debug(response.status_code)
self.log.debug(response.text)
def shutdown_handler(signal, frame):
_shtudown.set()
def logger_thread(log_queue):
def logger_thread(log_queue, url):
logging.debug("starting logger thread")
while True:
entry = log_queue.get()
@ -146,6 +155,12 @@ def logger_thread(log_queue):
break
logger = logging.getLogger(entry.name)
logger.handle(entry)
if url is not None:
try:
r = requests.get(url)
except ConnectionError:
pass
def event_thread(event_queue):
logging.debug("starting event thread")
@ -177,6 +192,8 @@ def main():
db.init(args.store, pragmas={'journal_mode': 'wal'})
create_tables()
monitor_url = System.get_or_none(System.key == "monitor_url")
log_queue = Queue()
event_queue = Queue()
processes = []
@ -191,7 +208,8 @@ def main():
logging.basicConfig(level=logging.DEBUG)
logging.debug("starting up main")
log_thread = threading.Thread(target=logger_thread, args=(log_queue,))
log_thread = threading.Thread(target=logger_thread,
args=(log_queue,monitor_url.value,))
log_thread.start()
e_thread = threading.Thread(target=event_thread, args=(event_queue,))
e_thread.start()

View file

@ -5,7 +5,7 @@ from playhouse.sqlite_ext import SqliteExtDatabase
db = SqliteExtDatabase(None)
migrator = SqliteMigrator(db)
db_schema = "1"
db_schema = "2"
class BaseModel(Model):
class Meta:
@ -21,6 +21,7 @@ class Mailbox(BaseModel):
imap_user = CharField()
imap_pass = CharField()
last_check = DateTimeField(null=True)
read_only = BooleanField(default=True)
class Events(BaseModel):
user = CharField()
@ -44,3 +45,30 @@ def create_tables():
with db:
if not db.table_exists(System._meta.table_name):
db.create_tables(tables)
System.replace(key="schema", value=db_schema).execute()
else:
schema_ver = System.get_or_none(key="schema")
migrate_tables(schema_ver)
def migrate_tables(schema_ver):
if schema_ver is None or schema_ver.value == "1":
schema_ver = migrate_v2()
# if schema_ver == "2":
# schema_ver = migrate_v3()
System.replace(key="schema", value=db_schema).execute()
def migrate_v2():
# migration to schema version 2
read_only = BooleanField(default=True)
migrate(
migrator.add_column(
Mailbox._meta.table_name, 'read_only', read_only),
)
return "2"
# def migrate_v3():
# # migration to schema version 3
# return "3"