feat: Enhance Docker setup and application status reporting with build date and container info

This commit is contained in:
Christian Krakau-Louis
2025-04-07 00:43:14 +02:00
parent c7ddf77cb2
commit d66fef7ad4
6 changed files with 109 additions and 36 deletions
+16 -4
View File
@@ -1,18 +1,19 @@
"""
General routes for the application homepage and basic pages.
"""
from fastapi import Request, HTTPException
from fastapi import Request, HTTPException, Depends
from fastapi.responses import FileResponse
from pathlib import Path
from datetime import date
from sqlalchemy.orm import Session
from app.views.base import APIRouter, templates, require_login
from app.views.base import APIRouter, templates, require_login, get_db
from app.utils.config_validator import get_provider_status, validate_storage_configs
router = APIRouter()
@router.get("/", include_in_schema=False)
async def serve_index(request: Request):
async def serve_index(request: Request, db: Session = Depends(get_db)):
"""Serve the index/home page."""
# Get provider information from config validator
providers = get_provider_status()
@@ -27,9 +28,20 @@ async def serve_index(request: Request):
's3', 'ftp', 'webdav',
'google_drive', 'onedrive'])
# Query the actual file count from the database
processed_files = 0
try:
# Import the model here to avoid circular imports
from app.models import FileRecord
processed_files = db.query(FileRecord).count()
except Exception as e:
# Log error but continue (don't break the page if DB query fails)
from app.views.base import logger
logger.error(f"Error counting files: {str(e)}")
# Create stats object to pass to the template
stats = {
"processed_files": 0, # Placeholder - would need actual DB query
"processed_files": processed_files,
"active_integrations": configured_providers,
"storage_targets": configured_storage_targets
}
+67 -1
View File
@@ -3,6 +3,8 @@ Status and configuration views for the application.
"""
from fastapi import Request
from datetime import datetime
import os
import subprocess
from app.views.base import APIRouter, templates, require_login, settings
@@ -19,14 +21,78 @@ async def status_dashboard(request: Request):
# 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'
# Try to get Git commit SHA from runtime info
try:
# First check runtime info directory
if os.path.exists('/app/runtime_info/GIT_SHA'):
with open('/app/runtime_info/GIT_SHA', 'r') as f:
git_sha = f.read().strip()
# Then try environment variable
else:
git_sha = os.environ.get('GIT_COMMIT_SHA', '')
# If still not found, try the original file location
if not git_sha and os.path.exists('/.git-commit-sha'):
with open('/.git-commit-sha', 'r') as f:
git_sha = f.read().strip()
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:
if os.path.exists('/app/runtime_info/RUNTIME_INFO'):
with open('/app/runtime_info/RUNTIME_INFO', 'r') as f:
container_info['runtime_info'] = f.read().strip()
except Exception:
pass
else:
container_info['is_docker'] = False
# If not in Docker, try to get Git info directly
try:
git_sha = subprocess.check_output(['git', 'rev-parse', 'HEAD'],
stderr=subprocess.DEVNULL,
text=True).strip()[:7]
container_info['git_sha'] = git_sha
except (subprocess.SubprocessError, FileNotFoundError):
container_info['git_sha'] = 'Unknown'
except Exception:
container_info = {'is_docker': False, 'id': 'Unknown', 'git_sha': 'Unknown'}
return templates.TemplateResponse(
"status_dashboard.html",
{
"request": request,
"providers": providers,
"app_version": settings.version,
"build_date": build_date,
"debug_enabled": getattr(settings, 'debug', False),
"last_check": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
"last_check": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"container_info": container_info
}
)