Files
fn_registry/docs/capabilities/cpp-dashboard-viz.md
T
egutierrez b9716a7cd6 chore: snapshot WIP previo + flow 0008 + 7 sub-issues (0112-0119)
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1
del flow 0008 (kanban_cpp + agent_runner_api + DoD schema).

Incluye:
- dev/flows/0008-kanban-cpp-and-agent-workflows.md
- dev/issues/0112-0119*.md (7 sub-issues)
- WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 18:17:08 +02:00

3.1 KiB

cpp-dashboard-viz

Primitivas de dashboards/observability en C++ ImGui: cards de KPI, sparklines, line/bar/scatter/pie/heatmap plots, panel containers. Estilo y altura consistente con fn_tokens + ImPlot. Pensadas para grids densos y monitores tipo services_monitor / process_explorer / registry_dashboard.

Funciones del grupo

ID Firma corta Que hace
kpi_card_cpp_viz kpi_card(label,value,delta,history,...,[y_min,y_max],[fmt],[icon]) Card con valor grande + delta + sparkline. Overload v1.4 con bounds fijos.
sparkline_cpp_viz sparkline(id,values,count,[color],[y_min,y_max],w,h) Mini line chart inline (sin ImPlot) para tablas/cards. v1.1 con Y fijo.
line_plot_cpp_viz line_plot(title,xs,ys,count,[y_min,y_max],height) Line plot ImPlot con ejes pineados. v1.2 con Y fijo.
bar_chart_cpp_viz bar_chart(title,labels,values,count,...) Barras verticales con tooltip y rotacion automatica.
scatter_plot_cpp_viz scatter_plot(title,xs,ys,count,height) Scatter 2D ImPlot.
pie_chart_cpp_viz pie_chart(title,labels,values,count,height) Pie/donut con tooltip por slice.
heatmap_cpp_viz heatmap(title,data,rows,cols,...) Mapa de calor 2D.
histogram_cpp_viz histogram(title,values,count,bins,height) Histograma con bins automaticos.
dashboard_panel_cpp_core dashboard_panel_begin/end(title,...) Contenedor estilizado con borde y padding.
plot_theme_cpp_core gestion de temas Presets dark/light/high-contrast para ImPlot.

Ejemplo canonico — grid de KPIs con escala absoluta

#include "viz/kpi_card.h"
#include "viz/line_plot.h"
#include "core/icons_tabler.h"

// CPU%, RAM% comparten dominio 0-100 -> Y fijo permite comparar visualmente
// entre cards y entre hosts en el mismo grid.
ImGui::Columns(2, "kpis", false);
kpi_card("CPU", cpu_pct, 0.0f, cpu_history, n, 0.0f, 100.0f, "%.1f%%", TI_CPU);
ImGui::NextColumn();
kpi_card("RAM", ram_pct, 0.0f, ram_history, n, 0.0f, 100.0f, "%.1f%%", TI_DATABASE);
ImGui::Columns(1);

// Grafico grande tambien fijo:
float xs[N], ys[N]; /* ... */
line_plot("CPU %", xs, ys, N, 0.0f, 100.0f, 160.0f);

Fronteras

  • NO incluye data_table_* — tablas TQL viven en cpp-tables y data-table-renderers.
  • NO incluye 3D (scatter_3d, surface_plot_3d, contour, mc_*_gpu) — exploraciones cientificas, no dashboards.
  • NO incluye graph_renderer / graph_icons — GPU graph layout es otro dominio.
  • Apps que componen estas primitivas (services_monitor, process_explorer, registry_dashboard) NO entran aqui — son artefactos, no funciones.

Notas

  • Todas las primitivas son pure (no I/O, no estado mutable salvo ImGui frame state) salvo kpi_card y sparkline que escriben al draw list del frame.
  • Altura del plot SIEMPRE explicita — evita feedback loops con contenedores AutoResizeY.
  • Colores: usar fn_tokens::colors::{primary,success,error,text_muted,...} para coherencia con @fn_library.
  • Y fijo (overloads v1.1+/v1.2+/v1.4+) es la forma correcta para metricas con dominio conocido: hosts en grid comparables sin truco visual.