always fall back to default host

This commit is contained in:
Brandon Thomas
2020-06-29 22:59:05 -04:00
parent e850941f40
commit b50f84c280
+11 -7
View File
@@ -102,19 +102,22 @@ struct RequestDetails {
struct Router { struct Router {
pub routes: HashMap<String, String>, pub routes: HashMap<String, String>,
pub default_route: String,
} }
impl Router { impl Router {
fn get_random_host(&self) -> Option<String> { fn get_random_host(&self) -> String {
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
self.routes.values() self.routes.values()
.choose(&mut rng) .choose(&mut rng)
.map(|url| url.to_string()) .map(|url| url.to_string())
.unwrap_or(self.default_route.clone())
} }
fn get_speaker_host(&self, voice: &str) -> Option<String> { fn get_speaker_host(&self, voice: &str) -> String {
self.routes.get(voice) self.routes.get(voice)
.map(|url| url.to_string()) .map(|url| url.to_string())
.unwrap_or(self.default_route.clone())
} }
} }
@@ -132,7 +135,7 @@ fn speak_proxy(req: Request<Body>, remote_addr: SocketAddr, router: Arc<Router>,
speaker: request.speaker, speaker: request.speaker,
} }
}).and_then(move |request_details: RequestDetails| { }).and_then(move |request_details: RequestDetails| {
let proxy_host = match router.get_speaker_host(&request_details.speaker) { /*let proxy_host = match router.get_speaker_host(&request_details.speaker) {
Some(host) => host, Some(host) => host,
None => { None => {
let response = Response::builder() let response = Response::builder()
@@ -141,7 +144,9 @@ fn speak_proxy(req: Request<Body>, remote_addr: SocketAddr, router: Arc<Router>,
let result : BoxFut = Box::new(future::ok(response)); let result : BoxFut = Box::new(future::ok(response));
return result; return result;
}, },
}; };*/
let proxy_host = router.get_speaker_host(&request_details.speaker);
info!("Routing {} for {} to {}", endpoint, &request_details.speaker, &proxy_host); info!("Routing {} for {} to {}", endpoint, &request_details.speaker, &proxy_host);
@@ -194,6 +199,7 @@ fn main() -> AnyhowResult<()> {
let router = Arc::new(Router { let router = Arc::new(Router {
routes: route_map, routes: route_map,
default_route: default_route,
}); });
//let routes = route_map.clone(); //let routes = route_map.clone();
@@ -204,7 +210,6 @@ fn main() -> AnyhowResult<()> {
info!("Got a request from: {:?}", remote_addr); info!("Got a request from: {:?}", remote_addr);
let router2 = router.clone(); let router2 = router.clone();
let default_route2 = default_route.clone();
service_fn(move |req: Request<Body>| { service_fn(move |req: Request<Body>| {
let router3 = router2.clone(); let router3 = router2.clone();
@@ -215,8 +220,7 @@ fn main() -> AnyhowResult<()> {
(&Method::POST, "/speak_spectrogram") => (&Method::POST, "/speak_spectrogram") =>
speak_proxy(req, remote_addr.clone(), router3, "/speak_spectrogram"), speak_proxy(req, remote_addr.clone(), router3, "/speak_spectrogram"),
_ => { _ => {
let forward = router3.get_random_host() let forward = router3.get_random_host();
.unwrap_or(default_route2.clone());
hyper_reverse_proxy::call(remote_addr.ip(), &forward, req) hyper_reverse_proxy::call(remote_addr.ip(), &forward, req)
} }
} }