Redmine Dashboards
DashboardsPainéis construídos a partir das consultas salvas que você já tem — uma grade de arrastar e soltar com blocos de indicadores, tabelas e quinze tipos de gráfico, agregados em SQL e limitados ao que cada pessoa tem permissão para ver.
Vários servidores: $399

- Tipos de widget
- 23
- Variantes de gráfico
- 15
- Redmine
- 4 · 5 · 6 · 7
- Bancos de dados
- MySQL, MariaDB, PostgreSQL
- Alterações no core
- Nenhuma
Montagem por arrastar e soltar
Uma grade redimensionável e reordenável que se salva sozinha enquanto você trabalha. Organize indicadores, gráficos e tabelas até o painel contar o que precisa ser contado, sem arquivo de layout e sem recarregar a página.
Quinze tipos de gráfico
Barras, barras horizontais, barras empilhadas, linha, multilinha, área, pizza, rosca, radar, polar, velocímetro, funil, mapa de calor, treemap e anel de progresso — desenhados com Apache ECharts, no claro e no escuro.
Suas consultas salvas, visualizadas
Aponte um widget para uma consulta salva e ele herda aquele filtro, incluindo campos personalizados, observadores e subprojetos. Ou transforme a consulta em um painel inteiro com um clique.
Agregado em SQL
GROUP BY, COUNT, SUM e AVG rodam no banco de dados, então cem mil tarefas são contadas em vez de instanciadas. Os resultados ficam em cache por usuário, widget e filtros ativos.
Recortado para quem está olhando
Toda leitura parte de Issue.visible(user), TimeEntry.visible(user) e Query.visible(user), de modo que nenhum gráfico consegue somar um projeto do qual quem lê não é membro.
Filtros, atualização e detalhamento
Uma barra de filtros reenquadra o painel inteiro, um intervalo por painel mantém um telão atualizado, e cada barra, fatia e célula leva à lista de tarefas que está por trás.
Veja rodando dentro do Redmine
Todas as capturas de tela aqui vêm de uma instalação padrão do Redmine 6 com o plugin colocado em plugins/. Os painéis ficam sob o cabeçalho e os menus do próprio Redmine, porque é ali que eles rodam.
Monte um painel


Widgets


Compartilhe e alterne


A consulta já é o relatório
Nada aqui pede que você descreva seus dados uma segunda vez. Filtre uma lista de tarefas como sempre fez, salve, e essa consulta salva passa a ser o escopo que um widget agrega — exatamente a relação que o Redmine usa para montar a lista.
| Passo | O que você faz | O que você recebe |
|---|---|---|
| 1. Salvar uma consulta | Filtrar a lista de tarefas — campos personalizados, observadores, subprojetos — e clicar em Salvar | Uma consulta com nome, visível para quem você compartilhou |
| 2. Apontar um widget para ela | Escolher essa consulta na janela do widget | Fonte de dados e um agrupamento padrão sensato, deduzidos para você |
| 3. Ou gerar o painel inteiro | Clicar em «A partir da consulta» | Um painel de blocos de indicadores e gráficos ligados a ela, em uma única requisição |
Configurado por listas suspensas, não por SQL
Um widget é uma fonte, uma dimensão, uma medida e uma agregação. Agrupe tarefas por situação, prioridade, tipo, responsável ou qualquer campo de data dividido em dias, semanas, meses ou anos; conte-as, some as horas estimadas ou tire a média do percentual concluído. Ninguém no time escreve SQL para ter um gráfico — e como não há SQL para escrever, também não existe consulta capaz de passar por cima das permissões de quem está lendo.

Todo widget configurado em um único formulário
Todo widget, seja um indicador, uma barra ou uma rosca, é configurado no mesmo formulário curto: um título e um tipo, uma fonte de dados, uma consulta salva opcional para os filtros, uma medida e um agrupamento com Top-N. Troque o tipo e o formulário se adapta.




