Agentic-Reliability-Framework-v4 / infra_simulator.py
petter2025's picture
Create infra_simulator.py
9de5703 verified
raw
history blame
1.42 kB
# infra_simulator.py
import random
from typing import Dict, List, Optional
class InfraSimulator:
"""Simulates a dynamic infrastructure. Maintains per‑session state."""
def __init__(self):
self.reset()
def reset(self):
self.components = {
"switch-1": {"type": "switch", "status": "up", "connections": ["server-1", "server-2"]},
"server-1": {"type": "server", "status": "up", "connections": ["switch-1"], "services": ["db"]},
"server-2": {"type": "server", "status": "up", "connections": ["switch-1"], "services": ["web"]},
"service-db": {"type": "service", "status": "up", "runs_on": "server-1"},
"service-web": {"type": "service", "status": "up", "runs_on": "server-2"},
}
self.fault_mode: Optional[str] = None
def set_fault(self, fault: str):
self.reset() # start fresh
self.fault_mode = fault
if fault == "switch_down":
self.components["switch-1"]["status"] = "down"
elif fault == "server_overload":
self.components["server-1"]["status"] = "overloaded"
elif fault == "cascade":
self.components["switch-1"]["status"] = "down"
self.components["server-1"]["status"] = "down"
self.components["service-db"]["status"] = "down"
# etc.
def read_state(self) -> Dict:
return self.components