diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/config.rs | 3 | ||||
-rw-r--r-- | src/main.rs | 21 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/config.rs b/src/config.rs index e4203de..6b9a89d 100644 --- a/src/config.rs +++ b/src/config.rs @@ -11,6 +11,9 @@ pub struct Config { /// Flag indicating whether logs with an unknown boss should be uploaded. #[serde(default)] pub upload_unknown: bool, + /// How often the upload to dps.report should be retried. + #[serde(default)] + pub retries: u32, /// Option Discord information for bot postings. pub discord: Option<Discord>, } diff --git a/src/main.rs b/src/main.rs index f2fa2ec..ddf54d8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ use std::{ io::{BufReader, BufWriter, Read, Write}, path::{Path, PathBuf}, sync::mpsc::channel, + thread, time::Duration, }; @@ -23,6 +24,7 @@ mod discord; const DPS_REPORT_API: &str = "https://dps.report/uploadContent"; const WATCH_DELAY_SECONDS: u64 = 2; +const RETRY_DELAY: Duration = Duration::from_secs(5); #[derive(Clap, Debug, Clone, PartialEq, Eq, Hash)] #[clap(version = "0.1")] @@ -161,7 +163,24 @@ fn handle_file(config: &Config, filename: &Path) -> Result<()> { return Ok(()); } - let permalink = upload_log(filename)?; + let mut try_counter = 0; + let permalink = loop { + let result = upload_log(filename); + if let Ok(link) = result { + break link; + } + warn!( + "Upload try {} failed, retrying {} more times. Reason: {}", + try_counter + 1, + config.retries - try_counter, + result.as_ref().unwrap_err(), + ); + if try_counter == config.retries { + return Err(result.unwrap_err()); + } + try_counter += 1; + thread::sleep(RETRY_DELAY); + }; info!("Uploaded log, available at {}", permalink); if let Some(d) = &config.discord { |