Redmine Dashboards
DashboardsDashboards bygget på de gemte forespørgsler, du allerede har — et træk-og-slip-gitter med nøgletal, tabeller og femten diagramtyper, aggregeret i SQL og afgrænset til det, den der kigger har lov at se.
Flere servere: $399

- Widgettyper
- 23
- Diagramvarianter
- 15
- Redmine
- 4 · 5 · 6 · 7
- Databaser
- MySQL, MariaDB, PostgreSQL
- Ændringer i kernen
- Ingen
Byg med træk og slip
Et gitter, hvor felterne kan flyttes og ændre størrelse, og som gemmer sig selv, mens du arbejder. Placér nøgletal, diagrammer og tabeller, indtil tavlen fortæller det, den skal — uden layoutfil og uden genindlæsning.
Femten diagramtyper
Søjle, liggende søjle, stablet søjle, linje, flere linjer, areal, cirkel, ring, radar, polær, måler, tragt, varmekort, treemap og fremdriftsring — tegnet med Apache ECharts, i lyst og mørkt.
Dine gemte forespørgsler, visualiseret
Peg en widget på en gemt forespørgsel, så arver den filteret, inklusive brugerdefinerede felter, observatører og underprojekter. Eller lav hele tavlen ud af forespørgslen med ét klik.
Aggregeret i SQL
GROUP BY, COUNT, SUM og AVG kører i databasen, så hundrede tusind sager bliver talt i stedet for instantieret. Resultaterne caches pr. bruger, widget og aktive filtre.
Tilpasset den, der kigger
Enhver læsning tager udgangspunkt i Issue.visible(user), TimeEntry.visible(user) og Query.visible(user), så intet diagram kan lægge et projekt sammen, som læseren ikke er medlem af.
Filtre, opdatering og nedbrydning
Én filterlinje rammer hele tavlen ind på ny, et interval pr. dashboard holder en vægskærm ajour, og hver søjle, lagkagestykke og celle fører til sagslisten bagved.
Se det køre i Redmine
Hvert skærmbillede her stammer fra en almindelig Redmine 6-installation med pluginet lagt i plugins/. Dashboardene ligger under Redmines eget sidehoved og egne menuer, for det er der, de kører.
Byg en tavle


Widgets


Del og skift


Forespørgslen er allerede rapporten
Intet her beder dig beskrive dine data en gang til. Filtrér en sagsliste, som du altid har gjort, gem den, og den gemte forespørgsel bliver det udsnit, en widget aggregerer over — præcis den relation, Redmine selv bruger til at tegne listen.
| Trin | Det du gør | Det du får |
|---|---|---|
| 1. Gem en forespørgsel | Filtrér sagslisten — brugerdefinerede felter, observatører, underprojekter — og klik Gem | En navngiven forespørgsel, synlig for dem, du delte den med |
| 2. Peg en widget på den | Vælg forespørgslen i widgetdialogen | Datakilde og en fornuftig standardgruppering, udledt for dig |
| 3. Eller lav hele tavlen | Klik på «Ud fra forespørgsel» | Et dashboard med nøgletal og diagrammer bundet til den, i én enkelt forespørgsel |
Sat op med rullemenuer, ikke med SQL
En widget er en kilde, en dimension, et mål og en aggregering. Gruppér sager efter status, prioritet, sagstype, ansvarlig eller et hvilket som helst datofelt delt op i dage, uger, måneder eller år; tæl dem, læg de estimerede timer sammen eller tag gennemsnittet af færdiggraden. Ingen i teamet skriver SQL for at få et diagram — og fordi der ikke er SQL at skrive, findes der heller ingen forespørgsel, der kan række ud over rettighederne hos den, der læser.

Konfigurér hver widget i én formular
Hver widget, hvad enten det er et nøgletal, en søjle eller en ring, sættes op i den samme korte formular: en titel og en type, en datakilde, en valgfri gemt forespørgsel til filtre, et mål og en gruppering med Top-N. Skift typen, og formularen tilpasser sig.




