use miden_remote_prover::COMPONENT;
use pingora::prelude::sleep;
use pingora::server::ShutdownWatch;
use pingora::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, shutdown: ShutdownWatch) {
Box::pin(async move {
loop {
{
if *shutdown.borrow() {
break;
}
}
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);
}
}
self.update_status_cache().await;
sleep(self.health_check_interval).await;
}
})
.await;
}
}