This commit is contained in:
parent
abbaaf8381
commit
cd0c4487c6
1 changed files with 30 additions and 19 deletions
49
src/sites.rs
49
src/sites.rs
|
@ -3,6 +3,7 @@ use async_std::io::{BufReader, BufWriter, WriteExt};
|
||||||
use async_std::net::TcpStream;
|
use async_std::net::TcpStream;
|
||||||
use async_std::stream::StreamExt;
|
use async_std::stream::StreamExt;
|
||||||
use async_std::sync::RwLock;
|
use async_std::sync::RwLock;
|
||||||
|
use async_std::task::JoinHandle;
|
||||||
use async_std::{fs, task};
|
use async_std::{fs, task};
|
||||||
use camino::{Utf8Path, Utf8PathBuf};
|
use camino::{Utf8Path, Utf8PathBuf};
|
||||||
use color_eyre::Result;
|
use color_eyre::Result;
|
||||||
|
@ -12,7 +13,6 @@ use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use async_std::task::JoinHandle;
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct SiteState {
|
pub struct SiteState {
|
||||||
|
@ -152,9 +152,12 @@ async fn handle_download(ureq_agent: Arc<ureq::Agent>, sites: &Sites, caddy_cont
|
||||||
// Download
|
// Download
|
||||||
let archive_file_path = site.path.join(format!("{}.zip", current_version.id));
|
let archive_file_path = site.path.join(format!("{}.zip", current_version.id));
|
||||||
|
|
||||||
let mut response = task::spawn_blocking({
|
let response = task::spawn_blocking({
|
||||||
let url = current_version.download_url.clone();
|
let url = current_version.download_url.clone();
|
||||||
move || ureq_agent.get(url).call() }).await?;
|
move || ureq_agent.get(url).call()
|
||||||
|
})
|
||||||
|
.await?;
|
||||||
|
|
||||||
let status = response.status();
|
let status = response.status();
|
||||||
if !status.is_success() {
|
if !status.is_success() {
|
||||||
return Err(eyre!("Download request failed with status code {status}"));
|
return Err(eyre!("Download request failed with status code {status}"));
|
||||||
|
@ -162,20 +165,23 @@ async fn handle_download(ureq_agent: Arc<ureq::Agent>, sites: &Sites, caddy_cont
|
||||||
|
|
||||||
let archive_file = task::spawn_blocking({
|
let archive_file = task::spawn_blocking({
|
||||||
let archive_file_path = archive_file_path.to_owned().into_std_path_buf();
|
let archive_file_path = archive_file_path.to_owned().into_std_path_buf();
|
||||||
|
|
||||||
move || -> std::io::Result<std::fs::File> {
|
|
||||||
let mut writer = std::io::BufWriter::new(std::fs::OpenOptions::new()
|
|
||||||
.truncate(true)
|
|
||||||
.create(true)
|
|
||||||
.write(true)
|
|
||||||
.read(true)
|
|
||||||
.open(archive_file_path)?);
|
|
||||||
|
|
||||||
std::io::copy(&mut response.body_mut().as_reader(), &mut writer)?;
|
move || -> std::io::Result<std::fs::File> {
|
||||||
|
let mut writer = std::io::BufWriter::new(
|
||||||
|
std::fs::OpenOptions::new()
|
||||||
|
.truncate(true)
|
||||||
|
.create(true)
|
||||||
|
.write(true)
|
||||||
|
.read(true)
|
||||||
|
.open(archive_file_path)?,
|
||||||
|
);
|
||||||
|
|
||||||
|
std::io::copy(&mut response.into_body().into_reader(), &mut writer)?;
|
||||||
|
|
||||||
Ok(writer.into_inner()?)
|
Ok(writer.into_inner()?)
|
||||||
}
|
}
|
||||||
}).await?;
|
})
|
||||||
|
.await?;
|
||||||
|
|
||||||
let extraction_directory_path = site.path.join(¤t_version.id);
|
let extraction_directory_path = site.path.join(¤t_version.id);
|
||||||
let _ = fs::remove_dir_all(extraction_directory_path.as_std_path()).await;
|
let _ = fs::remove_dir_all(extraction_directory_path.as_std_path()).await;
|
||||||
|
@ -207,7 +213,7 @@ async fn handle_download(ureq_agent: Arc<ureq::Agent>, sites: &Sites, caddy_cont
|
||||||
// Cleanup
|
// Cleanup
|
||||||
fs::remove_file(archive_file_path.as_std_path()).await?;
|
fs::remove_file(archive_file_path.as_std_path()).await?;
|
||||||
if let Some(old_active_version) = old_active_version {
|
if let Some(old_active_version) = old_active_version {
|
||||||
fs::remove_dir_all(site.path.join(old_active_version.id).into_std_path_buf()).await?;
|
let _ = fs::remove_dir_all(site.path.join(old_active_version.id).into_std_path_buf()).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
info!("Cleanup finished for {domain}");
|
info!("Cleanup finished for {domain}");
|
||||||
|
@ -215,13 +221,18 @@ async fn handle_download(ureq_agent: Arc<ureq::Agent>, sites: &Sites, caddy_cont
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn sites_worker(mut download_tasks_receiver: async_std::channel::Receiver<String>, sites: Arc<Sites>, mut caddy_controller: CaddyController) -> Result<!> {
|
async fn sites_worker(
|
||||||
let mut ureq_agent = Arc::new(
|
mut download_tasks_receiver: async_std::channel::Receiver<String>,
|
||||||
ureq::Agent::new_with_config(ureq::Agent::config_builder()
|
sites: Arc<Sites>,
|
||||||
|
mut caddy_controller: CaddyController,
|
||||||
|
) -> Result<!> {
|
||||||
|
let ureq_agent = Arc::new(ureq::Agent::new_with_config(
|
||||||
|
ureq::Agent::config_builder()
|
||||||
|
.timeout_resolve(Some(Duration::from_secs(10)))
|
||||||
.timeout_connect(Some(Duration::from_secs(30)))
|
.timeout_connect(Some(Duration::from_secs(30)))
|
||||||
.timeout_global(Some(Duration::from_mins(15)))
|
.timeout_global(Some(Duration::from_mins(15)))
|
||||||
.build())
|
.build(),
|
||||||
);
|
));
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let domain = download_tasks_receiver.recv().await.unwrap();
|
let domain = download_tasks_receiver.recv().await.unwrap();
|
||||||
|
|
Loading…
Add table
Reference in a new issue