fix: minor optimizations, trying to fix #333

This commit is contained in:
Xoconoch
2025-08-29 08:26:16 -06:00
parent f800251de1
commit fe5e7964fa
6 changed files with 304 additions and 101 deletions

90
app.py
View File

@@ -13,11 +13,12 @@ import redis
import socket
from urllib.parse import urlparse
from dotenv import load_dotenv
load_dotenv()
# Parse log level from environment as early as possible, default to INFO for visibility
log_level_str = os.getenv("LOG_LEVEL", "INFO").upper()
log_level = getattr(logging, log_level_str, logging.INFO)
log_level_str = os.getenv("LOG_LEVEL", "WARNING").upper()
log_level = getattr(logging, log_level_str, logging.WARNING)
# Set up a very basic logging config immediately, so early logs (including import/migration errors) are visible
logging.basicConfig(
@@ -52,30 +53,25 @@ if _umask_value:
# Import and initialize routes (this will start the watch manager)
from routes.auth.credentials import router as credentials_router
from routes.auth.auth import router as auth_router
from routes.content.album import router as album_router
from routes.content.artist import router as artist_router
from routes.content.track import router as track_router
from routes.content.playlist import router as playlist_router
from routes.content.bulk_add import router as bulk_add_router
from routes.core.search import router as search_router
from routes.core.history import router as history_router
from routes.system.progress import router as prgs_router
from routes.system.config import router as config_router
from routes.auth.credentials import router as credentials_router # noqa: E402
from routes.auth.auth import router as auth_router # noqa: E402
from routes.content.album import router as album_router # noqa: E402
from routes.content.artist import router as artist_router # noqa: E402
from routes.content.track import router as track_router # noqa: E402
from routes.content.playlist import router as playlist_router # noqa: E402
from routes.content.bulk_add import router as bulk_add_router # noqa: E402
from routes.core.search import router as search_router # noqa: E402
from routes.core.history import router as history_router # noqa: E402
from routes.system.progress import router as prgs_router # noqa: E402
from routes.system.config import router as config_router # noqa: E402
# Import Celery configuration and manager
from routes.utils.celery_manager import celery_manager
from routes.utils.celery_config import REDIS_URL
from routes.utils.celery_config import REDIS_URL # noqa: E402
# Import authentication system
from routes.auth import AUTH_ENABLED
from routes.auth.middleware import AuthMiddleware
# Import watch manager controls (start/stop) without triggering side effects
from routes.utils.watch.manager import start_watch_manager, stop_watch_manager
# Configure application-wide logging
@@ -136,9 +132,9 @@ def setup_logging():
"routes.utils.celery_manager",
"routes.utils.celery_tasks",
"routes.utils.watch",
"uvicorn", # General Uvicorn logger
"uvicorn.access", # Uvicorn access logs
"uvicorn.error", # Uvicorn error logs
"uvicorn", # General Uvicorn logger
"uvicorn.access", # Uvicorn access logs
"uvicorn.error", # Uvicorn error logs
"spotizerr",
]:
logger = logging.getLogger(logger_name)
@@ -152,7 +148,6 @@ def setup_logging():
def check_redis_connection():
"""Check if Redis is available and accessible"""
from routes.utils.celery_config import REDIS_URL
if not REDIS_URL:
logging.error("REDIS_URL is not configured. Please check your environment.")
@@ -199,7 +194,9 @@ async def lifespan(app: FastAPI):
# Startup
setup_logging()
effective_level = logging.getLevelName(log_level)
logging.getLogger(__name__).info(f"Logging system fully initialized (lifespan startup). Effective log level: {effective_level}")
logging.getLogger(__name__).info(
f"Logging system fully initialized (lifespan startup). Effective log level: {effective_level}"
)
# Run migrations before initializing services
try:
@@ -226,8 +223,19 @@ async def lifespan(app: FastAPI):
try:
from routes.utils.celery_manager import celery_manager
celery_manager.start()
logging.info("Celery workers started successfully")
start_workers = os.getenv("START_EMBEDDED_WORKERS", "true").lower() in (
"1",
"true",
"yes",
"on",
)
if start_workers:
celery_manager.start()
logging.info("Celery workers started successfully")
else:
logging.info(
"START_EMBEDDED_WORKERS is false; skipping embedded Celery workers startup."
)
except Exception as e:
logging.error(f"Failed to start Celery workers: {e}")
@@ -257,8 +265,19 @@ async def lifespan(app: FastAPI):
try:
from routes.utils.celery_manager import celery_manager
celery_manager.stop()
logging.info("Celery workers stopped")
start_workers = os.getenv("START_EMBEDDED_WORKERS", "true").lower() in (
"1",
"true",
"yes",
"on",
)
if start_workers:
celery_manager.stop()
logging.info("Celery workers stopped")
else:
logging.info(
"START_EMBEDDED_WORKERS is false; no embedded Celery workers to stop."
)
except Exception as e:
logging.error(f"Error stopping Celery workers: {e}")
@@ -295,17 +314,6 @@ def create_app():
logging.warning(f"Auth system initialization failed or unavailable: {e}")
# Register routers with URL prefixes
from routes.auth.auth import router as auth_router
from routes.system.config import router as config_router
from routes.core.search import router as search_router
from routes.auth.credentials import router as credentials_router
from routes.content.album import router as album_router
from routes.content.track import router as track_router
from routes.content.playlist import router as playlist_router
from routes.content.bulk_add import router as bulk_add_router
from routes.content.artist import router as artist_router
from routes.system.progress import router as prgs_router
from routes.core.history import router as history_router
app.include_router(auth_router, prefix="/api/auth", tags=["auth"])
@@ -449,4 +457,6 @@ if __name__ == "__main__":
except ValueError:
port = 7171
uvicorn.run(app, host=host, port=port, log_level=log_level_str.lower(), access_log=False)
uvicorn.run(
app, host=host, port=port, log_level=log_level_str.lower(), access_log=False
)