(
&self,
project_root: &std::path::Path,
session_id: Option<String>,
tool_name: &str,
request_id: &Value,
arguments: &Value,
)
| 2702 | } |
| 2703 | |
| 2704 | fn record_mcp_tool_error_analytics( |
| 2705 | &self, |
| 2706 | project_root: &std::path::Path, |
| 2707 | session_id: Option<String>, |
| 2708 | tool_name: &str, |
| 2709 | request_id: &Value, |
| 2710 | arguments: &Value, |
| 2711 | ) { |
| 2712 | let Some(gdb) = self.global_db.clone() else { |
| 2713 | return; |
| 2714 | }; |
| 2715 | let event = mcp_tool_analytics_event(McpToolAnalyticsEvent { |
| 2716 | project_root, |
| 2717 | session_id, |
| 2718 | tool_name, |
| 2719 | outcome: "error", |
| 2720 | raw_file_tokens: 0, |
| 2721 | response_tokens: 0, |
| 2722 | net_saved_tokens: 0, |
| 2723 | timestamp: crate::tracedecay::current_timestamp(), |
| 2724 | request_id, |
| 2725 | arguments, |
| 2726 | internal_analytics: None, |
| 2727 | }); |
| 2728 | self.spawn_observed_ledger_write(async move { |
| 2729 | if let Err(e) = gdb.append_analytics_event(&event).await { |
| 2730 | eprintln!("[tracedecay] analytics_events insert failed: {e}"); |
| 2731 | } |
| 2732 | }); |
| 2733 | } |
| 2734 | |
| 2735 | fn record_hook_route_analytics( |
| 2736 | &self, |
no test coverage detected