- main
- manifest
- deps
- main
- Install
- Run
use fastly::{Backend, Error, Request, Response};
use fastly::experimental::{BackendExt, BackendHealth};
use regex::Regex;
#[fastly::main]
fn main(req: Request) -> Result<Response, Error> {
let server_region = std::env::var("FASTLY_REGION").unwrap_or_else(|_| "no region env var is available".to_string());
println!("Region: {}", server_region);
let re0 = Regex::new(r"(^EU-|^AF-|^South-Africa$)")?;
let be0 = Backend::from_name("origin_0")?;
let beresp = if re0.is_match(&server_region) && be0.is_healthy()? == BackendHealth::Healthy {
println!("Selecting European origin as geographically closest");
req.send("origin_0")?
} else {
let re1 = Regex::new(r"(^Asia-|^Asia$|^APAC$)")?;
let be1 = Backend::from_name("origin_1")?;
if re1.is_match(&server_region) && be1.is_healthy()? == BackendHealth::Healthy {
println!("Selecting Asian origin as geographically closest");
req.send("origin_1")?
} else {
let be2 = Backend::from_name("origin_2")?;
if be2.is_healthy()? == BackendHealth::Healthy {
println!("Selecting American origin as geographically closest");
req.send("origin_2")?
} else {
println!("Selecting European origin as fallback");
req.send("origin_0")?
}
}
};
Ok(beresp)
}