pub use super::span_names::MCP_RESOURCE;
pub use super::span_names::MCP_TOOL;
use crate::metrics::mcp::McpOperationOutcome;
pub fn tool_span(operation: &'static str) -> tracing::Span {
#[cfg(feature = "otel-traces")]
{
tracing::info_span!(MCP_TOOL, operation, result = tracing::field::Empty,)
}
#[cfg(not(feature = "otel-traces"))]
{
let _ = operation;
tracing::Span::none()
}
}
pub fn resource_span(operation: &'static str) -> tracing::Span {
#[cfg(feature = "otel-traces")]
{
tracing::info_span!(MCP_RESOURCE, operation, result = tracing::field::Empty,)
}
#[cfg(not(feature = "otel-traces"))]
{
let _ = operation;
tracing::Span::none()
}
}
pub fn record_outcome(span: &tracing::Span, outcome: McpOperationOutcome) {
let result = match outcome {
McpOperationOutcome::Success => "success",
McpOperationOutcome::Failure => "failure",
McpOperationOutcome::Denied => "denied",
};
span.record(crate::semantic::labels::RESULT, result);
}