config.py
1 """ 2 Dashboard Configuration 3 4 Loads settings from environment variables and defines constants. 5 """ 6 7 import os 8 from pathlib import Path 9 from dotenv import load_dotenv 10 11 load_dotenv() 12 13 # Database 14 # Get absolute path to project root (parent of dashboard directory) 15 _PROJECT_ROOT = Path(__file__).resolve().parent.parent 16 _db_path = os.getenv("DATABASE_PATH", "./db/sites.db") 17 # Convert relative paths to absolute (relative to project root) 18 if not os.path.isabs(_db_path): 19 DATABASE_PATH = str(_PROJECT_ROOT / _db_path) 20 else: 21 DATABASE_PATH = _db_path 22 23 # Dashboard 24 DASHBOARD_PORT = int(os.getenv("DASHBOARD_PORT", "8501")) 25 DASHBOARD_TITLE = "333 Method Analytics" 26 REFRESH_INTERVAL = int(os.getenv("DASHBOARD_REFRESH_INTERVAL", "300")) # seconds (5 minutes) 27 28 # Cache (increased to 30 minutes for better performance) 29 # Background precompute job keeps data fresh 30 CACHE_TTL = int(os.getenv("DASHBOARD_CACHE_TTL", "1800")) # seconds (30 minutes) 31 32 # Pagination 33 PAGE_SIZE = int(os.getenv("DASHBOARD_PAGE_SIZE", "50")) 34 35 # Timezone 36 TIMEZONE = os.getenv("DASHBOARD_TIMEZONE", "Australia/Sydney") 37 38 # Colors 39 GRADE_COLORS = { 40 'A+': '#2ECC71', 'A': '#27AE60', 'A-': '#52C41A', 41 'B+': '#3498DB', 'B': '#2980B9', 'B-': '#1F77B4', 42 'C+': '#F1C40F', 'C': '#F39C12', 'C-': '#E8B600', 43 'D+': '#E67E22', 'D': '#D35400', 'D-': '#C0392B', 'F': '#E74C3C' 44 } 45 46 STATUS_COLORS = { 47 'found': '#3498DB', # Blue 48 'assets_captured': '#9B59B6', # Purple 49 'scored': '#E67E22', # Orange 50 'rescored': '#E74C3C', # Red 51 'enriched': '#1ABC9C', # Turquoise 52 'proposals_drafted': '#2ECC71', # Green 53 'outreach_sent': '#27AE60', # Dark Green 54 'high_score': '#52C41A', # Bright Green (completed - scored well) 55 'failing': '#C0392B', # Dark Red (needs human review) 56 'ignore': '#95A5A6' # Gray 57 } 58 59 CHANNEL_COLORS = { 60 'sms': '#3498DB', 61 'email': '#2ECC71', 62 'form': '#9B59B6', 63 'x': '#1DA1F2', 64 'linkedin': '#0A66C2' 65 } 66 67 # Rate Limit Thresholds 68 RESEND_BOUNCE_ALERT = 5.0 # Alert if bounce rate >5% 69 RESEND_BOUNCE_CRITICAL = 10.0 # Critical if bounce rate >10% 70 RESEND_COMPLAINT_ALERT = 0.1 # Alert if complaint rate >0.1% 71 RESEND_COMPLAINT_CRITICAL = 0.5 # Critical if complaint rate >0.5% 72 RATE_LIMIT_WARNING = 80 # Warn when >80% of quota used 73 74 # Database Connection Helper 75 def get_db_connection(): 76 """Get a connection to the SQLite database""" 77 import sqlite3 78 return sqlite3.connect(DATABASE_PATH)