87b7ef45ff
Rebrand "Claude Usage" tab to "Monitor" and promote it to first/default tab in
the main TabBar. Monitor is the landing for the reactive loop (construir →
ejecutar → recopilar → analizar → mejorar).
UI additions:
- Local toolbar inside Monitor with date preset combo (1h / 24h / 7d / 30d /
All), manual Refresh button, and live LED + last-event-ts indicator.
- 5 KPI cards (was 4): added "Errors" derived from COUNT(*) FROM calls WHERE
success = 0 filtered by the active window.
- New sub-tab "Recent Executions" (first sub-tab) with columns: When,
Function, Tool, ms, OK (check/X colored), Error class. Backed by calls
table, sorted by ts DESC, limit 100, filtered by window.
- Violations sub-tab gains "When" column with formatted ts.
Data layer:
- data.h: RecentExecutionRow + window_secs + ws_connected/last_event_ts /
last_seen_call_id watermark on ClaudeUsageData.
- data_http.{h,cpp}: load_claude_usage_http now takes window_secs and embeds
ts_filter() in calls/errors/violations queries. total_errors populated.
recent_executions populated up to 100 rows. New standalone
load_recent_executions_http() for future WS-driven partial refetch.
- main.cpp: reload_data preserves window_secs across reloads; new
reload_monitor() does a Monitor-only refetch when the user changes the
window or clicks Refresh, without re-querying the full registry.
Wiring:
- views.h: draw_monitor + monitor_consume_reload_request() +
monitor_set_ws_state() exported. draw_claude_usage removed.
- views.cpp: render() consumes monitor_consume_reload_request each frame
and dispatches reload_monitor().
This is the UI half of issue 0086. The server-side WebSocket endpoint in
sqlite_api and the C++ WS client are next; the LED is wired to
monitor_set_ws_state but stays gray until those land.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
40 lines
1.7 KiB
C++
40 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "data.h"
|
|
#include <string>
|
|
|
|
// Draw the full dashboard. Call every frame.
|
|
void draw_dashboard(RegistryData& data);
|
|
|
|
// Called once from main.cpp after parsing --api to share the URL with the
|
|
// views (for triggering reindex/add mutations).
|
|
void views_set_api_url(const std::string& url);
|
|
|
|
// Individual views (called by draw_dashboard)
|
|
void draw_kpi_row(const RegistryData& data);
|
|
void draw_charts(RegistryData& data, float height = 250.0f);
|
|
void draw_recent_functions(const std::vector<FunctionRow>& funcs);
|
|
void draw_apps_list(const std::vector<AppRow>& apps);
|
|
void draw_analysis_list(const std::vector<AnalysisRow>& analyses);
|
|
void draw_types_list(const std::vector<TypeRow>& types);
|
|
void draw_projects_list(RegistryData& data);
|
|
|
|
// Explorer: lista navegable de funciones + visor de codigo y documentacion.
|
|
// Carga la lista completa al primer render via /api/databases/registry/query.
|
|
void draw_functions_explorer();
|
|
|
|
// Issue 0086: tab "Monitor" (antes "Claude Usage"). Pestana principal y por
|
|
// defecto. Muestra KPIs del bucle reactivo + Recent Executions con timestamps,
|
|
// top functions, violations, copied code. Filtro de fecha por presets y
|
|
// estado WS live (LED + ts ultimo evento). Si data.claude.available == false
|
|
// muestra placeholder con instrucciones para inicializar call_monitor.
|
|
void draw_monitor(RegistryData& data);
|
|
|
|
// Flag global: cuando draw_monitor cambia la ventana o WS reconecta y necesita
|
|
// refetch parcial. Lo lee main.cpp y llama load_claude_usage_http sin tocar
|
|
// el resto del registry (rapido).
|
|
bool monitor_consume_reload_request();
|
|
|
|
// Setter expuesto a main.cpp: refleja estado WS en el LED. true = live.
|
|
void monitor_set_ws_state(bool connected, long long last_event_ts);
|