Skip to main content

Metrics

Struct Metrics 

Source
#[non_exhaustive]
pub struct Metrics { /* private fields */ }
Expand description

Aggregated simulation metrics, updated each tick from events.

Games query this via sim.metrics() for HUD display, scoring, or scenario evaluation.

Implementations§

Source§

impl Metrics

Source

pub const fn new() -> Self

Create a new Metrics with default throughput window (3600 ticks) and default wait-sample capacity (10 000).

Source

pub const fn with_throughput_window(self, window_ticks: u64) -> Self

Set the throughput window size (builder pattern).

Source

pub fn with_wait_sample_capacity(self, capacity: usize) -> Self

Set the wait-sample ring buffer capacity (builder pattern). 0 disables wait sampling entirely; percentile_wait_time will return 0 once the buffer is empty.

Shrinking below the current sample count truncates from the front (oldest samples evicted first) so the retained window always represents the most recent waits.

Source

pub const fn avg_wait_time(&self) -> f64

Average wait time in ticks (spawn to board).

Source

pub const fn avg_ride_time(&self) -> f64

Average ride time in ticks (board to exit).

Source

pub const fn max_wait_time(&self) -> u64

Maximum wait time observed (ticks).

Source

pub fn p95_wait_time(&self) -> u64

95th-percentile wait time over the last wait_sample_capacity boardings (ticks). Shorthand for percentile_wait_time(95.0). Returns 0 when no samples have been recorded.

CIBSE and community-benchmark traffic studies score against percentiles rather than the (avg, max) pair alone — max is dominated by rare outliers, avg hides the tail.

Source

pub fn percentile_wait_time(&self, p: f64) -> u64

Wait-time percentile over the retained sample window (ticks).

Uses the “nearest-rank” method: ceil(p/100 * n)-th smallest sample, clamped into 0..n. p = 0.0 returns the minimum, p = 100.0 returns the maximum. Returns 0 when the buffer is empty.

§Panics

Panics if p is NaN or outside [0.0, 100.0].

Source

pub fn wait_sample_count(&self) -> usize

Number of wait samples currently retained in the ring buffer. Useful for tests and HUDs that want to display “5 000 samples over last window” style diagnostics.

Source

pub const fn throughput(&self) -> u64

Riders delivered in the current throughput window.

Source

pub const fn total_delivered(&self) -> u64

Riders delivered total.

Source

pub const fn total_abandoned(&self) -> u64

Riders who abandoned.

Source

pub const fn total_spawned(&self) -> u64

Total riders spawned.

Source

pub const fn abandonment_rate(&self) -> f64

Abandonment rate (0.0 - 1.0).

Source

pub const fn total_distance(&self) -> f64

Total distance traveled by all elevators.

Source

pub const fn utilization_by_group(&self) -> &BTreeMap<String, f64>

Per-group instantaneous elevator utilization (fraction of elevators moving).

Source

pub const fn reposition_distance(&self) -> f64

Total distance traveled by elevators while repositioning.

Source

pub const fn total_moves(&self) -> u64

Total rounded-floor transitions across all elevators (passing-floor crossings plus arrivals).

Source

pub const fn total_settled(&self) -> u64

Total riders settled as residents.

Source

pub const fn total_rerouted(&self) -> u64

Total riders rerouted from resident phase.

Source

pub const fn throughput_window_ticks(&self) -> u64

Window size for throughput calculation (ticks).

Source

pub const fn total_energy_consumed(&self) -> f64

Total energy consumed by all elevators (requires energy feature).

Source

pub const fn total_energy_regenerated(&self) -> f64

Total energy regenerated by all elevators (requires energy feature).

Source

pub const fn net_energy(&self) -> f64

Net energy: consumed minus regenerated (requires energy feature).

Source

pub fn avg_utilization(&self) -> f64

Overall utilization: average across all groups.

Trait Implementations§

Source§

impl Clone for Metrics

Source§

fn clone(&self) -> Metrics

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 Metrics

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for Metrics

Source§

fn default() -> Self

Delegates to Metrics::new so #[derive(Default)]-on-holders and direct Metrics::default() callers get the same 3600-tick throughput window and 10 000-sample wait buffer that new() wires up. Without this, the derived Default would zero every field — silently disabling p95_wait_time sampling and collapsing the throughput window to an empty range (greptile review of #347).

Source§

impl<'de> Deserialize<'de> for Metrics

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Metrics

Source§

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

Compact one-line summary for HUDs and logs.

let m = Metrics::new();
assert_eq!(format!("{m}"), "0 delivered, avg wait 0.0t, 0% util");
Source§

impl Serialize for Metrics

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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<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, 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> 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,