use miden_remote_prover::COMPONENT;
use pingora::{prelude::sleep, server::ShutdownWatch, services::background::BackgroundService};
use tonic::async_trait;
use tracing::{debug_span, error};
use super::LoadBalancerState;
#[async_trait]
impl BackgroundService for LoadBalancerState {
async fn start(&self, mut _shutdown: ShutdownWatch) {
Box::pin(async move {
loop {
let span = debug_span!(target: COMPONENT, "proxy.health_check");
let _guard = span.enter();
{
let mut workers = self.workers.write().await;
for worker in workers.iter_mut() {
let status_result = worker.check_status(self.supported_proof_type).await;
if let Err(ref reason) = status_result {
error!(
err = %reason,
worker.address = worker.address(),
"Worker failed health check"
);
}
worker.update_status(status_result);
}
}
sleep(self.health_check_interval).await;
}
})
.await;
}
}