aee0f09db8
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Reality State Engine
|
|
Hanterar objektets livscykel
|
|
"""
|
|
from enum import Enum
|
|
from datetime import datetime
|
|
|
|
class RealityState(Enum):
|
|
NORMAL = "normal"
|
|
WATCH = "watch"
|
|
WARNING = "warning"
|
|
CRITICAL = "critical"
|
|
VERIFICATION = "verification"
|
|
RESOLVED = "resolved"
|
|
|
|
class StateEngine:
|
|
"""Hanterar state-övergångar"""
|
|
|
|
def __init__(self):
|
|
self.transitions = {
|
|
RealityState.NORMAL: [RealityState.WATCH, RealityState.WARNING, RealityState.CRITICAL],
|
|
RealityState.WATCH: [RealityState.NORMAL, RealityState.WARNING, RealityState.CRITICAL],
|
|
RealityState.WARNING: [RealityState.NORMAL, RealityState.WATCH, RealityState.CRITICAL, RealityState.VERIFICATION],
|
|
RealityState.CRITICAL: [RealityState.VERIFICATION, RealityState.WARNING],
|
|
RealityState.VERIFICATION: [RealityState.RESOLVED, RealityState.CRITICAL],
|
|
RealityState.RESOLVED: [RealityState.NORMAL]
|
|
}
|
|
|
|
def calculate_state(self, risks):
|
|
"""Beräkna state baserat på risker"""
|
|
if not risks:
|
|
return RealityState.NORMAL
|
|
|
|
severities = [r["severity"] for r in risks]
|
|
|
|
if "critical" in severities:
|
|
return RealityState.CRITICAL
|
|
elif "high" in severities:
|
|
return RealityState.WARNING
|
|
elif "medium" in severities:
|
|
return RealityState.WATCH
|
|
|
|
return RealityState.NORMAL
|
|
|
|
def can_transition(self, current_state, new_state):
|
|
"""Kontrollera om övergång är tillåten"""
|
|
return new_state in self.transitions.get(current_state, [])
|
|
|
|
def transition(self, road_id, current_state, new_state, reason=""):
|
|
"""Utför state-övergång"""
|
|
if not self.can_transition(current_state, new_state):
|
|
return None
|
|
|
|
return {
|
|
"road_id": road_id,
|
|
"from_state": current_state.value,
|
|
"to_state": new_state.value,
|
|
"timestamp": datetime.now().isoformat(),
|
|
"reason": reason
|
|
}
|
|
|
|
if __name__ == "__main__":
|
|
engine = StateEngine()
|
|
|
|
# Testa
|
|
risks = [{"severity": "critical"}]
|
|
state = engine.calculate_state(risks)
|
|
print(f"State med critical risk: {state.value}")
|
|
|
|
risks = [{"severity": "high"}]
|
|
state = engine.calculate_state(risks)
|
|
print(f"State med high risk: {state.value}")
|
|
|
|
risks = []
|
|
state = engine.calculate_state(risks)
|
|
print(f"State utan risker: {state.value}")
|