Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/Vine/Client/
CheckSideCarHealth.rs

1//! Health check: connection exists in the pool, last activity within
2//! `HEALTH_CHECK_INTERVAL_MS`, and failure count below the retry
3//! threshold.
4
5use std::time::Duration;
6
7use crate::Vine::{
8	Client::Shared::{CONNECTION_METADATA, HEALTH_CHECK_INTERVAL_MS, MAX_RETRY_ATTEMPTS},
9	Error::VineError,
10};
11
12pub fn Fn(SideCarIdentifier:&str) -> Result<bool, VineError> {
13	let Metadata = CONNECTION_METADATA.lock();
14
15	if let Some(Connection) = Metadata.get(SideCarIdentifier) {
16		let IsStale = Connection.LastActivity.elapsed() > Duration::from_millis(HEALTH_CHECK_INTERVAL_MS);
17
18		let HasManyFailures = Connection.FailureCount > MAX_RETRY_ATTEMPTS;
19
20		Ok(Connection.IsHealthy && !IsStale && !HasManyFailures)
21	} else {
22		Err(VineError::ClientNotConnected(SideCarIdentifier.to_string()))
23	}
24}