Struct metrix::cockpit::Cockpit

source ·
pub struct Cockpit<L> { /* private fields */ }
Expand description

A cockpit groups panels.

Use a cockpit to group panels that are somehow related. Since the Cockpit is generic over its label you can use an enum as a label for grouping panels easily.

Example

Imagine you have a HTTP component that makes requests to another service and you want to track successful and failed requests individually.

use std::time::Instant;
use metrix::{Observation, HandlesObservations};
use metrix::instruments::*;
use metrix::cockpit::*;

#[derive(Clone, PartialEq, Eq)]
enum Request {
    Successful,
    Failed,
}

let counter = Counter::new_with_defaults("count");
let gauge = Gauge::new_with_defaults("last_latency");
let meter = Meter::new_with_defaults("per_second");
let histogram = Histogram::new_with_defaults("latencies");

assert_eq!(0, counter.get());
assert_eq!(None, gauge.get());

let mut success_panel = Panel::with_name(Request::Successful,
"succesful_requests"); success_panel.set_counter(counter);
success_panel.set_gauge(gauge);
success_panel.set_meter(meter);
success_panel.set_histogram(histogram);

let counter = Counter::new_with_defaults("count");
let gauge = Gauge::new_with_defaults("last_latency");
let meter = Meter::new_with_defaults("per_second");
let histogram = Histogram::new_with_defaults("latencies");

assert_eq!(0, counter.get());
assert_eq!(None, gauge.get());

let mut failed_panel = Panel::with_name(Request::Failed, "failed_requests");
failed_panel.set_counter(counter);
failed_panel.set_gauge(gauge);
failed_panel.set_meter(meter);
failed_panel.set_histogram(histogram);

let mut cockpit = Cockpit::new("requests", None);
cockpit.add_panel(success_panel);
cockpit.add_panel(failed_panel);

let observation = Observation::ObservedOneValue {
    label: Request::Successful,
    value: 100,
    timestamp: Instant::now(),
};

cockpit.handle_observation(&observation);

{
    let panels = cockpit.panels();
    let success_panel = panels
        .iter()
        .find(|p| p.label() == &Request::Successful)
        .unwrap();

    assert_eq!(Some(1), success_panel.counter().map(|c| c.get()));
    assert_eq!(Some(100), success_panel.gauge().and_then(|g| g.get()));
}

let observation = Observation::ObservedOneValue {
    label: Request::Failed,
    value: 667,
    timestamp: Instant::now(),
};

cockpit.handle_observation(&observation);

let panels = cockpit.panels();
let failed_panel = panels
    .iter()
    .find(|p| p.label() == &Request::Failed)
    .unwrap();

assert_eq!(Some(1), failed_panel.counter().map(|c| c.get()));
assert_eq!(Some(667), failed_panel.gauge().and_then(|g| g.get()));

Implementations§

Creates a new instance.

Even though the name is optional it is suggested to use a name for a cockpit since in most cases a Cockpit is a meaningful grouping for panels and instruments.

Creates a new Cockpit without a name.

This will have the effect that there will be no grouping in the snapshot around the contained components.

Creates a new Cockpit with a name and a ValueScaling.

The scaling is calculated on the value of Observation::ObservedOneValue prior to delegating the Observation to the Panels. If the containing components also do a value scaling, the scaling will be applied multiple times which is most likely wrong.

Creates a new Cockpit with just a name.

Returns the name of this cockpit.

If there is a name set, this will group the inner components in the snapshot.

Sets a name for this Cockpit. This will also enable grouping.

Sets the title which will be displayed if a descriptive snaphot is requested.

Sets the description which will be displayed if a descriptive snaphot is requested.

Set and enable value scaling.

Sets the maximum amount of time this cockpit may be inactive until no more snapshots are taken

Add a Panel to this cockpit.

A Panel will receive only those Observations wher labels match.

There can be multiple Panels for the same label.

Returns the Panels

Returns the Panels mutable

Add a handler. This can be custom logic for metrics.

A handler will be passed all Observations unlike a Panel which will only receive Observations where the label matches.

Returns all the handlers.

Adds a snapshooter.

A snapshooter will only be invoked when a Snapshot is requested. It will never receive an Observation.

Returns all snapshooters.

Trait Implementations§

Returns the “default value” for a type. Read more
Puts the current snapshot values into the given Snapshot thereby following the guidelines of PutsSnapshot. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.