PyRunner / core /views /dashboard.py
Akoda35's picture
Upload 18 files
1f6c983 verified
Raw
History Blame Contribute Delete
2.53 kB
"""
Dashboard view for the control panel.
"""
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.shortcuts import render
from core.models import Environment, Run, Script
from core.services.dashboard_service import DashboardService
from core.services.system_info_service import SystemInfoService
@login_required
def dashboard_view(request):
"""Main dashboard view with overview statistics."""
# Get statistics from service
stats = DashboardService.get_statistics()
# Legacy counts (for backwards compatibility)
runs_count = Run.objects.count()
environments_count = Environment.objects.filter(is_active=True).count()
success_count = Run.objects.filter(status=Run.Status.SUCCESS).count()
failed_count = Run.objects.filter(
status__in=[Run.Status.FAILED, Run.Status.TIMEOUT]
).count()
# Recent activity
recent_runs = Run.objects.select_related("script", "triggered_by").order_by(
"-created_at"
)[:5]
recent_scripts = Script.objects.select_related("environment").order_by(
"-updated_at"
)[:5]
# New widgets
recent_failures = DashboardService.get_recent_failures()
upcoming_runs = DashboardService.get_upcoming_scheduled_runs()
system_health = DashboardService.get_system_health()
system_resources = SystemInfoService.get_system_resources()
context = {
# Statistics cards
"scripts_count": stats["total_scripts"],
"active_scripts_count": stats["active_scripts"],
"runs_count": runs_count,
"runs_today": stats["runs_today"],
"runs_this_week": stats["runs_this_week"],
"success_rate": stats["success_rate"],
"queue_size": stats["queue_size"],
"environments_count": environments_count,
"success_count": success_count,
"failed_count": failed_count,
# Recent activity
"recent_runs": recent_runs,
"recent_scripts": recent_scripts,
# New widgets
"recent_failures": recent_failures,
"upcoming_runs": upcoming_runs,
# System health
"system_health": system_health,
# System resources (CPU, RAM, Storage)
"system_resources": system_resources,
}
return render(request, "cpanel/dashboard.html", context)
@login_required
def system_resources_api(request):
"""AJAX endpoint for system resource metrics."""
resources = SystemInfoService.get_system_resources()
return JsonResponse(resources)