Struct PerformanceMetrics

Source
pub struct PerformanceMetrics {
    pub total_calls: usize,
    pub calls_answered: usize,
    pub calls_queued: usize,
    pub calls_abandoned: usize,
    pub average_wait_time_ms: u64,
    pub average_handle_time_ms: u64,
    pub service_level_percentage: f32,
    pub start_time: DateTime<Utc>,
    pub end_time: DateTime<Utc>,
}
Expand description

Performance metrics for a specified time period

Comprehensive call center performance data including call volumes, service levels, timing metrics, and quality indicators. This structure provides the foundation for performance reporting and analysis.

§Metrics Included

§Volume Metrics

  • Total Calls: All inbound calls received
  • Calls Answered: Calls successfully connected to agents
  • Calls Queued: Calls that entered queue systems
  • Calls Abandoned: Calls disconnected before being answered

§Timing Metrics

  • Average Wait Time: Mean time customers wait in queues
  • Average Handle Time: Mean time agents spend on calls
  • Service Level: Percentage of calls answered within target time

§Examples

§Performance Analysis

use rvoip_call_engine::api::supervisor::{SupervisorApi, PerformanceMetrics};
use chrono::{Utc, Duration};
 
let supervisor = SupervisorApi::new(engine);
 
let end_time = Utc::now();
let start_time = end_time - Duration::hours(1);
 
let metrics = supervisor.get_performance_metrics(start_time, end_time).await;
 
// Calculate derived metrics
let answer_rate = if metrics.total_calls > 0 {
    metrics.calls_answered as f32 / metrics.total_calls as f32 * 100.0
} else {
    0.0
};
 
let abandon_rate = if metrics.total_calls > 0 {
    metrics.calls_abandoned as f32 / metrics.total_calls as f32 * 100.0
} else {
    0.0
};
 
println!("📊 Performance Analysis:");
println!("  Answer Rate: {:.1}%", answer_rate);
println!("  Abandon Rate: {:.1}%", abandon_rate);
println!("  Service Level: {:.1}%", metrics.service_level_percentage);
 
// Performance targets
if answer_rate < 90.0 {
    println!("🚨 Answer rate below 90% target");
}
if abandon_rate > 5.0 {
    println!("⚠️ Abandon rate above 5% target");
}
if metrics.service_level_percentage < 80.0 {
    println!("📉 Service level below 80% target");
}

Fields§

§total_calls: usize

Total number of calls received in the period

§calls_answered: usize

Number of calls successfully answered by agents

§calls_queued: usize

Number of calls that entered queue systems

§calls_abandoned: usize

Number of calls abandoned before being answered

§average_wait_time_ms: u64

Average wait time in queues (milliseconds)

§average_handle_time_ms: u64

Average call handling time (milliseconds)

§service_level_percentage: f32

Service level percentage (calls answered within target time)

§start_time: DateTime<Utc>

Start of the measurement period

§end_time: DateTime<Utc>

End of the measurement period

Trait Implementations§

Source§

impl Clone for PerformanceMetrics

Source§

fn clone(&self) -> PerformanceMetrics

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PerformanceMetrics

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,