Redmine Dashboards
DashboardsCuadros de mando construidos a partir de las consultas guardadas que ya tienes: una rejilla de arrastrar y soltar con indicadores, tablas y quince tipos de gráfico, agregados en SQL y limitados a lo que cada persona tiene permiso para ver.
Varios servidores: $399

- Tipos de widget
- 23
- Variantes de gráfico
- 15
- Redmine
- 4 · 5 · 6 · 7
- Bases de datos
- MySQL, MariaDB, PostgreSQL
- Parches al núcleo
- Ninguno
Constructor de arrastrar y soltar
Una rejilla redimensionable y reordenable que se guarda sola mientras trabajas. Coloca indicadores, gráficos y tablas hasta que el tablero cuente lo que necesitas contar, sin archivo de maquetación y sin recargar la página.
Quince tipos de gráfico
Barras, barras horizontales, barras apiladas, líneas, multilínea, área, tarta, anillo, radar, polar, indicador, embudo, mapa de calor, treemap y anillo de progreso, dibujados con Apache ECharts en claro y en oscuro.
Tus consultas guardadas, visualizadas
Apunta un widget a una consulta guardada y hereda ese filtro, con campos personalizados, observadores y subproyectos incluidos. O convierte la consulta en un tablero entero con un clic.
Agregado en SQL
GROUP BY, COUNT, SUM y AVG se ejecutan en la base de datos, así que cien mil peticiones se cuentan en lugar de instanciarse. Los resultados se cachean por usuario, widget y filtros activos.
Ajustado a quien mira
Toda lectura parte de Issue.visible(user), TimeEntry.visible(user) y Query.visible(user), de modo que ningún gráfico puede sumar un proyecto del que quien lo lee no es miembro.
Filtros, refresco y detalle
Una barra de filtros reencuadra el tablero completo, un intervalo por cuadro de mando mantiene al día una pantalla de pared, y cada barra, porción y celda lleva a la lista de peticiones que hay detrás.
Míralo funcionando dentro de Redmine
Todas las capturas proceden de una instalación estándar de Redmine 6 con el plugin copiado en plugins/. Los cuadros de mando aparecen bajo la cabecera y los menús de Redmine, porque es ahí donde se ejecutan.
Construir un tablero


Widgets


Compartir y cambiar


La consulta ya es el informe
Nada aquí te pide describir tus datos por segunda vez. Filtra una lista de peticiones como lo has hecho siempre, guárdala, y esa consulta guardada pasa a ser el ámbito que un widget agrega: exactamente la misma relación con la que Redmine dibuja la lista.
| Paso | Qué haces | Qué obtienes |
|---|---|---|
| 1. Guardar una consulta | Filtrar la lista de peticiones —campos personalizados, observadores, subproyectos— y pulsar Guardar | Una consulta con nombre, visible para aquellos con quienes la compartiste |
| 2. Apuntar un widget a ella | Elegir esa consulta en el diálogo del widget | Origen de datos y una agrupación por defecto razonable, deducidos por ti |
| 3. O generar el tablero entero | Pulsar «Desde la consulta» | Un cuadro de mando de indicadores y gráficos ligados a ella, en una sola petición |
Configurado desde desplegables, no desde SQL
Un widget es un origen, una dimensión, una medida y una agregación. Agrupa peticiones por estado, prioridad, tipo, asignado o cualquier campo de fecha repartido en días, semanas, meses o años; cuéntalas, suma las horas estimadas o promedia el porcentaje realizado. Nadie del equipo escribe SQL para obtener un gráfico y, como no hay SQL que escribir, tampoco hay consulta capaz de saltarse los permisos de quien la está leyendo.

Cada widget se configura desde un único formulario
Cualquier widget, sea un KPI, unas barras o un anillo, se configura en el mismo formulario breve: título y tipo, un origen de datos, una consulta guardada opcional para los filtros, una medida y una agrupación con Top-N. Cambia el tipo y el formulario se adapta.




