use std::sync::Arc;
use std::time::Duration;
use surrealdb_mcp::metrics::{McpMetricsRecorder, McpToolOutcome};
use super::MetricsObserver;
pub struct McpRecorderAdapter {
inner: Arc<MetricsObserver>,
}
impl McpRecorderAdapter {
pub fn new(inner: Arc<MetricsObserver>) -> Self {
Self {
inner,
}
}
}
impl McpMetricsRecorder for McpRecorderAdapter {
fn record_tool_invocation(
&self,
tool: &'static str,
transport: &'static str,
outcome: McpToolOutcome,
duration: Duration,
) {
let metric_outcome = match outcome {
McpToolOutcome::Success => surrealdb_core::observe::Outcome::Success,
McpToolOutcome::ToolError | McpToolOutcome::ProtocolError => {
surrealdb_core::observe::Outcome::Error
}
};
self.inner.record_mcp_tool(
tool,
transport,
metric_outcome,
outcome.error_class(),
duration,
);
}
fn adjust_session_active(&self, delta: i64, transport: &'static str) {
self.inner.adjust_mcp_session_active(delta, transport);
}
}