36191-vm/core/views.py
Flatlogic Bot 903669d6ea ger
2025-11-24 09:58:56 +00:00

66 lines
2.4 KiB
Python

from django.shortcuts import render, redirect, get_object_or_404
from .models import Unit
from .forms import UnitForm
import subprocess
import os
import signal
SIMULATION_PID_FILE = 'simulation.pid'
def dashboard(request):
return render(request, 'core/dashboard.html', {'project_name': 'Project Lifeline'})
def simulation_control(request):
pid = None
if os.path.exists(SIMULATION_PID_FILE):
with open(SIMULATION_PID_FILE, 'r') as f:
try:
pid = int(f.read().strip())
# Check if the process is still running
os.kill(pid, 0)
except (ValueError, OSError):
pid = None
if os.path.exists(SIMULATION_PID_FILE):
os.remove(SIMULATION_PID_FILE)
if request.method == 'POST':
if 'start' in request.POST and not pid:
# Start the simulation
process = subprocess.Popen(['python3', 'manage.py', 'run_simulation'])
with open(SIMULATION_PID_FILE, 'w') as f:
f.write(str(process.pid))
pid = process.pid
return redirect('simulation_control')
elif 'stop' in request.POST and pid:
# Stop the simulation
try:
os.kill(pid, signal.SIGTERM)
if os.path.exists(SIMULATION_PID_FILE):
os.remove(SIMULATION_PID_FILE)
pid = None
except OSError:
# Process might have already died
if os.path.exists(SIMULATION_PID_FILE):
os.remove(SIMULATION_PID_FILE)
pid = None
return redirect('simulation_control')
return render(request, 'core/simulation_control.html', {'simulation_running': pid is not None, 'project_name': 'Project Lifeline'})
def unit_list(request):
units = Unit.objects.all()
return render(request, 'core/unit_list.html', {'units': units, 'project_name': 'Project Lifeline'})
def unit_update(request, pk):
unit = get_object_or_404(Unit, pk=pk)
if request.method == 'POST':
form = UnitForm(request.POST, instance=unit)
if form.is_valid():
form.save()
return redirect('unit_list')
else:
form = UnitForm(instance=unit)
return render(request, 'core/unit_form.html', {'form': form, 'unit': unit, 'project_name': 'Project Lifeline'})