Uma única página de configurações para administradores
Em Administração › Plugins › Redmine Charts você define o cache de resultados por usuário, o TTL do cache (5–86400 segundos, padrão 300), o tema claro ou escuro padrão e um intervalo padrão de atualização automática, em que 0 desliga. A página é a própria tela de configurações de plugins do Redmine.
23 tipos de widget, e espaço para os seus
Cada tipo é metadado em um registro, então a interface de configuração se constrói a partir da declaração do próprio widget, e não de um formulário escrito à mão para cada gráfico.
| Família | Tipos | Configurado com |
|---|---|---|
| Gráficos | Barras, barras horizontais, barras empilhadas, linha, multilinha, área, pizza, rosca, radar, polar, velocímetro, funil, mapa de calor, treemap, anel de progresso | Fonte, dimensão, medida, agregação |
| Indicador / número | Um único valor agregado, com filtro próprio | count · sum · avg · min · max |
| Tabela | Uma grade paginada sobre os mesmos dados filtrados pelas permissões | Seletor de colunas e filtros |
| Conteúdo | Markdown, notas, HTML, iframe, feed de atividades, tarefas recentes | Texto livre, ou um dos próprios feeds do Redmine |
Desenhado com Apache ECharts
Quinze variantes, pensadas para claro e escuro, redesenhadas ao redimensionar e ainda legíveis em um telão. O bundle já vem compilado dentro do pacote, então instalar não exige Node nem etapa de build.
Cada segmento detalha
Clicar em uma barra, uma fatia ou uma célula do mapa de calor abre a lista de tarefas do Redmine filtrada exatamente por elas. Os números continuam auditáveis, porque você sempre pode chegar às linhas que estão por trás.
Filtros globais e atualização automática
Uma barra de filtros reenquadra todos os widgets do painel de uma vez, e um intervalo de atualização por painel mantém a tela do corredor em dia. Zero desliga a atualização.
Modelos e blueprints
Salve um painel como modelo reutilizável, duplique-o por time, ou exporte-o como blueprint JSON e importe em outra instância — de homologação para produção sem reconstruir nada na mão.
Um plugin, um painel para cada time
Uma líder de entregas, uma central de suporte e um único desenvolvedor montaram cada um destes em minutos, a partir de consultas salvas que já tinham.





