pub struct DMSCLoadBalancer { /* private fields */ }Expand description
Main load balancer implementation.
This struct provides a comprehensive load balancing solution with support for multiple strategies, health checking, connection management, and detailed statistics.
Implementations§
Source§impl DMSCLoadBalancer
impl DMSCLoadBalancer
Sourcepub fn new(strategy: DMSCLoadBalancerStrategy) -> Self
pub fn new(strategy: DMSCLoadBalancerStrategy) -> Self
Sourcepub async fn add_server(&self, server: DMSCBackendServer)
pub async fn add_server(&self, server: DMSCBackendServer)
Sourcepub async fn remove_server(&self, server_id: &str) -> bool
pub async fn remove_server(&self, server_id: &str) -> bool
Sourcepub async fn get_healthy_servers(&self) -> Vec<DMSCBackendServer>
pub async fn get_healthy_servers(&self) -> Vec<DMSCBackendServer>
Gets a list of all healthy backend servers.
§Returns
A vector of healthy DMSCBackendServer instances
Sourcepub async fn select_server(
&self,
client_ip: Option<&str>,
) -> DMSCResult<DMSCBackendServer>
pub async fn select_server( &self, client_ip: Option<&str>, ) -> DMSCResult<DMSCBackendServer>
Selects the most appropriate backend server for a client request.
This method applies the configured load balancing strategy to select a server, considering only healthy servers with available connections.
§Parameters
client_ip: Optional client IP address for IP Hash strategy
§Returns
A DMSCResult<DMSCBackendServer> with the selected server, or an error if no servers are available
Sourcepub async fn release_server(&self, server_id: &str)
pub async fn release_server(&self, server_id: &str)
Releases a server after a request is completed.
This method decrements the active connection count for the specified server.
§Parameters
server_id: ID of the server to release
Sourcepub async fn record_server_failure(&self, server_id: &str)
pub async fn record_server_failure(&self, server_id: &str)
Records a failed request to a server.
This method increments the failed request count and may mark the server as unhealthy if the failure rate exceeds a threshold.
§Parameters
server_id: ID of the server that failed
Sourcepub async fn record_response_time(&self, server_id: &str, response_time_ms: u64)
pub async fn record_response_time(&self, server_id: &str, response_time_ms: u64)
Records the response time for a successful request.
§Parameters
server_id: ID of the server that handled the requestresponse_time_ms: Response time in milliseconds
Sourcepub async fn get_server_stats(
&self,
server_id: &str,
) -> Option<DMSCLoadBalancerServerStats>
pub async fn get_server_stats( &self, server_id: &str, ) -> Option<DMSCLoadBalancerServerStats>
Sourcepub async fn get_all_stats(
&self,
) -> HashMap<String, DMSCLoadBalancerServerStats>
pub async fn get_all_stats( &self, ) -> HashMap<String, DMSCLoadBalancerServerStats>
Gets statistics for all servers.
§Returns
A HashMap<String, DMSCLoadBalancerServerStats> with statistics for all servers
Sourcepub async fn mark_server_healthy(&self, server_id: &str, healthy: bool)
pub async fn mark_server_healthy(&self, server_id: &str, healthy: bool)
Marks a server as healthy or unhealthy.
§Parameters
server_id: ID of the server to updatehealthy: New health status (true = healthy, false = unhealthy)
Sourcepub async fn perform_health_check(&self, server_id: &str) -> bool
pub async fn perform_health_check(&self, server_id: &str) -> bool
Sourcepub async fn start_health_checks(
self: Arc<Self>,
interval_secs: u64,
) -> JoinHandle<()>
pub async fn start_health_checks( self: Arc<Self>, interval_secs: u64, ) -> JoinHandle<()>
Sourcepub fn get_strategy(&self) -> &DMSCLoadBalancerStrategy
pub fn get_strategy(&self) -> &DMSCLoadBalancerStrategy
Gets the current load balancing strategy.
§Returns
A reference to the current DMSCLoadBalancerStrategy
Sourcepub async fn set_strategy(&mut self, strategy: DMSCLoadBalancerStrategy)
pub async fn set_strategy(&mut self, strategy: DMSCLoadBalancerStrategy)
Sourcepub async fn get_server_count(&self) -> usize
pub async fn get_server_count(&self) -> usize
Sourcepub async fn get_healthy_server_count(&self) -> usize
pub async fn get_healthy_server_count(&self) -> usize
Trait Implementations§
Source§impl Clone for DMSCLoadBalancer
impl Clone for DMSCLoadBalancer
Source§impl<'py> IntoPyObject<'py> for DMSCLoadBalancer
impl<'py> IntoPyObject<'py> for DMSCLoadBalancer
Source§type Target = DMSCLoadBalancer
type Target = DMSCLoadBalancer
Source§type Output = Bound<'py, <DMSCLoadBalancer as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <DMSCLoadBalancer as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for DMSCLoadBalancer
impl PyClass for DMSCLoadBalancer
Source§impl PyClassImpl for DMSCLoadBalancer
impl PyClassImpl for DMSCLoadBalancer
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = c"Main load balancer implementation.\n\nThis struct provides a comprehensive load balancing solution with support for multiple\nstrategies, health checking, connection management, and detailed statistics.\x00"
const RAW_DOC: &'static CStr = c"Main load balancer implementation.\n\nThis struct provides a comprehensive load balancing solution with support for multiple\nstrategies, health checking, connection management, and detailed statistics.\x00"
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<DMSCLoadBalancer>
type ThreadChecker = SendablePyClass<DMSCLoadBalancer>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyTypeInfo for DMSCLoadBalancer
impl PyTypeInfo for DMSCLoadBalancer
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.impl DerefToPyAny for DMSCLoadBalancer
impl ExtractPyClassWithClone for DMSCLoadBalancer
Auto Trait Implementations§
impl !Freeze for DMSCLoadBalancer
impl !RefUnwindSafe for DMSCLoadBalancer
impl Send for DMSCLoadBalancer
impl Sync for DMSCLoadBalancer
impl Unpin for DMSCLoadBalancer
impl UnwindSafe for DMSCLoadBalancer
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more