Skip to content

Repository files navigation

AMS SLA Dashboard

Dashboard web per il monitoraggio dei ticket Redmine con calcolo SLA, alimentata da MongoDB.

Architettura

Redmine API
    │
    ▼
redmine_fetcher.py  ──►  MongoDB (tickets)
                              │
                              ▼
                        web_server.py  ──►  dashboard.html (browser)
File Ruolo
redmine_fetcher.py Recupera i ticket da Redmine, calcola i tempi SLA e salva su MongoDB
web_server.py Server HTTP che espone la dashboard e le API JSON
dashboard.html Frontend della dashboard
config.json Configurazione centralizzata (connessioni, SLA, filtri, orari)

Prerequisiti

  • Python 3.12+
  • MongoDB (locale o remoto)
  • Accesso all'istanza Redmine con API key

Installazione

python -m venv venv
source venv/bin/activate        # Linux/macOS
# oppure: venv\Scripts\activate  # Windows

pip install -r requirements.txt

Configurazione

Copia il template e compila i valori:

cp config.example.json config.json

Modifica config.json con i tuoi dati:

{
  "redmine": {
    "url": "https://tua-istanza.redmine.it",
    "api_key": "<la-tua-api-key>"
  },
  "mongodb": {
    "uri": "mongodb://localhost:27017",
    "database": "ams_dashboard",
    "collection": "tickets"
  }
}

Sezioni principali

Sezione Descrizione
redmine URL e API key dell'istanza Redmine
mongodb URI, database e collection MongoDB
filtri_ticket Filtri per stato, tracker e custom field dei progetti
sla Target ore per presa in carico e risoluzione per priorità
mappa_priorita Normalizzazione dei nomi priorità Redmine → chiavi SLA
stati_* Nomi degli stati Redmine per nuovo/risolto/chiuso/attese
orario_lavorativo Fasce orarie lavorative per il calcolo ore SLA
stima_pic Parametri della stima statistica del tempo di presa in carico
server Porta, auto-refresh e apertura automatica del browser

SLA predefiniti

Priorità Presa in carico Risoluzione
Urgente 2 ore 8 ore
Alta 4 ore 12 ore
Media 12 ore 24 ore
Bassa 24 ore

I tempi sono calcolati in ore lavorative (lunedì–venerdì, 9–13 e 14–18).

Utilizzo

1. Sincronizzazione dati (una tantum)

python redmine_fetcher.py

2. Sincronizzazione continua (daemon)

python redmine_fetcher.py --daemon

Il daemon esegue un ciclo ogni schedule.intervallo_minuti minuti (default 30).

3. Avvio della dashboard

python web_server.py

La dashboard si apre automaticamente su http://localhost:8765 (modificabile in config.json).

API del server

Endpoint Descrizione
GET / Serve la dashboard HTML
GET /api/issues?start_date=YYYY-MM-DD Restituisce i ticket in formato JSON
GET /api/config Configurazione runtime (SLA, auto-refresh, ultimo fetch)

Logica SLA

Per ogni ticket vengono calcolati:

  • ore_presa_in_carico — ore lavorative dalla creazione al primo cambio di stato
  • ore_risoluzione — ore lavorative dalla creazione alla risoluzione/chiusura
  • ore_attesa_cliente — ore lavorative totali nello stato "In attesa cliente"
  • ore_attesa_interna — ore lavorative totali nello stato "In attesa interna"

Lo stato SLA può essere: ok (< 80% target), warning (80–100%), breach (> 100%), n/a (nessun target definito).

Stima statistica presa in carico

Per i ticket ancora nello stato "Nuovo", il fetcher calcola una stima dell'orario atteso di presa in carico basata sul percentile 75 storico per combinazione priorità+tracker. La finestra temporale è configurabile (stima_pic.giorni_primari, con fallback a giorni_fallback se i campioni sono insufficienti).

Struttura del documento MongoDB

{
  "_id": 1234,
  "subject": "Titolo del ticket",
  "project": "Nome progetto",
  "tracker": "Bug",
  "priority": "Alta",
  "priority_key": "Alta",
  "categoria": "AMS contratto standard",
  "status": "In corso",
  "assigned_to": "Mario Rossi",
  "created_on": "2026-01-15T10:30:00Z",
  "ore_presa_in_carico": 3.5,
  "ore_risoluzione": null,
  "ore_attesa_cliente": 1.0,
  "ore_attesa_interna": null,
  "ore_trascorse": 12.0,
  "status_pic": "ok",
  "status_res": "warning",
  "pic_scadenza_sla": "2026-01-15T14:30:00+00:00",
  "pic_stima_statistica": "2026-01-15T13:15:00+00:00",
  "aggiornato_il": "2026-01-15T11:00:00"
}

About

Redmine dashboard to monitor tickets in one pages

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages