pub struct Process {
pub cpu_pct: f32,
pub rss_bytes: u64,
pub window_ns: u64,
}Expand description
One participant’s OWN process resource sample (published by the
runner off the heartbeat loop). Subscriber demuxes by envelope
source, like presence::Heartbeat.
Fields§
§cpu_pct: f32§rss_bytes: u64§window_ns: u64Trait Implementations§
Source§impl ContractBody for Process
impl ContractBody for Process
Source§const NAME: &'static str = "y2026_9::telemetry::Process"
const NAME: &'static str = "y2026_9::telemetry::Process"
The version-qualified type path this body’s own generation module
places it at: the version module name, then the
::-joined node path
(dynamic-node vars are topic params, never type-path segments), then
the PascalCase type leaf, e.g. "y2026_1::drive::Target" or
"y2026_1::component::motor::Command". This is the contract’s source
identity (D1) - two contracts interoperate iff they share this exact
name - as distinct from TOPIC, the resolved
wire key derived from it. NAME is exactly the "::"-join of
GENERATION and
CONTRACT; it stays available for callers
that want the whole identity as one string (e.g. display), while
metadata recording splices the two split consts instead (coherence-gate
design doc §2 - a joined name is not machine-parseable without
assuming the generation naming scheme).Source§const GENERATION: &'static str = "y2026_9"
const GENERATION: &'static str = "y2026_9"
This body’s generation alone, e.g.
"y2026_1" - equal to
<Self::Api as ApiVersion>::ID, but exposed directly on the body so a
metadata recorder (#[derive(phoxal::Api)]’s linker-section
splicing) can const-splice it without routing through Self::Api.
Split from CONTRACT so consumers (the
coherence gate, catalog) record generation and contract as two
separate fields rather than parsing a joined name.Source§const CONTRACT: &'static str = "telemetry::Process"
const CONTRACT: &'static str = "telemetry::Process"
This body’s contract path within its own generation: the
::-joined
node path (dynamic-node vars excluded, as with NAME) plus the
PascalCase type leaf, e.g. "drive::Target". The logical
contract - stable across a generation bump - is this value alone;
pairing it with GENERATION recovers the
full version-qualified identity (NAME).Source§const TOPIC: &'static str = "y2026_9/telemetry/process"
const TOPIC: &'static str = "y2026_9/telemetry/process"
The generation-qualified wire key: the version module name, then the
/-joined node path plus the topic leaf, with each dynamic node
contributing a {var} placeholder, e.g. "y2026_1/drive/state" or
"y2026_1/component/{instance}/motor/{capability}/command". The concrete
key is produced by the api-local topic builder, which fills the
placeholders.Source§impl<'de> Deserialize<'de> for Process
impl<'de> Deserialize<'de> for Process
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl StructuralPartialEq for Process
Auto Trait Implementations§
impl Freeze for Process
impl RefUnwindSafe for Process
impl Send for Process
impl Sync for Process
impl Unpin for Process
impl UnsafeUnpin for Process
impl UnwindSafe for Process
Blanket Implementations§
Source§impl<Source> AccessAs for Source
impl<Source> AccessAs for Source
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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>
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 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>
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