diff --git a/Dockerfile b/Dockerfile index 8bccc44..21b65a5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \ COPY . /app # Optionally mount /data to store the data -# VOLUME /data +VOLUME /app/data ENTRYPOINT ["python3"] CMD ["main.py"] diff --git a/alerts.py b/alerts.py index 1c8b393..05e817f 100644 --- a/alerts.py +++ b/alerts.py @@ -32,7 +32,7 @@ def handle_alert(domain: str, notification: dict, alert_data: dict): print(f"Unknown alert type: {alert_type} for domain: {domain}") -def discord_webhook(webhook_url: str, domain: str, content: str, alert_blocks: int): +def discord_webhook(webhook_url: str, domain: str, content: dict, alert_blocks: int): """ Send a message to a Discord webhook. """ diff --git a/domains.py b/domains.py index fddd640..04d304f 100644 --- a/domains.py +++ b/domains.py @@ -140,7 +140,6 @@ def notify_expiries(): if not domains: print("No domains found.") return - current_block = get_current_block() @@ -154,7 +153,6 @@ def notify_expiries(): "time": f"{blocks_remaining // 144} days" # Assuming 144 blocks per day } for notification in domains[domain]: - print(blocks_remaining, notification['blocks']) if notification['blocks'] <= blocks_remaining and notification['blocks'] >= (blocks_remaining - 1): # Just in case there are 2 blocks really close together # Check if last block notified is more than current block + 5 if notification.get('last_block_notified', -1) < (current_block - 5): diff --git a/main.py b/main.py index 376fcd5..a254599 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,9 @@ import server from gunicorn.app.base import BaseApplication import os import dotenv +import threading +import time +import domains class GunicornApp(BaseApplication): @@ -14,18 +17,35 @@ class GunicornApp(BaseApplication): def load_config(self): for key, value in self.options.items(): - if key in self.cfg.settings and value is not None: - self.cfg.set(key.lower(), value) + if key in self.cfg.settings and value is not None: # type: ignore + self.cfg.set(key.lower(), value) # type: ignore def load(self): return self.application - - +def run_expiry_checker(): + """ + Background function to run notify_expiries every 2 minutes. + """ + while True: + try: + print("Running expiry check...") + domains.notify_expiries() + print("Expiry check completed.") + except Exception as e: + print(f"Error in expiry checker: {e}") + + # Wait 2 minutes (120 seconds) + time.sleep(120) if __name__ == '__main__': dotenv.load_dotenv() + # Start the background expiry checker + expiry_thread = threading.Thread(target=run_expiry_checker, daemon=True) + expiry_thread.start() + print("Started background expiry checker thread") + workers = os.getenv('WORKERS', 1) threads = os.getenv('THREADS', 2) workers = int(workers) diff --git a/server.py b/server.py index 240a1a8..692d8df 100644 --- a/server.py +++ b/server.py @@ -15,11 +15,28 @@ import json import requests from datetime import datetime import dotenv +import threading +import time +import domains dotenv.load_dotenv() app = Flask(__name__) +def run_expiry_checker(): + """ + Background function to run notify_expiries every 2 minutes. + """ + while True: + try: + print("Running expiry check...") + domains.notify_expiries() + print("Expiry check completed.") + except Exception as e: + print(f"Error in expiry checker: {e}") + + # Wait 2 minutes (120 seconds) + time.sleep(120) def find(name, path): for root, dirs, files in os.walk(path): @@ -111,4 +128,9 @@ def not_found(e): # endregion if __name__ == "__main__": - app.run(debug=True, port=5000, host="0.0.0.0") + # Start the background expiry checker for development mode + expiry_thread = threading.Thread(target=run_expiry_checker, daemon=True) + expiry_thread.start() + print("Started background expiry checker thread") + + app.run(debug=True, port=5000, host="127.0.0.1")