Una sola página de ajustes para administradores
En Administración › Extensiones › Redmine Charts se configuran la caché de resultados por usuario, el TTL de la caché (5–86400 segundos, 300 por defecto), el tema claro u oscuro por defecto y un intervalo de autorrefresco por defecto, donde 0 lo desactiva. Es la pantalla de configuración de extensiones del propio Redmine.
23 tipos de widget, y sitio para los tuyos
Cada tipo son metadatos en un registro, así que la interfaz de configuración se construye a partir de la propia declaración del widget en lugar de un formulario escrito a mano por gráfico.
| Familia | Tipos | Se configura con |
|---|---|---|
| Gráficos | Barras, barras horizontales, barras apiladas, líneas, multilínea, área, tarta, anillo, radar, polar, indicador, embudo, mapa de calor, treemap, anillo de progreso | Origen, dimensión, medida, agregación |
| KPI / número | Una sola cifra agregada, con su propio filtro | count · sum · avg · min · max |
| Tabla | Una rejilla paginada sobre esos mismos datos filtrados por permisos | Selector de columnas y filtros |
| Contenido | Markdown, notas, HTML, iframe, flujo de actividad, peticiones recientes | Texto libre, o uno de los propios flujos de Redmine |
Dibujado con Apache ECharts
Quince variantes, pensadas para claro y oscuro, redibujadas al cambiar de tamaño y todavía legibles en una pantalla de pared. El bundle viene ya compilado dentro del paquete, así que instalar no requiere Node ni paso de compilación.
Cada segmento baja al detalle
Pulsar una barra, una porción o una celda del mapa de calor abre la lista de peticiones de Redmine filtrada exactamente a esas. Las cifras siguen siendo auditables porque siempre puedes aterrizar en las filas que hay detrás.
Filtros globales y autorrefresco
Una barra de filtros reencuadra todos los widgets del tablero a la vez, y un intervalo de refresco por cuadro de mando mantiene al día la pantalla del pasillo. Cero desactiva el refresco.
Plantillas y planos
Guarda un tablero como plantilla reutilizable, duplícalo por equipo, o expórtalo como plano JSON e impórtalo en otra instancia: de preproducción a producción sin volver a construirlo a mano.
Un plugin, un tablero para cada equipo
Una responsable de entregas, un equipo de soporte y un desarrollador en solitario crearon estos en minutos a partir de consultas guardadas que ya tenían.





