Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
"""
SQLAlchemy database models for simulation persistence.
"""
from sqlalchemy import Column, String, Integer, Float, Boolean, DateTime
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.types import JSON
from datetime import datetime
from ..database.connection import Base
import os
# Utiliser JSONB pour PostgreSQL, JSON pour SQLite
JsonType = JSONB if "postgresql" in os.getenv("DATABASE_URL", "") else JSON
class SimulationRun(Base):
"""Table pour stocker les résultats de simulation."""
__tablename__ = "simulation_runs"
id = Column(String, primary_key=True) # UUID session_id
created_at = Column(DateTime, default=datetime.utcnow, nullable=False, index=True)
# Configuration
config = Column(JsonType, nullable=False)
# Métriques principales (dénormalisées pour performance)
total_requests_arrived = Column(Integer, nullable=False, index=True)
total_requests_completed = Column(Integer, nullable=False)
average_system_time = Column(Float, nullable=False)
average_customers_in_system = Column(Float, nullable=False)
is_stable = Column(Boolean, nullable=False, index=True)
# Résultats complets (JSON)
coordinator_stats = Column(JsonType, nullable=False)
server_stats = Column(JsonType, nullable=False)
time_series = Column(JsonType)
processing_time_histogram = Column(JsonType)
status = Column(String, nullable=False, default="completed", index=True)
class SavedConfiguration(Base):
"""Table pour stocker les configurations sauvegardées."""
__tablename__ = "saved_configurations"
id = Column(String, primary_key=True) # UUID
name = Column(String, nullable=False)
description = Column(String)
config = Column(JsonType, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False, index=True)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)