Skip to main content
Glama
on_response.rs1.66 kB
use std::time::Duration; use tracing::{ Level, Span, }; use super::DEFAULT_MESSAGE_LEVEL; use crate::{ middleware::{ LatencyUnit, trace::Latency, }, response::Response, }; pub trait OnResponse<B> { fn on_response(self, response: &Response<B>, latency: Duration, span: &Span); } impl<B> OnResponse<B> for () { #[inline] fn on_response(self, _response: &Response<B>, _latency: Duration, _span: &Span) {} } impl<B, F> OnResponse<B> for F where F: FnOnce(&Response<B>, Duration, &Span), { fn on_response(self, response: &Response<B>, latency: Duration, span: &Span) { self(response, latency, span) } } #[derive(Clone, Debug)] pub struct DefaultOnResponse { level: Level, latency_unit: LatencyUnit, } impl Default for DefaultOnResponse { fn default() -> Self { Self { level: DEFAULT_MESSAGE_LEVEL, latency_unit: LatencyUnit::Millis, } } } impl DefaultOnResponse { pub fn new() -> Self { Self::default() } pub fn level(mut self, level: Level) -> Self { self.level = level; self } pub fn latency_unit(mut self, latency_unit: LatencyUnit) -> Self { self.latency_unit = latency_unit; self } } impl<B> OnResponse<B> for DefaultOnResponse { fn on_response(self, _response: &Response<B>, latency: Duration, _span: &Span) { let latency = Latency { unit: self.latency_unit, duration: latency, }; event_dynamic_lvl!( self.level, %latency, "finished processing mesasge" ); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server