From 6e545d0058807c3182030fbad8a090d02daf8566 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 4 Nov 2020 10:42:22 +0100 Subject: [PATCH] config: allow to configure who receives job notify emails --- src/api2/config/datastore.rs | 27 +++++++++++++++++++++++++++ src/api2/types/mod.rs | 13 +++++++++++++ src/config/datastore.rs | 14 ++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/src/api2/config/datastore.rs b/src/api2/config/datastore.rs index 1da82593..8848c1e3 100644 --- a/src/api2/config/datastore.rs +++ b/src/api2/config/datastore.rs @@ -68,6 +68,14 @@ pub fn list_datastores( optional: true, schema: SINGLE_LINE_COMMENT_SCHEMA, }, + "notify-user": { + optional: true, + type: Userid, + }, + "notify": { + optional: true, + type: Notify, + }, "gc-schedule": { optional: true, schema: GC_SCHEDULE_SCHEMA, @@ -187,6 +195,10 @@ pub enum DeletableProperty { keep_monthly, /// Delete the keep-yearly property keep_yearly, + /// Delete the notify-user property + notify_user, + /// Delete the notify property + notify, } #[api( @@ -200,6 +212,14 @@ pub enum DeletableProperty { optional: true, schema: SINGLE_LINE_COMMENT_SCHEMA, }, + "notify-user": { + optional: true, + type: Userid, + }, + "notify": { + optional: true, + type: Notify, + }, "gc-schedule": { optional: true, schema: GC_SCHEDULE_SCHEMA, @@ -262,6 +282,8 @@ pub fn update_datastore( keep_weekly: Option, keep_monthly: Option, keep_yearly: Option, + notify: Option, + notify_user: Option, delete: Option>, digest: Option, ) -> Result<(), Error> { @@ -290,6 +312,8 @@ pub fn update_datastore( DeletableProperty::keep_weekly => { data.keep_weekly = None; }, DeletableProperty::keep_monthly => { data.keep_monthly = None; }, DeletableProperty::keep_yearly => { data.keep_yearly = None; }, + DeletableProperty::notify => { data.notify = None; }, + DeletableProperty::notify_user => { data.notify_user = None; }, } } } @@ -322,6 +346,9 @@ pub fn update_datastore( if keep_monthly.is_some() { data.keep_monthly = keep_monthly; } if keep_yearly.is_some() { data.keep_yearly = keep_yearly; } + if notify.is_some() { data.notify = notify; } + if notify_user.is_some() { data.notify_user = notify_user; } + config.set_data(&name, "datastore", &data)?; datastore::save_config(&config)?; diff --git a/src/api2/types/mod.rs b/src/api2/types/mod.rs index 16c299bc..7ee89f57 100644 --- a/src/api2/types/mod.rs +++ b/src/api2/types/mod.rs @@ -1154,3 +1154,16 @@ pub struct APTUpdateInfo { /// URL under which the package's changelog can be retrieved pub change_log_url: String, } + +#[api()] +#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +/// When do we send notifications +pub enum Notify { + /// Never send notification + Never, + /// Send notifications for failed and sucessful jobs + Always, + /// Send notifications for failed jobs only + Error, +} diff --git a/src/config/datastore.rs b/src/config/datastore.rs index ffc81276..7e38a783 100644 --- a/src/config/datastore.rs +++ b/src/config/datastore.rs @@ -32,6 +32,14 @@ pub const DIR_NAME_SCHEMA: Schema = StringSchema::new("Directory name").schema() path: { schema: DIR_NAME_SCHEMA, }, + "notify-user": { + optional: true, + type: Userid, + }, + "notify": { + optional: true, + type: Notify, + }, comment: { optional: true, schema: SINGLE_LINE_COMMENT_SCHEMA, @@ -101,6 +109,12 @@ pub struct DataStoreConfig { /// If enabled, all backups will be verified right after completion. #[serde(skip_serializing_if="Option::is_none")] pub verify_new: Option, + /// Send job email notification to this user + #[serde(skip_serializing_if="Option::is_none")] + pub notify_user: Option, + /// Send notification only for job errors + #[serde(skip_serializing_if="Option::is_none")] + pub notify: Option, } fn init() -> SectionConfig {