Redmine Dashboards
DashboardsCruscotti costruiti sulle query salvate che hai già: una griglia drag-and-drop di riquadri KPI, tabelle e quindici tipi di grafico, aggregati in SQL e limitati a ciò che chi guarda ha il diritto di vedere.
Più server: $399

- Tipi di widget
- 23
- Varianti di grafico
- 15
- Redmine
- 4 · 5 · 6 · 7
- Database
- MySQL, MariaDB, PostgreSQL
- Patch al core
- Nessuna
Costruzione in drag-and-drop
Una griglia ridimensionabile e riordinabile che si salva da sola mentre lavori. Disponi KPI, grafici e tabelle finché il cruscotto non racconta ciò che deve, senza file di layout e senza ricaricare la pagina.
Quindici tipi di grafico
Barre, barre orizzontali, barre impilate, linea, multilinea, area, torta, ciambella, radar, polare, tachimetro, imbuto, mappa di calore, treemap e anello di avanzamento, disegnati con Apache ECharts in chiaro e in scuro.
Le tue query salvate, visualizzate
Punta un widget su una query salvata e ne eredita il filtro, campi personalizzati, osservatori e sottoprogetti compresi. Oppure trasforma la query in un cruscotto intero con un clic.
Aggregato in SQL
GROUP BY, COUNT, SUM e AVG vengono eseguiti nel database, così centomila richieste vengono contate anziché istanziate. I risultati sono in cache per utente, widget e filtri attivi.
Ritagliato su chi guarda
Ogni lettura parte da Issue.visible(user), TimeEntry.visible(user) e Query.visible(user): nessun grafico può sommare un progetto di cui chi legge non è membro.
Filtri, aggiornamento e drill-down
Una barra dei filtri riadatta l’intero cruscotto, un intervallo per cruscotto tiene aggiornato uno schermo a parete e ogni barra, spicchio e cella porta alla lista delle richieste che ci sta dietro.
Guardalo in funzione dentro Redmine
Ogni screenshot qui proviene da un’installazione standard di Redmine 6 con il plugin copiato in plugins/. I cruscotti stanno sotto l’intestazione e i menu di Redmine, perché è lì che girano.
Costruire un cruscotto


Widget


Condividere e passare da uno all’altro


La query è già il report
Niente qui ti chiede di descrivere i tuoi dati una seconda volta. Filtra una lista di richieste come hai sempre fatto, salvala, e quella query salvata diventa l’ambito su cui un widget aggrega: esattamente la relazione che Redmine usa per disegnare la lista.
| Passo | Cosa fai | Cosa ottieni |
|---|---|---|
| 1. Salvare una query | Filtrare la lista delle richieste — campi personalizzati, osservatori, sottoprogetti — e premere Salva | Una query con un nome, visibile a chi l’hai condivisa |
| 2. Puntarci un widget | Scegliere quella query nella finestra del widget | Origine dati e un raggruppamento predefinito sensato, dedotti per te |
| 3. Oppure generare tutto il cruscotto | Fare clic su «Dalla query» | Un cruscotto di riquadri KPI e grafici legati a quella query, in una sola richiesta |
Configurato da menu a tendina, non da SQL
Un widget è un’origine, una dimensione, una misura e un’aggregazione. Raggruppa le richieste per stato, priorità, tracker, assegnatario o qualsiasi campo data suddiviso in giorni, settimane, mesi o anni; contale, somma le ore stimate oppure fai la media del completamento. Nessuno in squadra scrive SQL per ottenere un grafico e, poiché non c’è SQL da scrivere, non esiste query capace di superare i permessi di chi la sta leggendo.

Ogni widget si configura da un unico modulo
Ogni widget, che sia un KPI, delle barre o una ciambella, si imposta nello stesso modulo breve: un titolo e un tipo, un’origine dati, una query salvata facoltativa per i filtri, una misura e un raggruppamento con Top-N. Cambia il tipo e il modulo si adatta.




