Added email monitoring

This commit is contained in:
Jonas Linter
2025-10-15 08:46:25 +02:00
parent bb900ab1ee
commit f22684d592
11 changed files with 2279 additions and 4 deletions

View File

@@ -32,6 +32,7 @@ from .customer_service import CustomerService
from .db import Base, get_database_url
from .db import Customer as DBCustomer
from .db import Reservation as DBReservation
from .email_service import create_email_service
from .logging_config import get_logger, setup_logging
from .rate_limit import (
BURST_RATE_LIMIT,
@@ -185,8 +186,14 @@ async def lifespan(app: FastAPI):
_LOGGER.exception("Failed to load config: ")
config = {}
# Setup logging from config
setup_logging(config)
# Get event loop for email monitoring
loop = asyncio.get_running_loop()
# Initialize email service (before logging setup so it can be used by handlers)
email_service = create_email_service(config)
# Setup logging from config with email monitoring
email_handler, report_scheduler = setup_logging(config, email_service, loop)
_LOGGER.info("Application startup initiated")
DATABASE_URL = get_database_url(config)
@@ -198,6 +205,9 @@ async def lifespan(app: FastAPI):
app.state.config = config
app.state.alpine_bits_server = AlpineBitsServer(config)
app.state.event_dispatcher = event_dispatcher
app.state.email_service = email_service
app.state.email_handler = email_handler
app.state.report_scheduler = report_scheduler
# Register push listeners for hotels with push_endpoint
for hotel in config.get("alpine_bits_auth", []):
@@ -235,10 +245,31 @@ async def lifespan(app: FastAPI):
else:
_LOGGER.info("All existing customers already have hashed data")
# Start daily report scheduler if enabled
if report_scheduler:
report_scheduler.start()
_LOGGER.info("Daily report scheduler started")
_LOGGER.info("Application startup complete")
yield
# Optional: Dispose engine on shutdown
# Cleanup on shutdown
_LOGGER.info("Application shutdown initiated")
# Stop daily report scheduler
if report_scheduler:
report_scheduler.stop()
_LOGGER.info("Daily report scheduler stopped")
# Close email alert handler (flush any remaining errors)
if email_handler:
email_handler.close()
_LOGGER.info("Email alert handler closed")
# Dispose engine
await engine.dispose()
_LOGGER.info("Application shutdown complete")
async def get_async_session(request: Request):