try next port if taken
parent
649235f1d2
commit
6b95e59acf
71
src/main.rs
71
src/main.rs
|
@ -109,12 +109,11 @@ fn main() -> Result<()> {
|
||||||
#[cfg(not(feature = "thumbnails"))]
|
#[cfg(not(feature = "thumbnails"))]
|
||||||
let thumbnail_store = None;
|
let thumbnail_store = None;
|
||||||
|
|
||||||
let bind: SocketAddr = matches
|
let mut bind: SocketAddr = matches
|
||||||
.value_of("BIND")
|
.value_of("BIND")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.parse()
|
.parse()
|
||||||
.expect("Incorrect bind format.");
|
.expect("Incorrect bind format.");
|
||||||
info!("Starting server at: {}", &bind);
|
|
||||||
|
|
||||||
let state = routes::State {
|
let state = routes::State {
|
||||||
upend: upend.clone(),
|
upend: upend.clone(),
|
||||||
|
@ -141,32 +140,54 @@ fn main() -> Result<()> {
|
||||||
warn!("No Web UI directory present ({:?}), disabling...", ui_path);
|
warn!("No Web UI directory present ({:?}), disabling...", ui_path);
|
||||||
}
|
}
|
||||||
let ui_enabled = ui_path.exists() && !matches.is_present("NO_UI");
|
let ui_enabled = ui_path.exists() && !matches.is_present("NO_UI");
|
||||||
HttpServer::new(move || {
|
|
||||||
let app = App::new()
|
|
||||||
.data(state.clone())
|
|
||||||
.wrap(middleware::Logger::default().exclude("/api/jobs"))
|
|
||||||
.service(routes::get_raw)
|
|
||||||
.service(routes::get_thumbnail)
|
|
||||||
.service(routes::get_query)
|
|
||||||
.service(routes::get_object)
|
|
||||||
.service(routes::put_object)
|
|
||||||
.service(routes::delete_object)
|
|
||||||
.service(routes::api_refresh)
|
|
||||||
.service(routes::list_hier)
|
|
||||||
.service(routes::list_hier_roots)
|
|
||||||
.service(routes::latest_files)
|
|
||||||
.service(routes::get_file)
|
|
||||||
.service(routes::get_jobs)
|
|
||||||
.service(routes::get_info);
|
|
||||||
|
|
||||||
if ui_enabled {
|
let mut cnt = 0;
|
||||||
app.service(actix_files::Files::new("/", &ui_path).index_file("index.html"))
|
let server = loop {
|
||||||
|
let state = state.clone();
|
||||||
|
let ui_path = ui_path.clone();
|
||||||
|
|
||||||
|
let server = HttpServer::new(move || {
|
||||||
|
let app = App::new()
|
||||||
|
.data(state.clone())
|
||||||
|
.wrap(middleware::Logger::default().exclude("/api/jobs"))
|
||||||
|
.service(routes::get_raw)
|
||||||
|
.service(routes::get_thumbnail)
|
||||||
|
.service(routes::get_query)
|
||||||
|
.service(routes::get_object)
|
||||||
|
.service(routes::put_object)
|
||||||
|
.service(routes::delete_object)
|
||||||
|
.service(routes::api_refresh)
|
||||||
|
.service(routes::list_hier)
|
||||||
|
.service(routes::list_hier_roots)
|
||||||
|
.service(routes::latest_files)
|
||||||
|
.service(routes::get_file)
|
||||||
|
.service(routes::get_jobs)
|
||||||
|
.service(routes::get_info);
|
||||||
|
|
||||||
|
if ui_enabled {
|
||||||
|
app.service(actix_files::Files::new("/", &ui_path).index_file("index.html"))
|
||||||
|
} else {
|
||||||
|
app
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let bind_result = server.bind(&bind);
|
||||||
|
if let Ok(server) = bind_result {
|
||||||
|
break server;
|
||||||
} else {
|
} else {
|
||||||
app
|
warn!("Failed to bind at {:?}, trying next port number...", bind);
|
||||||
|
bind.set_port(bind.port() + 1);
|
||||||
}
|
}
|
||||||
})
|
|
||||||
.bind(&bind)?
|
if cnt > 10 {
|
||||||
.run();
|
panic!("Couldn't start server.")
|
||||||
|
} else {
|
||||||
|
cnt += 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
info!("Starting server at: {}", &bind);
|
||||||
|
server.run();
|
||||||
|
|
||||||
if !matches.is_present("NO_INITIAL_UPDATE") {
|
if !matches.is_present("NO_INITIAL_UPDATE") {
|
||||||
info!("Running initial update...");
|
info!("Running initial update...");
|
||||||
|
|
Loading…
Reference in New Issue