report per agent whether a hive can pull its latest closure from the cache
for each agent the hive looks up its record in agent-closures, fetches the closure's narinfo from the cache with the pull token and checks that a signature by the cache's public key covers it. the result is a log line and the gauge hyperhive.agent.closure_pullable, with a reason label when it is 0. nothing is downloaded and deploys still build locally. part 3 of 3: the probe needs the cache facts and the closure read grant from parts 1 and 2.
This commit is contained in:
parent
a55d55e494
commit
5486fc0333
1 changed files with 812 additions and 34 deletions
|
|
@ -256,9 +256,29 @@ fn register_instruments(provider: &SdkMeterProvider, snapshot: Arc<Mutex<Vec<Con
|
|||
})
|
||||
.build();
|
||||
|
||||
register_closure_pullable(&meter);
|
||||
register_hive_instruments(&meter);
|
||||
}
|
||||
|
||||
/// 1 when this hive can fetch the agent's latest closure from the swarm's
|
||||
/// cache and verify its signature, else 0 with the `reason` it cannot. Nothing
|
||||
/// is reported until the first probe pass has run.
|
||||
fn register_closure_pullable(meter: &opentelemetry::metrics::Meter) {
|
||||
meter
|
||||
.u64_observable_gauge("hyperhive.agent.closure_pullable")
|
||||
.with_unit("1")
|
||||
.with_callback(|obs| {
|
||||
for (agent, reason) in crate::attic::probe::verdicts() {
|
||||
let mut attrs = vec![KeyValue::new("agent", agent)];
|
||||
if let Some(reason) = reason {
|
||||
attrs.push(KeyValue::new("reason", reason.label()));
|
||||
}
|
||||
obs.observe(u64::from(reason.is_none()), &attrs);
|
||||
}
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
/// The gauge value for `agent`: 1 when unrestricted, 0 when not. An agent
|
||||
/// missing from `stored` reads 1.
|
||||
fn unrestricted_value(stored: &permissions::Stored, agent: &str) -> u64 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue