Skip to main content

HealthResponse

Struct HealthResponse 

Source
pub struct HealthResponse {
    pub node_id: String,
    pub uptime_s: u64,
    pub in_flight_streams: u64,
    pub binding: BindingStatus,
    pub bound_node_id: Option<String>,
    pub registry_active: bool,
}
Expand description

Response body for admin_v1_health. Shared between the server (serializes) and decdn node health (deserializes via the generated client). Intentionally minimal: this method exists so an operator script can answer “is this admin port the node I think it is, and has it been up since I started watching?” with one RPC call.

Fields§

§node_id: String

Lowercase hex of this node’s iroh PublicKey.

§uptime_s: u64

Whole seconds since the runtime captured the process-start Instant at the top of decdn-node run (before any await, before the RPC preflight). Computed from a monotonic Instant so wall-clock skew can’t produce a negative or non-monotonic value.

§in_flight_streams: u64

Currently in-flight QUIC handler tasks holding a dispatch permit (read off the decdn_dispatch_in_flight gauge — see ConnectionLimiter in decdn-node). Polled by decdn node drain --wait (issue #604) to detect when all client streams have completed during a graceful drain.

§binding: BindingStatus

Whether node_id is the key bound to this operator on-chain (#1034). Sampled once at bring-up — the binding only changes by an explicit operator transaction, and re-reading it on every health poll would put an RPC round trip behind the readiness probe.

§bound_node_id: Option<String>

Lowercase hex of the node id the operator IS bound to, when that could be read. Present for BindingStatus::Bound (where it equals node_id) and, more usefully, for BindingStatus::Mismatch, where it names the key to restore. None for Unbound and Unknown.

§registry_active: bool

Whether this node is in the on-chain active-staker set right now (ADR 019 §Phase 4, criterion 1; #1030).

Purely diagnostic. The daemon does not gate delivery on it — a node policing its own registration constrains only operators who were never the threat (see ADR 019 §How criterion 1 is enforced). What false means is that the two EXTERNAL constraints are in force: the operator accrues no governance weight, because its declared capacity caps credited bytes at zero, and peers have no reason to route to a node they cannot slash.

Unlike Self::binding, this is read LIVE on every poll — it is a lookup in the registry projection the daemon already keeps current off CapacityBond events, not a chain round trip — so an operator who has just run decdn setup watches it flip to true without restarting the daemon.

false is the answer to “my node is up and healthy, why is it earning nothing”. Nothing on the wire says so; the traffic simply does not arrive. The cause is one of never registered, registered under a key this process no longer holds (see Self::binding), deregistered, ejected, bond below minBond, or an unbonding request in flight.

Trait Implementations§

Source§

impl Clone for HealthResponse

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for HealthResponse

Source§

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

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

impl<'de> Deserialize<'de> for HealthResponse

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 Serialize for HealthResponse

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<'de, T> BorrowedRpcObject<'de> for T
where T: RpcBorrow<'de> + RpcSend,

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> MaybeSend for T
where T: Send,

Source§

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

Source§

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

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<'de, T> RpcBorrow<'de> for T
where T: Deserialize<'de> + Debug + Send + Sync + Unpin,

Source§

impl<T> RpcObject for T
where T: RpcSend + RpcRecv,

Source§

impl<T> RpcRecv for T
where T: DeserializeOwned + Debug + Send + Sync + Unpin + 'static,

Source§

impl<T> RpcSend for T
where T: Serialize + Clone + Debug + Send + Sync + Unpin,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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