Un’unica pagina di impostazioni per gli amministratori
In Amministrazione › Plugin › Redmine Charts si impostano la cache dei risultati per utente, il TTL della cache (5–86400 secondi, predefinito 300), il tema chiaro o scuro predefinito e un intervallo di aggiornamento automatico predefinito, dove 0 lo disattiva. È la schermata di impostazioni dei plugin di Redmine stesso.
23 tipi di widget, e spazio per i tuoi
Ogni tipo è metadato in un registro, così l’interfaccia di configurazione si costruisce dalla dichiarazione del widget stesso invece che da un modulo scritto a mano per ogni grafico.
| Famiglia | Tipi | Si configura con |
|---|---|---|
| Grafici | Barre, barre orizzontali, barre impilate, linea, multilinea, area, torta, ciambella, radar, polare, tachimetro, imbuto, mappa di calore, treemap, anello di avanzamento | Origine, dimensione, misura, aggregazione |
| KPI / numero | Un singolo valore aggregato, con un filtro proprio | count · sum · avg · min · max |
| Tabella | Una griglia paginata sugli stessi dati filtrati dai permessi | Selettore di colonne e filtri |
| Contenuto | Markdown, note, HTML, iframe, flusso attività, richieste recenti | Testo libero, o uno dei flussi di Redmine |
Disegnato con Apache ECharts
Quindici varianti, pensate per chiaro e scuro, ridisegnate al ridimensionamento e ancora leggibili su uno schermo a parete. Il bundle è già compilato dentro il pacchetto, quindi l’installazione non richiede né Node né un passaggio di build.
Ogni segmento scende nel dettaglio
Un clic su una barra, uno spicchio o una cella della mappa di calore apre la lista delle richieste di Redmine filtrata esattamente su quelle. I numeri restano verificabili, perché puoi sempre atterrare sulle righe che li compongono.
Filtri globali e aggiornamento automatico
Una barra dei filtri riadatta tutti i widget del cruscotto in un colpo solo, e un intervallo di aggiornamento per cruscotto tiene aggiornato lo schermo in corridoio. Zero disattiva l’aggiornamento.
Modelli e progetti esportabili
Salva un cruscotto come modello riutilizzabile, duplicalo per ogni squadra, oppure esportalo come progetto JSON e importalo in un’altra istanza: dalla staging alla produzione senza ricostruirlo a mano.
Un plugin, un cruscotto per ogni squadra
Una responsabile delle consegne, un help desk e un singolo sviluppatore hanno costruito questi cruscotti in pochi minuti, partendo da query salvate che avevano già.





