use crate::{Metric, MetricsBuilder, MetricsInstance};
use classy::extract::context::ConfigureContext;
use classy::extract::{Extract, FromContext};
use pdk_core::policy_context::api::Metadata;
use std::convert::Infallible;
pub trait Readiness {
fn ready(&self);
}
pub struct ReadinessInstance {
gauge: MetricsInstance,
}
impl Readiness for ReadinessInstance {
fn ready(&self) {
self.gauge.set(1);
}
}
impl FromContext<ConfigureContext> for ReadinessInstance {
type Error = Infallible;
fn from_context(context: &ConfigureContext) -> Result<Self, Self::Error> {
let metrics: MetricsBuilder = context.extract()?;
let metadata: Metadata = context.extract()?;
let gauge = metrics
.gauge(&format!(
"{}/{}/ready",
metadata.policy_metadata.policy_namespace, metadata.policy_metadata.policy_name
))
.skip_default_tags()
.build();
Ok(ReadinessInstance { gauge })
}
}