Én indstillingsside til administratorer
Under Administration › Plugins › Redmine Charts indstiller du caching af resultater pr. bruger, cache-TTL (5–86400 sekunder, standard 300), standardtema lyst eller mørkt, og et standardinterval for automatisk opdatering, hvor 0 slår den fra. Siden er Redmines egen indstillingsside for plugins.
23 widgettyper, og plads til dine egne
Hver type er metadata i et register, så konfigurationsfladen bygger sig selv ud fra widgettens egen erklæring i stedet for ud fra en håndskrevet formular pr. diagram.
| Familie | Typer | Sættes op med |
|---|---|---|
| Diagrammer | Søjle, liggende søjle, stablet søjle, linje, flere linjer, areal, cirkel, ring, radar, polær, måler, tragt, varmekort, treemap, fremdriftsring | Kilde, dimension, mål, aggregering |
| Nøgletal / tal | Ét aggregeret tal, med sit eget filter | count · sum · avg · min · max |
| Tabel | Et sideinddelt gitter over de samme rettighedsafgrænsede data | Kolonnevælger og filtre |
| Indhold | Markdown, noter, HTML, iframe, aktivitetsfeed, seneste sager | Fri tekst, eller et af Redmines egne feeds |
Tegnet med Apache ECharts
Femten varianter, lavet til lyst og mørkt, gentegnet ved skalering og stadig læsbare på en vægskærm. Pakken indeholder en færdigbygget bundle, så installationen kræver hverken Node eller et byggetrin.
Hvert segment bryder ned
Et klik på en søjle, et lagkagestykke eller en celle i varmekortet åbner Redmines sagsliste filtreret præcis på dem. Tallene forbliver til at efterprøve, fordi du altid kan lande på rækkerne bag dem.
Globale filtre og automatisk opdatering
Én filterlinje rammer alle tavlens widgets ind på ny på én gang, og et opdateringsinterval pr. dashboard holder skærmen på gangen ajour. Nul slår opdateringen fra.
Skabeloner og tegninger
Gem en tavle som genbrugelig skabelon, dublér den pr. team, eller eksportér den som en JSON-tegning og importér den i en anden instans — fra test til drift uden at bygge den op igen i hånden.
Ét plugin, en tavle til hvert team
En leveranceansvarlig, en supportdesk og en enkelt udvikler byggede hver deres på få minutter ud fra gemte forespørgsler, de allerede havde.





