fix: show running simulation correctly, stop old ones when starting new

Frontend:
- Load simulations now prioritizes running simulation over most recent
- Clear signals before loading new simulation

Backend:
- When starting new simulation, stop any existing running simulation first
- Previously would return existing running simulation (confusing UX)
This commit is contained in:
shokollm
2026-04-12 00:10:10 +00:00
parent 79c3ec7d16
commit 52adc93b25
2 changed files with 15 additions and 14 deletions

View File

@@ -131,11 +131,12 @@ async def start_simulation(
.first() .first()
) )
if existing_simulation: if existing_simulation:
# Return existing running simulation # Stop the existing simulation first
if existing_simulation.id in running_simulations: if existing_simulation.id in running_simulations:
engine = running_simulations[existing_simulation.id] running_simulations[existing_simulation.id].stop()
existing_simulation.signals = engine.get_signals() del running_simulations[existing_simulation.id]
return existing_simulation existing_simulation.status = "stopped"
db.commit()
settings = get_settings() settings = get_settings()
simulation_id = str(uuid.uuid4()) simulation_id = str(uuid.uuid4())
@@ -163,9 +164,7 @@ async def start_simulation(
config={ config={
"token": config.token, "token": config.token,
"chain": config.chain, "chain": config.chain,
"duration_seconds": config.duration_seconds,
"check_interval": check_interval, "check_interval": check_interval,
"auto_execute": config.auto_execute,
}, },
signals=[], signals=[],
) )

View File

@@ -44,15 +44,17 @@
async function loadSimulations() { async function loadSimulations() {
try { try {
const simulations = await api.simulate.list(botId); const simulations = await api.simulate.list(botId);
if (simulations.length > 0) {
const latest = simulations[0]; // Find the most recent running simulation, or fall back to most recent
setCurrentSimulation(latest); let current = simulations.find(s => s.status === 'running') || simulations[0];
if (latest.signals) {
addSignals(latest.signals); if (current) {
} setCurrentSimulation(current);
if (latest.status === 'running') { clearSignals();
isRunning = true; if (current.signals && current.signals.length > 0) {
addSignals(current.signals);
} }
isRunning = current.status === 'running';
} }
} catch (e) { } catch (e) {
console.error('Failed to load simulations:', e); console.error('Failed to load simulations:', e);