Skip to main content

Machine

Struct Machine 

Source
pub(crate) struct Machine {
Show 19 fields config: Config, relay: String, state: Option<PresenceState>, since_wall_ms: u64, reason: Option<String>, last_ok_wall_ms: Option<u64>, failures: u32, due_ms: u64, health_due_ms: Option<u64>, dirty: bool, followups: Followups, older_until_ms: HashMap<String, (u32, u64)>, offset_ms: Option<i64>, relay_version: Option<String>, version_at_404: Option<String>, outage_since_ms: Option<u64>, outage_warned: bool, off: Option<PresenceOffReason>, goodbye_sent: bool,
}

Fields§

§config: Config§relay: String§state: Option<PresenceState>

None until the first state is entered.

§since_wall_ms: u64§reason: Option<String>§last_ok_wall_ms: Option<u64>§failures: u32§due_ms: u64§health_due_ms: Option<u64>§dirty: bool§followups: Followups§older_until_ms: HashMap<String, (u32, u64)>

Relays that took only an older version: which, and until when.

§offset_ms: Option<i64>§relay_version: Option<String>§version_at_404: Option<String>

The relay’s version just after its 404.

§outage_since_ms: Option<u64>§outage_warned: bool§off: Option<PresenceOffReason>

Why this install doesn’t publish; None while it does.

§goodbye_sent: bool

This machine asked for a goodbye (Action::Goodbye) whose result hasn’t come back yet. A sign-out reports Event::Goodbye too, even when none was due, so only this says the result is worth logging.

Implementations§

Source§

impl Machine

Source

pub(crate) fn new(config: Config, relay: &str) -> Self

Source

pub(crate) fn follows_changes(&self) -> bool

Whether a snapshot change is published (after the debounce), rather than only marked dirty.

Source

pub(crate) fn stamp(&self, wall_ms: u64) -> u64

published_at_ms for a record sent at wall_ms: on the relay’s clock when an answer has told it, else this computer’s.

Source

pub(crate) fn farewell(&self, now: &Now) -> Option<Farewell>

Whether a goodbye is due if this install went away now: something was published, publishing is on and no goodbye has been said since, and the relay takes v2 or later (one that took only v1 would refuse v3).

Source

pub(crate) fn record_version(&self, now: &Now) -> u32

The version a fresh try sends: an older one while this relay is remembered as taking only that.

Source

pub(crate) fn next(&mut self, event: Event, now: Now) -> Step

Source

fn next_while_off( &mut self, event: Event, now: &Now, logs: &mut Vec<Log>, ) -> Action

Off: nothing is sent until publishing is turned on again; a goodbye in flight when it was turned off lands here.

Source

fn enter_off( &mut self, reason: PresenceOffReason, now: &Now, logs: &mut Vec<Log>, )

Stop publishing for reason; one log line per new reason.

Source

fn next_while_on( &mut self, event: Event, now: Now, logs: &mut Vec<Log>, ) -> Action

Source

fn attempt(&mut self, v: Option<u32>, now: &Now) -> Action

Send the latest snapshot. v is set for a second try of the same record; a fresh try forgets the second tries spent.

Source

fn on_answer( &mut self, sent_v: u32, answer: Answer, now: &Now, logs: &mut Vec<Log>, ) -> Action

Source

fn reject(&mut self, why: String, now: &Now, logs: &mut Vec<Log>) -> Action

Source

fn on_health( &mut self, version: Option<String>, now: &Now, logs: &mut Vec<Log>, ) -> Action

Source

fn backoff(&self, now: &Now) -> u64

Full jitter: anywhere up to base * 2^(failures - 1), capped, but no less than the floor.

Source

fn observe_date( &mut self, relay_date_ms: Option<u64>, now: &Now, logs: &mut Vec<Log>, )

Learn the relay’s clock from an answer’s Date.

Source

fn clock_skewed(&self) -> bool

Source

fn enter( &mut self, state: PresenceState, reason: Option<String>, text: &str, now: &Now, logs: &mut Vec<Log>, )

Enter state for reason; one log line when the state changes.

Source

fn warn_long_outage(&mut self, now: &Now, logs: &mut Vec<Log>)

Source

pub(crate) fn status(&self, now: &Now) -> Option<PresenceStatusResult>

The status for presence.status; None before the first state.

Trait Implementations§

Source§

impl Debug for Machine

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

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

impl<T> Instrument for T

§

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

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

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
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

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