To kilder indbygget, og din ved siden af
Sager og forbrugt tid kommer med deres dimensioner og mål allerede registreret, begge bag Redmines egne synlighedsudsnit. En kilde, et andet plugin tilføjer, behandles fuldstændig ens.
| Kilde | Dimensioner | Mål |
|---|---|---|
| Sager | Status, prioritet, sagstype, projekt, ansvarlig, forfatter, kategori, version, oprettet, opdateret, slutdato | Antal sager, estimerede timer, færdiggrad |
| Forbrugt tid | Projekt, bruger, aktivitet, dato | Timer, antal posteringer |
| Din egen | Det du registrerer | Det du registrerer |
At udvide er at registrere, ikke at lappe
En datakilde er en klasse med et navn, sine dimensioner, sine mål og et base_scope, der filtrerer på rettigheder; en widgettype er en hash. Registrér den ene eller den anden fra dit eget plugins init.rb med RedmineCharts.register_data_source eller register_widget_type, så dukker den straks op i konfigurationsfladen — med filtrering, caching og nedbrydning oveni. Der bliver ikke ændret noget i dette plugin for at få det til at virke.
Ingen aggregerer det, de ikke må læse
Et dashboard er en hurtig måde at lække et tal på, så enhver læsning begynder i udsnittet for den, der kigger, i stedet for at slutte med en kontrol mod det.
Først synlighed, så gruppering
Issue.visible(user), TimeEntry.visible(user) og Query.visible(user) begrænser relationen, før en eneste række tælles. En sum fra et projekt, du ikke er medlem af, kan ikke dukke op i nogen widget, for de rækker var aldrig i mængden.
Fire finkornede rettigheder
Se dashboards, oprette dem, administrere dem alle og styre skabeloner — hver især tildelt pr. rolle. Og det hele er slået fra, indtil nogen aktiverer modulet Dashboards for projektet.
Deling gennem medlemskaberne
Giv en tavle til brugere, grupper, roller eller hele projekter. Hver forespørgsel afgør viewable_by? og editable_by? igen ud fra Redmines egne medlemskaber og ikke ud fra en parallel adgangsliste, der før eller siden skrider.
Intet forlader serveren
Frontenden taler kun med dette plugins JSON-API på din egen Redmine, via den session og det CSRF-token, der allerede findes. Ingen ekstern tjeneste, intet licensopkald hjem, ingen telemetri.
Bygget til at holde til en stor instans
At tælle hundrede tusind sager burde ikke betyde, at man indlæser hundrede tusind objekter. Her betyder det ikke det.
| Emne | Sådan er det løst |
|---|---|
| Aggregering | GROUP BY, COUNT, SUM og AVG kører i SQL — rækker bliver aldrig instantieret alene for at blive talt |
| Meget brede dimensioner | Top-N-foldning holder svaret lille, når en dimension har tusindvis af værdier |
| Gentagne visninger | Resultater caches pr. bruger, widgettens ændringstidspunkt og aktive filtre via Rails.cache; TTL er en indstilling, og Redis virker, som det er |
| En langsom widget | Widgets indlæses uafhængigt af hinanden, så en tung forespørgsel holder aldrig hele tavlen tilbage |
| Manglende JS-bundle | Rails gengiver hver widgets data på serveren som reserve, så siden falder tilbage i stedet for at stå tom |
Portabelt med vilje, ikke ved et tilfælde
Understøttelse af flere versioner og databaser er tænkt ind fra starten — migreringer, JSON-lagring og datoinddeling er alle skrevet til at tåle forskellene.
| Område | Understøttet | Hvordan |
|---|---|---|
| Redmine | 4.x, 5.x, 6.x, 7.x | Erklærer requires_redmine version_or_higher 4.0.0, uden overstyringer af kernen, der kan komme ud af takt |
| Rails | 5.2 → 8.0 | Migreringerne tager udgangspunkt i 5.2, som alle udgivelser op til 8.0 forstår |
| Ruby | 2.5+ | Svarer til minimumskravet for Redmine 4 |
| Databaser | MySQL, MariaDB, PostgreSQL | JSON ligger i almindelige tekstkolonner — identisk DDL overalt — med en serializer, der vælger den rigtige form pr. Rails-version |
| Datogruppering | Dag, uge, måned, år | Grupperer på en portabel CAST(col AS DATE) og folder derefter ind i intervaller i Ruby — ingen leverandørspecifik SQL |
| Køre migreringer igen | Sikkert | Skrevet defensivt, så en afbrudt opgradering kan køres igen |
Scriptbart fra første dag
Hvert endpoint ligger under /redmine_charts/api, svarer i JSON og håndhæver nøjagtig de samme rettigheder som brugerfladen — så en tavle kan oprettes fra CI eller genereres én pr. team.
| Metode | Sti | Hvad den gør |
|---|---|---|
| GET | /dashboards | Alle dashboards, kalderen må se |
| POST | /dashboards | Opret et |
| GET | /dashboards/:id | Hent en tavle med dens widgets |
| PATCH | /dashboards/:id | Ret navn, layout eller indstillinger |
| POST | /dashboards/:id/duplicate | Klon den, widgets med |
| GET | /dashboards/:id/export | Eksportér en JSON-tegning |
| POST | /dashboards/import | Opret en tavle ud fra en tegning |
| POST | /dashboards/:id/widgets | Tilføj en widget |
| GET | /widgets/:id/data | Aggregerede, rettighedsafgrænsede widgetdata |
| GET | /meta/data_sources | Kilder, dimensioner, mål og de gemte forespørgsler, du kan bruge |
Hvad der er med i dag, og hvad der kommer
Punkterne på køreplanen er tilføjelser af natur — nye datakilder, widgettyper og eksporttjenester — så ingen af dem vil kræve, at du migrerer noget. De står som køreplan, ikke som funktioner, så du kan købe ud fra det, der er i pakken i dag.
| Funktion | Status |
|---|---|
| Dashboards: opret, duplikér, sæt standard, eksportér og importér | Klar |
| Træk-og-slip-gitter med skalering og automatisk gem | Klar |
| Nøgletal, tabel og hele ECharts-sættet af diagrammer | Klar |
| Visuel widgetkonfiguration uden SQL | Klar |
| Genbrug af gemte forespørgsler og tavler genereret med ét klik | Klar |
| Globale filtre, der opdaterer hele tavlen | Klar |
| Nedbrydning fra diagram → sagsliste | Klar |
| Rettighedsafgrænset SQL-aggregering og caching pr. bruger | Klar |
| Deling, skabeloner, lyst og mørkt tema | Klar |
| Flere versioner, flere databaser, serverside-reserve | Klar |
| Eksport til PDF, PNG og Excel | Planlagt |
| Baggrundsjob til meget tunge rapporter | Planlagt |
| Liveopdateringer via WebSocket | Planlagt |
| Planlagte øjebliksbilleder sendt pr. e-mail | Planlagt |
| Kiosk- / vægskærmstilstand | Planlagt |
| AI-rapportbygger med naturligt sprog | Planlagt |
| Widgets til kalender, burndown og gantt-oversigt | Planlagt |
Installér i tre trin
Kræver shell-adgang og mulighed for at køre rake-opgaver. Tag altid en sikkerhedskopi, før du installerer en udvidelse.
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
Ændrer eller overskriver det nogen af Redmines kernefiler?
Kræver installationen Node.js eller et byggetrin?
Virker mine eksisterende gemte forespørgsler, også de indviklede?
Kan nogen se tal fra et projekt, de ikke har adgang til?
Hvilke databaser understøttes?
Hvilke Redmine- og Rails-versioner kører det på?
Kan vi tilføje vores egne datakilder eller diagramtyper?
Hvad er bevidst udeladt i version 1.0?
Priser
Én server
Én Redmine-installation · ubegrænset antal brugere · 12 måneders opdateringer.
Flere servere
Ubegrænset antal Redmine-servere · ubegrænset antal brugere · 12 måneders opdateringer.