El dashboard es la página de inicio. Cada persona ve sus cifras con la misma regla de visibilidad del listado: quien tiene dashboard.view.any ve el “Resumen general”; quien tiene dashboard.view.own, “Mi resumen”. Las cifras se guardan en caché por un minuto y se descartan de golpe en cuanto cambia cualquier incidente.
Paso a paso
- PersonaAbre el inicio
- NavegadorPide GET /dashboard
Devuelve el título y los widgets de su diseño (el guardado o el original), solo los que su rol puede usar.
- NavegadorPide GET /dashboard/metrics con sus widgets
?widgets=con los códigos visibles ytrend_days=7|30|90para las tendencias. - API¿Puede ver el dashboard y cada widget pedido?
Cada widget puede exigir un permiso propio (
dashboard_widgets.permission_id). - RedisLee la generación actual
La clave de cada cifra lleva un número de generación y el alcance de la persona:
dashboard:{generación}:{cifra}:{alcance}. Quienes ven todo (all) comparten la misma caché; los demás tienen la suya, porque sus cifras dependen de quiénes son. - Redis¿La cifra está en caché?
- Base de datosCalcula con la visibilidad de la persona
Consultas agregadas sobre índices hechos para el dashboard (
dashboard_counts,dashboard_assignee…), con los días en la zona del negocio. Medidas por debajo de 60 ms con 100.000 incidentes. - RedisGuarda la cifra por 60 s
DASHBOARD_CACHE_SECONDS. Solo arreglos y valores simples, nunca objetos de PHP. - APIResponde las cifras con su filtro
Cada cifra trae el
filterdel listado que la explica y la hora de la más antigua, para mostrar "actualizado hace…". - NavegadorDibuja los widgets; un clic abre el listado filtrado
Gráficos propios en SVG (barras, dona, columnas, área y anillo), con una tabla oculta para lectores de pantalla.
- APIUn incidente cambia en cualquier lugar
El repositorio emite
IncidentChangeddespués del commit. - RedisSube la generación en 1
Incremento atómico. Las claves viejas no se buscan ni se borran; nadie las vuelve a pedir y expiran solas.
- NavegadorEl inicio abierto vuelve a pedir las cifras
Por tiempo real, como máximo una vez cada 10 s y nunca mientras se personaliza.
Son dos caminos: abrir el inicio (pasos 1 a 10) y lo que pasa cuando un incidente cambia (pasos 11 a 13), con su propio inicio.
Qué ve la persona en cada error
| Código | HTTP | Cuándo | Mensaje en pantalla |
|---|---|---|---|
WIDGET_NOT_AVAILABLE | 422 | Se pidió un widget que su cuenta ya no puede usar (por ejemplo, le quitaron un permiso) | Uno de los widgets ya no está disponible para tu cuenta. Recarga la página para ver tu dashboard actual. |
FORBIDDEN_ACTION | 403 | Su rol no tiene dashboard | No tienes permiso para hacer esta acción. Si crees que deberías tenerlo, habla con un administrador. |
Si no carga el diseño, la página muestra el error con “Reintentar”. Si lo que falla son las cifras, el diseño se queda en pantalla y el error aparece encima de la grilla, también con “Reintentar”.
Dónde está en el código
ReadDashboardMetrics,WidgetMetricsyMetricSources.CacheMetricsCacheeInvalidateDashboardMetrics: caché por generación.EloquentDashboardQueries: consultas y su visibilidad.useDashboardyDashboardPage.- Explicación del módulo: Módulo Dashboard.