feat: Enhance Docker setup and application status reporting with build date and container info
This commit is contained in:
+16
-4
@@ -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
@@ -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
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user