File size: 3,081 Bytes
b42075e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Simulation Numérique Server

Plateforme Django pour exécuter des méthodes de simulation numérique avec traitement asynchrone via Celery et Redis.

## Architecture

```
simulationserver/
├── simulations/          # App Django
│   ├── models.py        # Modèles (SimulationMethod, SimulationRun)
│   ├── tasks.py         # Tâches Celery
│   ├── views.py         # API REST
│   ├── views_views.py   # Vues HTML
│   └── templates/       # Templates
├── simulationserver/     # Configuration Django
│   ├── settings.py      # Settings + Celery config
│   ├── celery.py        # Configuration Celery
│   └── urls.py          # URLs
└── manage.py
```

## Installation

```bash
pip install -r simulationserver/requirements.txt
```

## Configuration

1. Installer et démarrer Redis:
```bash
# Sur Debian/Ubuntu
sudo apt install redis-server
sudo systemctl start redis

# Ou avec Docker
docker run -d -p 6379:6379 redis:alpine
```

## Démarrage

1. Appliquer les migrations:
```bash
python manage.py migrate
```

2. Initialiser les méthodes de simulation:
```bash
python manage.py init_simulation_methods
```

3. Démarrer le serveur Django:
```bash
python manage.py runserver 0.0.0.0:8000
```

4. Démarrer le worker Celery (dans un autre terminal):
```bash
cd /root/bookshop
celery -A simulationserver worker --loglevel=info
```

## Utilisation

### Interface Web

- **Accueil**: http://localhost:8000/
- **Liste des méthodes**: http://localhost:8000/methods/
- **Créer une simulation**: http://localhost:8000/run/create/
- **Historique**: http://localhost:8000/runs/

### API REST

- `GET /api/methods/` - Liste des méthodes
- `GET /api/methods/{slug}/` - Détail d'une méthode
- `POST /api/runs/` - Créer et lancer une simulation
- `GET /api/runs/{id}/` - Détail d'une simulation
- `GET /api/runs/{id}/status/` - Statut d'une simulation
- `POST /api/runs/{id}/cancel/` - Annuler une simulation
- `GET /api/runs/recent/` - Simulations récentes

## Modèles

### SimulationMethod

Décrit une méthode de simulation:
- `name`: Nom de la méthode
- `slug`: Identifiant unique
- `description`: Description courte
- `theory`: Documentation/theorie
- `parameters_schema`: Schema JSON des paramètres
- `default_parameters`: Paramètres par défaut

### SimulationRun

Une exécution de simulation:
- `method`: Méthode utilisée
- `parameters`: Paramètres de la simulation
- `status`: PENDING, RUNNING, SUCCESS, FAILURE, CANCELLED
- `progress`: Pourcentage de progression
- `logs`: Logs d'exécution
- `result_data`: Résultats JSON

## Tâches Celery

Les simulations sont exécutées en arrière-plan via Celery:
- Le worker lit les paramètres depuis la base
- Exécute le calcul
- Met à jour le statut et les résultats
- Les pages web font du polling pour le suivi

## Ajouter une nouvelle méthode

1. Ajouter la fonction de simulation dans `simulations/tasks.py`
2. Ajouter le mapping dans `SIMULATION_METHODS`
3. Créer un `SimulationMethod` via l'admin ou `init_simulation_methods`