Due origini integrate, e la tua accanto
Richieste e tempo dedicato arrivano con dimensioni e misure già dichiarate, entrambe dietro gli ambiti di visibilità di Redmine. Un’origine aggiunta da un altro plugin riceve esattamente lo stesso trattamento.
| Origine | Dimensioni | Misure |
|---|---|---|
| Richieste | Stato, priorità, tracker, progetto, assegnatario, autore, categoria, versione, creazione, aggiornamento, scadenza | Numero di richieste, ore stimate, completamento |
| Tempo dedicato | Progetto, utente, attività, data | Ore, numero di voci |
| La tua | Quello che registri | Quello che registri |
Estendere significa registrare, non correggere
Un’origine dati è una classe con un nome, le sue dimensioni, le sue misure e un base_scope filtrato dai permessi; un tipo di widget è un hash. Registra l’uno o l’altro dal init.rb del tuo plugin con RedmineCharts.register_data_source oppure register_widget_type e comparirà subito nell’interfaccia di configurazione, ereditando filtri, cache e drill-down. Per farlo non si modifica nulla di questo plugin.
Nessuno aggrega ciò che non può leggere
Un cruscotto è un modo rapido per far uscire un numero, perciò ogni lettura parte dall’ambito di chi guarda invece di finire con un controllo su di esso.
Prima la visibilità, poi il raggruppamento
Issue.visible(user), TimeEntry.visible(user) e Query.visible(user) restringono la relazione prima che venga contata una sola riga. Un totale proveniente da un progetto di cui non sei membro non può comparire in nessun widget, perché quelle righe non sono mai state nell’insieme.
Quattro permessi granulari
Vedere i cruscotti, crearli, gestirli tutti, gestire i modelli: ciascuno assegnabile per ruolo. E tutto resta spento finché qualcuno non attiva il modulo Cruscotti per quel progetto.
Condivisione tramite le appartenenze
Concedi un cruscotto a utenti, gruppi, ruoli o interi progetti. Ogni richiesta rivaluta viewable_by? ed editable_by? attraverso le appartenenze di Redmine, e non tramite una lista di accessi parallela destinata a divergere.
Niente lascia il server
Il frontend parla solo con l’API JSON di questo plugin, sul tuo Redmine, usando la sessione e il token CSRF già presenti. Nessun servizio esterno, nessuna chiamata di licenza, nessuna telemetria.
Fatto per reggere un’istanza grande
Contare centomila richieste non dovrebbe voler dire caricare centomila oggetti. Qui non lo vuol dire.
| Aspetto | Come viene gestito |
|---|---|
| Aggregazione | GROUP BY, COUNT, SUM e AVG girano in SQL: le righe non vengono mai istanziate solo per essere contate |
| Dimensioni molto ampie | Il ripiegamento Top-N tiene piccola la risposta quando una dimensione ha migliaia di valori |
| Visite ripetute | Risultati in cache per utente, data di modifica del widget e filtri attivi tramite Rails.cache; il TTL è un’impostazione e Redis funziona così com’è |
| Un widget lento | I widget si caricano in modo indipendente, così una query pesante non blocca mai l’intero cruscotto |
| Bundle JS mancante | Rails rende lato server i dati di ogni widget come ripiego, così la pagina degrada invece di restare bianca |
Portabile per scelta, non per caso
Il supporto tra versioni e tra database è progettato fin dall’inizio: migrazioni, memorizzazione JSON e raggruppamento per data sono stati scritti per reggere le differenze.
| Aspetto | Supportato | Come |
|---|---|---|
| Redmine | 4.x, 5.x, 6.x, 7.x | Dichiara requires_redmine version_or_higher 4.0.0, senza override del core che possano invecchiare |
| Rails | 5.2 → 8.0 | Le migrazioni puntano alla base 5.2, che ogni versione fino alla 8.0 comprende |
| Ruby | 2.5+ | Corrisponde al requisito minimo di Redmine 4 |
| Database | MySQL, MariaDB, PostgreSQL | Il JSON sta in normali colonne di testo, con DDL identico ovunque, e un serializzatore sceglie la forma giusta per ogni versione di Rails |
| Raggruppamento per data | Giorno, settimana, mese, anno | Raggruppa con un CAST(col AS DATE) portabile, poi ripiega in intervalli lato Ruby: nessun SQL specifico di un fornitore |
| Rieseguire le migrazioni | Sicuro | Scritte in modo difensivo, così un aggiornamento interrotto si può ripetere |
Automatizzabile dal primo giorno
Ogni endpoint vive sotto /redmine_charts/api, risponde in JSON e applica esattamente i permessi dell’interfaccia: un cruscotto può quindi essere creato dalla CI o generato uno per squadra.
| Metodo | Percorso | Cosa fa |
|---|---|---|
| GET | /dashboards | Tutti i cruscotti visibili a chi chiama |
| POST | /dashboards | Crearne uno |
| GET | /dashboards/:id | Ottenere un cruscotto con i suoi widget |
| PATCH | /dashboards/:id | Cambiare nome, disposizione o impostazioni |
| POST | /dashboards/:id/duplicate | Clonarlo, widget compresi |
| GET | /dashboards/:id/export | Esportare un progetto JSON |
| POST | /dashboards/import | Creare un cruscotto da un progetto |
| POST | /dashboards/:id/widgets | Aggiungere un widget |
| GET | /widgets/:id/data | Dati del widget aggregati e filtrati dai permessi |
| GET | /meta/data_sources | Origini, dimensioni, misure e le query salvate utilizzabili |
Cosa c’è oggi, e cosa arriverà
Le voci della roadmap sono additive per progetto (nuove origini dati, tipi di widget e servizi di esportazione), quindi nessuna ti chiederà di migrare alcunché. Sono elencate come roadmap, non come funzionalità, così compri per quello che c’è oggi nella scatola.
| Funzionalità | Stato |
|---|---|
| Cruscotti: creare, duplicare, impostare come predefinito, esportare e importare | Disponibile |
| Griglia ridimensionabile in drag-and-drop con salvataggio automatico | Disponibile |
| KPI, tabella e l’intero set di grafici ECharts | Disponibile |
| Configurazione visuale dei widget senza SQL | Disponibile |
| Riutilizzo delle query salvate e generazione del cruscotto con un clic | Disponibile |
| Filtri globali che aggiornano l’intero cruscotto | Disponibile |
| Drill-down dal grafico alla lista delle richieste | Disponibile |
| Aggregazione SQL e cache per utente, filtrate dai permessi | Disponibile |
| Condivisione, modelli, temi chiaro e scuro | Disponibile |
| Multiversione, multidatabase, ripiego lato server | Disponibile |
| Esportazione in PDF, PNG ed Excel | Pianificato |
| Job in background per report molto pesanti | Pianificato |
| Aggiornamenti in tempo reale via WebSocket | Pianificato |
| Istantanee programmate inviate via e-mail | Pianificato |
| Modalità chiosco / schermo a parete | Pianificato |
| Generatore di report con IA in linguaggio naturale | Pianificato |
| Widget calendario, burndown e riepilogo Gantt | Pianificato |
Installazione in tre passi
Richiede accesso shell e la possibilità di eseguire task rake. Fai sempre un backup prima di installare un plugin.
cd /path/to/redmine # unzip the package from your email or download link unzip redmine_charts-1.0.0.zip -d plugins/ bundle install
bundle exec rake redmine:plugins:migrate NAME=redmine_charts RAILS_ENV=production # optional: the built-in dashboard templates bundle exec rake redmine_charts:seed_templates RAILS_ENV=production touch tmp/restart.txt
# Project → Settings → Modules → Charts & Dashboards # then grant the dashboard permissions to the roles that need them # a Dashboards entry appears in the top menu for anyone who holds one
Modifica o sovrascrive file del core di Redmine?
Servono Node.js o un passaggio di build per installarlo?
Le mie query salvate funzioneranno, anche quelle complicate?
Qualcuno può vedere numeri di un progetto a cui non ha accesso?
Quali database sono supportati?
Su quali versioni di Redmine e Rails gira?
Possiamo aggiungere origini dati o tipi di grafico nostri?
Che cosa manca di proposito nella versione 1.0?
Prezzi
Un server
Un'istanza Redmine · utenti illimitati · 12 mesi di aggiornamenti.
Più server
Server Redmine illimitati · utenti illimitati · 12 mesi di aggiornamenti.