File size: 3,902 Bytes
dc3bbe4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9dabbe0
dc3bbe4
9dabbe0
 
 
dc3bbe4
 
 
 
 
9dabbe0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dc3bbe4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9dabbe0
 
 
 
 
dc3bbe4
 
 
 
 
9dabbe0
 
 
 
dc3bbe4
 
 
 
9dabbe0
dc3bbe4
 
 
 
 
 
 
 
 
 
 
9dabbe0
 
 
 
 
 
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
118
119
120
121
122
123
124
125
126
127
128
# Locust Load Testing - Skill Classification API

Questa directory contiene gli script per il load testing della Skill Classification API utilizzando [Locust](https://locust.io/).

## Prerequisiti

Assicurati di avere Python installato e installa Locust:

```bash
pip install locust
```

## Avvio del Test

### 1. Avvia Locust

Dalla directory `monitoring/locust/`, esegui:

```bash
locust -f locustfile.py
```

### 2. Accedi alla Web UI

Apri il browser e vai a: **http://localhost:8089**

### 3. Configura il Test

Nella Web UI, configura i seguenti parametri:

| Parametro | Descrizione | Valore di Default |
|-----------|-------------|-------------------|
| **Host** | URL dell'API da testare | `https://dacrow13-hopcroft-skill-classification.hf.space` |
| **Number of users** | Numero totale di utenti simulati | 5-10 (HF Spaces) / 10-100 (locale) |
| **Spawn rate** | Utenti da creare al secondo | 1-2 |

### 4. Avvia il Test

Clicca su **"Start swarming"** per avviare il test di carico.

## Ambienti di Test

Lo script è preconfigurato per testare l'API deployata su **HuggingFace Spaces**:

| Ambiente | URL | Note |
|----------|-----|------|
| **HuggingFace Spaces** (default) | `https://dacrow13-hopcroft-skill-classification.hf.space` | Produzione |
| Docker locale | `http://localhost:8080` | Sviluppo con Docker |
| Uvicorn locale | `http://localhost:8000` | Sviluppo senza Docker |

Per testare un ambiente diverso, usa il flag `--host`:

```bash
locust -f locustfile.py --host http://localhost:8080
```

## Task Implementati

Lo script simula il comportamento di utenti reali con i seguenti task:

| Task | Endpoint | Metodo | Peso | Descrizione |
|------|----------|--------|------|-------------|
| **Predizione Singola** | `/predict` | POST | 3 | Classifica un singolo issue text. Task principale, eseguito più frequentemente. |
| **Predizione Batch** | `/predict/batch` | POST | 1 | Classifica multipli issue text in una singola richiesta. |
| **Monitoraggio e Storia** | `/predictions`, `/health` | GET | 1 | Visualizza la cronologia delle predizioni e verifica lo stato del sistema. |

### Distribuzione dei Pesi

Con i pesi configurati (3:1:1), la distribuzione approssimativa delle richieste è:
- **60%** - Predizione Singola
- **20%** - Predizione Batch  
- **20%** - Monitoraggio e Storia

### Tempo di Attesa

Ogni utente attende tra **1 e 5 secondi** tra un task e l'altro per simulare un comportamento realistico.

## Metriche Monitorate

Durante il test, Locust fornisce le seguenti metriche in tempo reale:

- **RPS (Requests Per Second)**: Numero di richieste al secondo
- **Response Time**: Tempo medio/mediano/percentili di risposta
- **Failure Rate**: Percentuale di richieste fallite
- **Active Users**: Numero di utenti attualmente attivi

## Opzioni Avanzate

### Esecuzione Headless (senza UI)

```bash
# Test su HuggingFace Spaces (default)
locust -f locustfile.py --headless -u 5 -r 1 -t 2m

# Test su Docker locale
locust -f locustfile.py --headless -u 50 -r 5 -t 5m --host http://localhost:8080
```

| Opzione | Descrizione |
|---------|-------------|
| `--headless` | Esegui senza Web UI |
| `-u 5` | 5 utenti simulati |
| `-r 1` | 1 utente creato al secondo |
| `-t 2m` | Durata del test: 2 minuti |
| `--host` | URL dell'API (override) |

### Esportazione Risultati

```bash
locust -f locustfile.py --headless -u 5 -r 1 -t 2m --csv=results
```

Questo creerà file CSV con i risultati del test.

## Struttura File

```
monitoring/locust/
├── locustfile.py   # Script principale di load testing
└── README.md       # Questa documentazione
```

## Note Importanti

- **HuggingFace Spaces**: Usa un numero ridotto di utenti (5-10) per non sovraccaricare il servizio gratuito
- **Latenza**: I test su HF Spaces avranno latenze maggiori rispetto ai test locali
- **Cold Start**: Il primo request potrebbe essere lento se lo Space è in sleep mode