Duas fontes embutidas, e a sua ao lado
Tarefas e tempo gasto chegam com suas dimensões e medidas já declaradas, ambas atrás dos escopos de visibilidade do Redmine. Uma fonte adicionada por outro plugin recebe o mesmo tratamento.
| Fonte | Dimensões | Medidas |
|---|---|---|
| Tarefas | Situação, prioridade, tipo, projeto, responsável, autor, categoria, versão, criação, atualização, data prevista | Número de tarefas, horas estimadas, percentual concluído |
| Tempo gasto | Projeto, usuário, atividade, data | Horas, número de registros |
| A sua | O que você registrar | O que você registrar |
Estender é registrar, não remendar
Uma fonte de dados é uma classe com um nome, suas dimensões, suas medidas e um base_scope filtrado pelas permissões; um tipo de widget é um hash. Registre qualquer um dos dois no init.rb do seu próprio plugin com RedmineCharts.register_data_source ou register_widget_type e ele aparece na hora na interface de configuração, herdando filtragem, cache e detalhamento. Para isso, nada neste plugin é alterado.
Ninguém agrega o que não pode ler
Um painel é um jeito rápido de vazar um número, então toda leitura começa pelo escopo de quem está olhando, em vez de terminar com uma verificação contra ele.
Primeiro a visibilidade, depois o agrupamento
Issue.visible(user), TimeEntry.visible(user) e Query.visible(user) restringem a relação antes de uma única linha ser contada. Um total vindo de um projeto do qual você não é membro não pode aparecer em widget nenhum, porque aquelas linhas nunca estiveram no conjunto.
Quatro permissões granulares
Ver painéis, criar painéis, administrar todos e gerenciar modelos — cada uma atribuível por papel. E tudo permanece desligado até alguém habilitar o módulo Painéis para aquele projeto.
Compartilhamento pelas associações
Conceda um painel a usuários, grupos, papéis ou projetos inteiros. Cada requisição resolve de novo viewable_by? e editable_by? pelas associações do próprio Redmine, e não por uma lista de acesso paralela que acaba divergindo.
Nada sai do servidor
O frontend só conversa com a API JSON deste plugin, no seu próprio Redmine, usando a sessão e o token CSRF que já existem. Nenhum serviço externo, nenhuma chamada de licença, nenhuma telemetria.
Feito para aguentar uma instância grande
Contar cem mil tarefas não deveria significar carregar cem mil objetos. Aqui não significa.
| Assunto | Como é tratado |
|---|---|
| Agregação | GROUP BY, COUNT, SUM e AVG rodam em SQL — linhas nunca são instanciadas só para serem contadas |
| Dimensões muito largas | O dobramento Top-N mantém a resposta pequena quando uma dimensão tem milhares de valores |
| Visitas repetidas | Resultados em cache por usuário, data de alteração do widget e filtros ativos via Rails.cache; o TTL é uma configuração e o Redis funciona como está |
| Um widget lento | Os widgets carregam de forma independente, então uma consulta pesada nunca segura o painel inteiro |
| Bundle de JS ausente | O Rails renderiza no servidor os dados de cada widget como alternativa, então a página degrada em vez de ficar em branco |
Portável de propósito, não por acaso
O suporte a várias versões e bancos de dados foi projetado desde o início — migrações, armazenamento JSON e agrupamento por datas foram todos escritos para sobreviver às diferenças.
| Aspecto | Suportado | Como |
|---|---|---|
| Redmine | 4.x, 5.x, 6.x, 7.x | Declara requires_redmine version_or_higher 4.0.0, sem sobrescritas do core que possam ficar desatualizadas |
| Rails | 5.2 → 8.0 | As migrações miram a base 5.2, que todas as versões até a 8.0 entendem |
| Ruby | 2.5+ | Igual ao requisito mínimo do Redmine 4 |
| Bancos de dados | MySQL, MariaDB, PostgreSQL | O JSON fica em colunas text comuns — DDL idêntico em todo lugar — com um serializador que escolhe o formato certo para cada versão do Rails |
| Agrupamento por data | Dia, semana, mês, ano | Agrupa com um CAST(col AS DATE) portável e depois dobra em intervalos no Ruby — sem SQL específico de fabricante |
| Rodar migrações de novo | Seguro | Escritas de forma defensiva, então uma atualização interrompida pode ser repetida |
Automatizável desde o primeiro dia
Cada endpoint fica sob /redmine_charts/api, devolve JSON e aplica exatamente as permissões da interface — um painel pode ser provisionado pela CI ou gerado um por time.
| Método | Caminho | O que faz |
|---|---|---|
| GET | /dashboards | Todos os painéis visíveis para quem chama |
| POST | /dashboards | Criar um |
| GET | /dashboards/:id | Buscar um painel com seus widgets |
| PATCH | /dashboards/:id | Alterar nome, disposição ou configurações |
| POST | /dashboards/:id/duplicate | Cloná-lo, widgets incluídos |
| GET | /dashboards/:id/export | Exportar um blueprint JSON |
| POST | /dashboards/import | Criar um painel a partir de um blueprint |
| POST | /dashboards/:id/widgets | Adicionar um widget |
| GET | /widgets/:id/data | Dados do widget agregados e filtrados pelas permissões |
| GET | /meta/data_sources | Fontes, dimensões, medidas e as consultas salvas que você pode usar |
O que já vem hoje, e o que vem depois
Os itens do roadmap são aditivos por design — novas fontes de dados, tipos de widget e serviços de exportação — então nenhum deles vai pedir que você migre nada. Eles aparecem como roadmap, não como recursos, para que você compre pelo que está na caixa hoje.
| Recurso | Situação |
|---|---|
| Painéis: criar, duplicar, definir como padrão, exportar e importar | Disponível |
| Grade redimensionável de arrastar e soltar, com salvamento automático | Disponível |
| Indicador, tabela e o conjunto completo de gráficos ECharts | Disponível |
| Configuração visual de widgets sem SQL | Disponível |
| Reaproveitamento de consultas salvas e geração de painéis com um clique | Disponível |
| Filtros globais que atualizam o painel inteiro | Disponível |
| Detalhamento do gráfico para a lista de tarefas | Disponível |
| Agregação SQL e cache por usuário, filtrados pelas permissões | Disponível |
| Compartilhamento, modelos, temas claro e escuro | Disponível |
| Várias versões, vários bancos de dados, alternativa no servidor | Disponível |
| Exportação em PDF, PNG e Excel | Planejado |
| Jobs em segundo plano para relatórios muito pesados | Planejado |
| Atualização ao vivo por WebSocket | Planejado |
| Snapshots agendados e enviados por e-mail | Planejado |
| Modo quiosque / telão | Planejado |
| Gerador de relatórios com IA em linguagem natural | Planejado |
| Widgets de calendário, burndown e resumo de Gantt | Planejado |
Instalação em três passos
Requer acesso por shell e permissão para executar tarefas rake. Sempre faça backup antes de instalar um complemento.
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
Ele altera ou sobrescreve arquivos do core do Redmine?
Preciso de Node.js ou de uma etapa de build para instalar?
Minhas consultas salvas vão funcionar, inclusive as complicadas?
Alguém consegue ver números de um projeto ao qual não tem acesso?
Quais bancos de dados são suportados?
Em quais versões de Redmine e Rails ele roda?
Podemos acrescentar nossas próprias fontes de dados ou tipos de gráfico?
O que ficou de fora da versão 1.0 de propósito?
Preços
Um servidor
Uma instância do Redmine · usuários ilimitados · 12 meses de atualizações.
Vários servidores
Servidores Redmine ilimitados · usuários ilimitados · 12 meses de atualizações.