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: boolThis 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
impl Machine
pub(crate) fn new(config: Config, relay: &str) -> Self
Sourcepub(crate) fn follows_changes(&self) -> bool
pub(crate) fn follows_changes(&self) -> bool
Whether a snapshot change is published (after the debounce), rather than only marked dirty.
Sourcepub(crate) fn stamp(&self, wall_ms: u64) -> u64
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.
Sourcepub(crate) fn farewell(&self, now: &Now) -> Option<Farewell>
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).
Sourcepub(crate) fn record_version(&self, now: &Now) -> u32
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.
pub(crate) fn next(&mut self, event: Event, now: Now) -> Step
Sourcefn next_while_off(
&mut self,
event: Event,
now: &Now,
logs: &mut Vec<Log>,
) -> Action
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.
Sourcefn enter_off(
&mut self,
reason: PresenceOffReason,
now: &Now,
logs: &mut Vec<Log>,
)
fn enter_off( &mut self, reason: PresenceOffReason, now: &Now, logs: &mut Vec<Log>, )
Stop publishing for reason; one log line per new reason.
fn next_while_on( &mut self, event: Event, now: Now, logs: &mut Vec<Log>, ) -> Action
Sourcefn attempt(&mut self, v: Option<u32>, now: &Now) -> Action
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.
fn on_answer( &mut self, sent_v: u32, answer: Answer, now: &Now, logs: &mut Vec<Log>, ) -> Action
fn reject(&mut self, why: String, now: &Now, logs: &mut Vec<Log>) -> Action
fn on_health( &mut self, version: Option<String>, now: &Now, logs: &mut Vec<Log>, ) -> Action
Sourcefn backoff(&self, now: &Now) -> u64
fn backoff(&self, now: &Now) -> u64
Full jitter: anywhere up to base * 2^(failures - 1), capped, but no
less than the floor.
Sourcefn observe_date(
&mut self,
relay_date_ms: Option<u64>,
now: &Now,
logs: &mut Vec<Log>,
)
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.
fn clock_skewed(&self) -> bool
Sourcefn enter(
&mut self,
state: PresenceState,
reason: Option<String>,
text: &str,
now: &Now,
logs: &mut Vec<Log>,
)
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.
fn warn_long_outage(&mut self, now: &Now, logs: &mut Vec<Log>)
Sourcepub(crate) fn status(&self, now: &Now) -> Option<PresenceStatusResult>
pub(crate) fn status(&self, now: &Now) -> Option<PresenceStatusResult>
The status for presence.status; None before the first state.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Machine
impl RefUnwindSafe for Machine
impl Send for Machine
impl Sync for Machine
impl Unpin for Machine
impl UnsafeUnpin for Machine
impl UnwindSafe for Machine
Blanket Implementations§
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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSync for T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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