aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md6
-rw-r--r--ezau-sample.toml6
-rw-r--r--src/config.rs3
-rw-r--r--src/main.rs21
4 files changed, 35 insertions, 1 deletions
diff --git a/README.md b/README.md
index 08dff28..c257000 100644
--- a/README.md
+++ b/README.md
@@ -50,6 +50,12 @@ upload = false
# (optional)
upload_unknown = false
+# How often uploading a log should be retried when it failed.
+# Note that this does not include the first try, so a value of 0 means "try it
+# once".
+# (optional)
+retries = 0
+
# Discord messaging section.
# If this section is missing, ezau will not do Discord notifications for log uploads.
# Mandatory keys in this section are only mandatory if the section is present, as the whole Discord functionality is optional.
diff --git a/ezau-sample.toml b/ezau-sample.toml
index a18d6ad..77d96a8 100644
--- a/ezau-sample.toml
+++ b/ezau-sample.toml
@@ -8,6 +8,12 @@ upload = false
# (optional)
upload_unknown = false
+# How often uploading a log should be retried when it failed.
+# Note that this does not include the first try, so a value of 0 means "try it
+# once".
+# (optional)
+retries = 0
+
# Discord messaging section.
# If this section is missing, ezau will not do Discord notifications for log uploads.
# Mandatory keys in this section are only mandatory if the section is present, as the whole Discord functionality is optional.
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 {