mirror of
https://github.com/telemt/telemt.git
synced 2026-09-14 14:34:11 +03:00
API for WEB: bounded lifecycle and overload observability added
Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
@@ -31,6 +31,9 @@ impl WebSession {
|
||||
};
|
||||
let generation = manager.active_generation();
|
||||
if !*generation.admission_rx.borrow() {
|
||||
manager.record_stream_rejected_reason(
|
||||
crate::web::telemetry::WebRejectionReason::GenerationAdmissionClosed,
|
||||
);
|
||||
self.trace_lifecycle(
|
||||
crate::web::trace::TraceLifecycleEvent::StreamRejected,
|
||||
Some(stream.id),
|
||||
@@ -70,6 +73,9 @@ impl WebSession {
|
||||
}
|
||||
};
|
||||
if let Err(future) = generation.try_spawn_session(future) {
|
||||
manager.record_stream_rejected_reason(
|
||||
crate::web::telemetry::WebRejectionReason::GenerationScopeClosed,
|
||||
);
|
||||
retain_rejected.store(retain_reservation_on_reject, Ordering::Release);
|
||||
self.trace_lifecycle(
|
||||
crate::web::trace::TraceLifecycleEvent::StreamRejected,
|
||||
@@ -257,7 +263,9 @@ async fn run_stream(
|
||||
return;
|
||||
};
|
||||
let Ok(_connection_permit) = connection_permits.try_acquire_owned() else {
|
||||
manager.record_stream_rejected();
|
||||
manager.record_stream_rejected_reason(
|
||||
crate::web::telemetry::WebRejectionReason::GenerationConnectionCapacity,
|
||||
);
|
||||
session.trace_lifecycle(
|
||||
crate::web::trace::TraceLifecycleEvent::StreamRejected,
|
||||
Some(stream_identity.id),
|
||||
|
||||
@@ -183,6 +183,11 @@ impl WebSession {
|
||||
&& data_items <= item_limit - items
|
||||
};
|
||||
if !fits {
|
||||
if let Some(manager) = self.manager.upgrade() {
|
||||
manager.telemetry().record_rejection(
|
||||
crate::web::telemetry::WebRejectionReason::QueueSessionCapacity,
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
let Some(manager) = self.manager.upgrade() else {
|
||||
|
||||
@@ -284,10 +284,13 @@ impl WebSession {
|
||||
}
|
||||
|
||||
fn reserve_stream_locked(&self, state: &mut SessionState) -> Option<u16> {
|
||||
let manager = self.manager.upgrade()?;
|
||||
if state.active_peer_ports.len() >= self.profile.max_streams_per_session {
|
||||
manager.record_stream_rejected_reason(
|
||||
crate::web::telemetry::WebRejectionReason::StreamSessionCapacity,
|
||||
);
|
||||
return None;
|
||||
}
|
||||
let manager = self.manager.upgrade()?;
|
||||
let peer_port = manager
|
||||
.try_acquire_stream(
|
||||
self.profile_key,
|
||||
|
||||
Reference in New Issue
Block a user