Dos orígenes incluidos, y el tuyo al lado
Peticiones y tiempos dedicados llegan con sus dimensiones y medidas ya declaradas, ambos detrás de los ámbitos de visibilidad de Redmine. Un origen que añada otro plugin recibe exactamente el mismo trato.
| Origen | Dimensiones | Medidas |
|---|---|---|
| Peticiones | Estado, prioridad, tipo, proyecto, asignado, autor, categoría, versión, creación, actualización, fecha fin | Número de peticiones, horas estimadas, porcentaje realizado |
| Tiempos dedicados | Proyecto, usuario, actividad, fecha | Horas, número de entradas |
| El tuyo | Lo que registres | Lo que registres |
Extenderlo es registrar, no parchear
Un origen de datos es una clase con un nombre, sus dimensiones, sus medidas y un base_scope filtrado por permisos; un tipo de widget es un hash. Registra cualquiera de los dos desde el init.rb de tu propio plugin con RedmineCharts.register_data_source o register_widget_type y aparecerá de inmediato en la interfaz de configuración, heredando filtrado, caché y navegación al detalle. Para lograrlo no se toca nada de este plugin.
Nadie agrega lo que no puede leer
Un cuadro de mando es una forma rápida de filtrar una cifra, así que cada lectura empieza por el ámbito de quien mira, en vez de terminar con una comprobación contra él.
Primero la visibilidad, después la agrupación
Issue.visible(user), TimeEntry.visible(user) y Query.visible(user) restringen la relación antes de contar una sola fila. Un total de un proyecto del que no eres miembro no puede aparecer en ningún widget, porque esas filas nunca estuvieron en el conjunto.
Cuatro permisos granulares
Ver cuadros de mando, crearlos, administrarlos todos y gestionar plantillas: cada uno asignable por rol. Y todo permanece apagado hasta que alguien activa el módulo Cuadros de mando en el proyecto.
Compartir a través de las pertenencias
Concede un tablero a usuarios, grupos, roles o proyectos enteros. Cada petición vuelve a resolver viewable_by? y editable_by? mediante las pertenencias de Redmine, y no mediante una lista de acceso paralela que acaba desincronizándose.
Nada sale del servidor
El frontend solo habla con la API JSON de este plugin en tu propio Redmine, con la sesión y el token CSRF que ya existen. Ningún servicio externo, ninguna llamada de licencia, ninguna telemetría.
Hecho para aguantar una instancia grande
Contar cien mil peticiones no debería significar cargar cien mil objetos. Aquí no lo significa.
| Asunto | Cómo se resuelve |
|---|---|
| Agregación | GROUP BY, COUNT, SUM y AVG se ejecutan en SQL: las filas nunca se instancian solo para contarlas |
| Dimensiones muy anchas | El plegado Top-N mantiene pequeña la respuesta cuando una dimensión tiene miles de valores |
| Vistas repetidas | Resultados cacheados por usuario, fecha de modificación del widget y filtros activos mediante Rails.cache; el TTL es un ajuste y Redis funciona tal cual |
| Un widget lento | Los widgets cargan de forma independiente, así que una consulta pesada nunca retiene al tablero entero |
| Falta el bundle de JS | Rails renderiza en el servidor los datos de cada widget como respaldo, así que la página se degrada en vez de quedarse en blanco |
Portable a propósito, no por casualidad
La compatibilidad entre versiones y bases de datos está diseñada desde el principio: migraciones, almacenamiento JSON y agrupación por fechas se escribieron para resistir las diferencias.
| Aspecto | Soportado | Cómo |
|---|---|---|
| Redmine | 4.x, 5.x, 6.x, 7.x | Declara requires_redmine version_or_higher 4.0.0, sin sobrescrituras del núcleo que puedan quedarse desfasadas |
| Rails | 5.2 → 8.0 | Las migraciones apuntan a la base 5.2, que entienden todas las versiones hasta la 8.0 |
| Ruby | 2.5+ | Coincide con el requisito mínimo de Redmine 4 |
| Bases de datos | MySQL, MariaDB, PostgreSQL | El JSON vive en columnas de texto normales —DDL idéntico en todas— con un serializador que elige la forma adecuada según la versión de Rails |
| Agrupación por fechas | Día, semana, mes, año | Agrupa con un CAST(col AS DATE) portable y después reparte en intervalos desde Ruby: sin SQL específico de ningún fabricante |
| Repetir migraciones | Seguro | Escritas a la defensiva, de modo que una actualización interrumpida se puede volver a ejecutar |
Automatizable desde el primer día
Cada endpoint vive bajo /redmine_charts/api, devuelve JSON y aplica exactamente los permisos de la interfaz, así que un tablero puede aprovisionarse desde CI o generarse uno por equipo.
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /dashboards | Todos los cuadros de mando visibles para quien llama |
| POST | /dashboards | Crear uno |
| GET | /dashboards/:id | Obtener un tablero con sus widgets |
| PATCH | /dashboards/:id | Cambiar nombre, disposición o ajustes |
| POST | /dashboards/:id/duplicate | Clonarlo, widgets incluidos |
| GET | /dashboards/:id/export | Exportar un plano JSON |
| POST | /dashboards/import | Crear un tablero a partir de un plano |
| POST | /dashboards/:id/widgets | Añadir un widget |
| GET | /widgets/:id/data | Datos del widget agregados y filtrados por permisos |
| GET | /meta/data_sources | Orígenes, dimensiones, medidas y las consultas guardadas que puedes usar |
Lo que incluye hoy y lo que viene
Los puntos de la hoja de ruta son aditivos por diseño —nuevos orígenes de datos, tipos de widget y servicios de exportación—, así que ninguno te obligará a migrar nada. Figuran como hoja de ruta, no como funciones, para que compres por lo que hay hoy en la caja.
| Funcionalidad | Estado |
|---|---|
| Cuadros de mando: crear, duplicar, fijar por defecto, exportar e importar | Disponible |
| Rejilla redimensionable de arrastrar y soltar con guardado automático | Disponible |
| KPI, tabla y el conjunto completo de gráficos de ECharts | Disponible |
| Configuración visual de widgets sin SQL | Disponible |
| Reutilización de consultas guardadas y generación de tableros en un clic | Disponible |
| Filtros globales que actualizan todo el tablero | Disponible |
| Navegación al detalle del gráfico a la lista de peticiones | Disponible |
| Agregación SQL y caché por usuario, filtradas por permisos | Disponible |
| Compartir, plantillas, temas claro y oscuro | Disponible |
| Multiversión, multibase de datos, respaldo en el servidor | Disponible |
| Exportación a PDF, PNG y Excel | Previsto |
| Trabajos en segundo plano para informes muy pesados | Previsto |
| Actualizaciones en vivo por WebSocket | Previsto |
| Instantáneas programadas y enviadas por correo | Previsto |
| Modo quiosco / pantalla de pared | Previsto |
| Generador de informes con IA en lenguaje natural | Previsto |
| Widgets de calendario, burndown y resumen de Gantt | Previsto |
Instalación en tres pasos
Requiere acceso por shell y poder ejecutar tareas rake. Haz siempre una copia de seguridad antes de instalar 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
¿Parchea o sobrescribe algún archivo del núcleo de Redmine?
¿Necesito Node.js o un paso de compilación para instalarlo?
¿Funcionarán mis consultas guardadas, incluidas las complicadas?
¿Puede alguien ver cifras de un proyecto al que no tiene acceso?
¿Qué bases de datos están soportadas?
¿Sobre qué versiones de Redmine y Rails funciona?
¿Podemos añadir nuestros propios orígenes de datos o tipos de gráfico?
¿Qué queda fuera de la versión 1.0 a propósito?
Precios
Un servidor
Una instancia de Redmine · usuarios ilimitados · 12 meses de actualizaciones.
Varios servidores
Servidores de Redmine ilimitados · usuarios ilimitados · 12 meses de actualizaciones.