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:
@@ -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=[],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user