- main
- manifest
- deps
- main
- Install
- Run
use fastly::experimental::{BackendExt, BackendHealth};
use fastly::{Backend, Error, Request, Response};
use rand::seq::SliceRandom;
#[fastly::main]
fn main(req: Request) -> Result<Response, Error> {
let mut backends = ["origin_0", "origin_1"];
let mut rng = rand::thread_rng();
backends.shuffle(&mut rng);
let mut chosen_backend = None;
for name in &backends {
let backend = Backend::from_name(name)
.unwrap();
if let Ok(BackendHealth::Healthy) = backend.is_healthy() {
println!("Found healthy backend: {}", name);
chosen_backend = Some(backend);
break;
}
println!("Backend {} is not explicitly healthy, trying next...", name);
}
if chosen_backend.is_none() {
println!("All backends are unhealthy or unknown!");
return Ok(Response::from_status(503)
.with_body("Service Unavailable: No healthy backends available."));
}
println!("Sending request...");
let backend = chosen_backend.unwrap();
let beresp = req.send(backend)?;
Ok(beresp)
}