mirror of
https://github.com/storytold/voder-proxy.git
synced 2026-10-19 07:43:12 +00:00
always fall back to default host
This commit is contained in:
+11
-7
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user