Files
gh-christianlouis-docuelevate/app/views/status.py
2026-03-08 15:10:46 +00:00

107 lines
3.7 KiB
Python

"""
Status and configuration views for the application.
"""
import logging
import os
from datetime import datetime
from fastapi import Request, status
from fastapi.responses import RedirectResponse
from app.utils.config_validator import get_provider_status
from app.views.base import APIRouter, require_login, settings, templates
logger = logging.getLogger(__name__)
router = APIRouter()
def _require_admin(request: Request):
"""Return the session user if they are an admin, else return None."""
user = request.session.get("user")
if not user or not user.get("is_admin"):
user_email = user.get("email", "anonymous") if user else "anonymous"
logger.warning(f"Non-admin user {user_email} attempted to access /status")
return None
return user
@router.get("/status")
@require_login
async def status_dashboard(request: Request):
"""
Status dashboard showing all configured integration targets (admin only).
"""
user = _require_admin(request)
if user is None:
return RedirectResponse(url="/", status_code=status.HTTP_302_FOUND)
# Get provider status
providers = get_provider_status()
# Get build date from settings
build_date = getattr(settings, "build_date", "Unknown")
# Try to get container information
container_info = {}
try:
# Check for Docker environment
if os.path.exists("/.dockerenv"):
# We're inside a Docker container
container_info["is_docker"] = True
# Try to get container ID
try:
with open("/proc/self/cgroup", "r") as f:
for line in f:
if "docker" in line:
container_id = line.split("/")[-1].strip()
container_info["id"] = container_id[:12] # Short ID format
break
except Exception:
container_info["id"] = "Unknown"
# Get Git commit SHA from settings
try:
git_sha = settings.git_sha
container_info["git_sha"] = git_sha[:7] if git_sha and git_sha != "unknown" else "Unknown"
except Exception:
container_info["git_sha"] = "Unknown"
# Try to get runtime information
try:
container_info["runtime_info"] = settings.runtime_info
except Exception: # noqa: S110
pass # Ignore if runtime_info not available
else:
container_info["is_docker"] = False
# If not in Docker, get Git info from settings
try:
git_sha = settings.git_sha
container_info["git_sha"] = git_sha[:7] if git_sha and git_sha != "unknown" else "Unknown"
except Exception:
container_info["git_sha"] = "Unknown"
except Exception:
container_info = {"is_docker": False, "id": "Unknown", "git_sha": "Unknown"}
# Get notification URLs for the notification box
notification_urls = getattr(settings, "notification_urls", [])
# Get release codename if available
release_name = getattr(settings, "release_name", None)
return templates.TemplateResponse(
"status_dashboard.html",
{
"request": request,
"providers": providers,
"app_version": settings.version,
"release_name": release_name,
"build_date": build_date,
"debug_enabled": getattr(settings, "debug", False),
"last_check": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"container_info": container_info,
"settings": {"notification_urls": notification_urls},
},
)