feat(monitor): Monitor tab as primary landing + errors KPI + recent executions + date filter
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>
This commit is contained in:
+22
@@ -35,6 +35,28 @@ bool load_unit_tests_http(const std::string& api_url,
|
||||
const std::string& function_id,
|
||||
std::vector<UnitTestRow>& out);
|
||||
|
||||
// Issue 0085d: Load Claude usage telemetry from ops:call_monitor (top
|
||||
// functions, recent violations, copied code). Si la BD no esta disponible
|
||||
// setea out.claude.available = false sin error.
|
||||
//
|
||||
// `window_secs`: ventana hacia atras desde now. 0 = sin filtro (All).
|
||||
// Aplica a total_calls, total_errors, top_functions, recent_executions,
|
||||
// recent_violations. total_versions/total_copies son acumulados (no filtran).
|
||||
bool load_claude_usage_http(const std::string& api_url, RegistryData& out,
|
||||
int window_secs);
|
||||
|
||||
// Variante legacy (window default 24h). Usar la version con window_secs.
|
||||
inline bool load_claude_usage_http(const std::string& api_url, RegistryData& out) {
|
||||
return load_claude_usage_http(api_url, out, 86400);
|
||||
}
|
||||
|
||||
// Carga la ventana de "Recent Executions" (calls table) ordenada por ts DESC.
|
||||
// Filtrada por window_secs (0 = sin filtro). limit = max filas (default 100).
|
||||
bool load_recent_executions_http(const std::string& api_url,
|
||||
int window_secs, int limit,
|
||||
std::vector<RecentExecutionRow>& out,
|
||||
long long& out_max_id);
|
||||
|
||||
// Operaciones de mutacion (thread-safe porque http_post ya lo es).
|
||||
// Devuelven el body de respuesta en `out_body`. true si HTTP status 2xx.
|
||||
bool http_post_reindex(const std::string& api_url, std::string& out_body);
|
||||
|
||||
Reference in New Issue
Block a user