proxy: use new datastore notify settings

This commit is contained in:
Dietmar Maurer 2020-11-04 11:27:57 +01:00
parent 6e545d0058
commit f47c1d3a2f
4 changed files with 55 additions and 8 deletions

View File

@ -75,7 +75,7 @@ pub fn do_sync_job(
let job_id = job.jobname().to_string(); let job_id = job.jobname().to_string();
let worker_type = job.jobtype().to_string(); let worker_type = job.jobtype().to_string();
let email = crate::server::lookup_user_email(auth_id.user()); let (email, notify) = crate::server::lookup_datastore_notify_settings(&sync_job.store);
let upid_str = WorkerTask::spawn( let upid_str = WorkerTask::spawn(
&worker_type, &worker_type,
@ -126,7 +126,7 @@ pub fn do_sync_job(
} }
if let Some(email) = email { if let Some(email) = email {
if let Err(err) = crate::server::send_sync_status(&email, &sync_job2, &result) { if let Err(err) = crate::server::send_sync_status(&email, notify, &sync_job2, &result) {
eprintln!("send sync notification failed: {}", err); eprintln!("send sync notification failed: {}", err);
} }
} }

View File

@ -6,12 +6,14 @@ use handlebars::{Handlebars, Helper, Context, RenderError, RenderContext, Output
use proxmox::tools::email::sendmail; use proxmox::tools::email::sendmail;
use crate::{ use crate::{
config::datastore::DataStoreConfig,
config::verify::VerificationJobConfig, config::verify::VerificationJobConfig,
config::sync::SyncJobConfig, config::sync::SyncJobConfig,
api2::types::{ api2::types::{
APTUpdateInfo, APTUpdateInfo,
GarbageCollectionStatus, GarbageCollectionStatus,
Userid, Userid,
Notify,
}, },
tools::format::HumanByte, tools::format::HumanByte,
}; };
@ -188,11 +190,16 @@ fn send_job_status_mail(
pub fn send_gc_status( pub fn send_gc_status(
email: &str, email: &str,
notify: Notify,
datastore: &str, datastore: &str,
status: &GarbageCollectionStatus, status: &GarbageCollectionStatus,
result: &Result<(), Error>, result: &Result<(), Error>,
) -> Result<(), Error> { ) -> Result<(), Error> {
if notify == Notify::Never || (result.is_ok() && notify == Notify::Error) {
return Ok(());
}
let (fqdn, port) = get_server_url(); let (fqdn, port) = get_server_url();
let mut data = json!({ let mut data = json!({
"datastore": datastore, "datastore": datastore,
@ -237,10 +244,15 @@ pub fn send_gc_status(
pub fn send_verify_status( pub fn send_verify_status(
email: &str, email: &str,
notify: Notify,
job: VerificationJobConfig, job: VerificationJobConfig,
result: &Result<Vec<String>, Error>, result: &Result<Vec<String>, Error>,
) -> Result<(), Error> { ) -> Result<(), Error> {
if notify == Notify::Never || (result.is_ok() && notify == Notify::Error) {
return Ok(());
}
let (fqdn, port) = get_server_url(); let (fqdn, port) = get_server_url();
let mut data = json!({ let mut data = json!({
"job": job, "job": job,
@ -280,10 +292,15 @@ pub fn send_verify_status(
pub fn send_sync_status( pub fn send_sync_status(
email: &str, email: &str,
notify: Notify,
job: &SyncJobConfig, job: &SyncJobConfig,
result: &Result<(), Error>, result: &Result<(), Error>,
) -> Result<(), Error> { ) -> Result<(), Error> {
if notify == Notify::Never || (result.is_ok() && notify == Notify::Error) {
return Ok(());
}
let (fqdn, port) = get_server_url(); let (fqdn, port) = get_server_url();
let mut data = json!({ let mut data = json!({
"job": job, "job": job,
@ -362,7 +379,7 @@ pub fn send_updates_available(
/// Lookup users email address /// Lookup users email address
/// ///
/// For "backup@pam", this returns the address from "root@pam". /// For "backup@pam", this returns the address from "root@pam".
pub fn lookup_user_email(userid: &Userid) -> Option<String> { fn lookup_user_email(userid: &Userid) -> Option<String> {
use crate::config::user::{self, User}; use crate::config::user::{self, User};
@ -379,6 +396,36 @@ pub fn lookup_user_email(userid: &Userid) -> Option<String> {
None None
} }
/// Lookup Datastore notify settings
pub fn lookup_datastore_notify_settings(
store: &str,
) -> (Option<String>, Notify) {
let mut notify = Notify::Always;
let mut email = None;
let (config, _digest) = match crate::config::datastore::config() {
Ok(result) => result,
Err(_) => return (email, notify),
};
let config: DataStoreConfig = match config.lookup("datastore", store) {
Ok(result) => result,
Err(_) => return (email, notify),
};
email = match config.notify_user {
Some(ref userid) => lookup_user_email(userid),
None => lookup_user_email(Userid::backup_userid()),
};
if let Some(value) = config.notify {
notify = value;
}
(email, notify)
}
// Handlerbar helper functions // Handlerbar helper functions
fn handlebars_humam_bytes_helper( fn handlebars_humam_bytes_helper(

View File

@ -17,10 +17,10 @@ pub fn do_garbage_collection_job(
to_stdout: bool, to_stdout: bool,
) -> Result<String, Error> { ) -> Result<String, Error> {
let email = crate::server::lookup_user_email(auth_id.user());
let store = datastore.name().to_string(); let store = datastore.name().to_string();
let (email, notify) = crate::server::lookup_datastore_notify_settings(&store);
let worker_type = job.jobtype().to_string(); let worker_type = job.jobtype().to_string();
let upid_str = WorkerTask::new_thread( let upid_str = WorkerTask::new_thread(
&worker_type, &worker_type,
@ -50,7 +50,7 @@ pub fn do_garbage_collection_job(
if let Some(email) = email { if let Some(email) = email {
let gc_status = datastore.last_gc_status(); let gc_status = datastore.last_gc_status();
if let Err(err) = crate::server::send_gc_status(&email, &store, &gc_status, &result) { if let Err(err) = crate::server::send_gc_status(&email, notify, &store, &gc_status, &result) {
eprintln!("send gc notification failed: {}", err); eprintln!("send gc notification failed: {}", err);
} }
} }

View File

@ -48,7 +48,7 @@ pub fn do_verification_job(
} }
}; };
let email = crate::server::lookup_user_email(auth_id.user()); let (email, notify) = crate::server::lookup_datastore_notify_settings(&verification_job.store);
let job_id = job.jobname().to_string(); let job_id = job.jobname().to_string();
let worker_type = job.jobtype().to_string(); let worker_type = job.jobtype().to_string();
@ -84,7 +84,7 @@ pub fn do_verification_job(
} }
if let Some(email) = email { if let Some(email) = email {
if let Err(err) = crate::server::send_verify_status(&email, verification_job, &result) { if let Err(err) = crate::server::send_verify_status(&email, notify, verification_job, &result) {
eprintln!("send verify notification failed: {}", err); eprintln!("send verify notification failed: {}", err);
} }
} }