[pbs-devel] [PATCH proxmox-backup v3 21/42] server: notifications: send prune notifications via notification system
Lukas Wagner
l.wagner at proxmox.com
Mon Apr 22 09:50:09 CEST 2024
If the `notification-mode` parameter is set to `legacy-sendmail`, then
we still use the new infrastructure, but don't consider the
notification config and use a hard-coded sendmail endpoint directly.
Signed-off-by: Lukas Wagner <l.wagner at proxmox.com>
Tested-by: Gabriel Goller <g.goller at proxmox.com>
Reviewed-by: Gabriel Goller <g.goller at proxmox.com>
---
debian/proxmox-backup-server.install | 4 ++
src/server/notifications.rs | 77 ++++++++-------------
templates/Makefile | 4 ++
templates/default/prune-err-body.txt.hbs | 10 +++
templates/default/prune-err-subject.txt.hbs | 1 +
templates/default/prune-ok-body.txt.hbs | 10 +++
templates/default/prune-ok-subject.txt.hbs | 1 +
7 files changed, 58 insertions(+), 49 deletions(-)
create mode 100644 templates/default/prune-err-body.txt.hbs
create mode 100644 templates/default/prune-err-subject.txt.hbs
create mode 100644 templates/default/prune-ok-body.txt.hbs
create mode 100644 templates/default/prune-ok-subject.txt.hbs
diff --git a/debian/proxmox-backup-server.install b/debian/proxmox-backup-server.install
index 197c070f..7b8183dd 100644
--- a/debian/proxmox-backup-server.install
+++ b/debian/proxmox-backup-server.install
@@ -45,6 +45,10 @@ usr/share/proxmox-backup/templates/default/gc-err-body.txt.hbs
usr/share/proxmox-backup/templates/default/gc-ok-body.txt.hbs
usr/share/proxmox-backup/templates/default/gc-err-subject.txt.hbs
usr/share/proxmox-backup/templates/default/gc-ok-subject.txt.hbs
+usr/share/proxmox-backup/templates/default/prune-err-body.txt.hbs
+usr/share/proxmox-backup/templates/default/prune-ok-body.txt.hbs
+usr/share/proxmox-backup/templates/default/prune-err-subject.txt.hbs
+usr/share/proxmox-backup/templates/default/prune-ok-subject.txt.hbs
usr/share/proxmox-backup/templates/default/test-body.txt.hbs
usr/share/proxmox-backup/templates/default/test-body.html.hbs
usr/share/proxmox-backup/templates/default/test-subject.txt.hbs
diff --git a/src/server/notifications.rs b/src/server/notifications.rs
index a9b79cc8..ea092c90 100644
--- a/src/server/notifications.rs
+++ b/src/server/notifications.rs
@@ -87,34 +87,6 @@ Local Source Store: {{job.remote-store}}
Synchronization failed: {{error}}
-Please visit the web interface for further details:
-
-<https://{{fqdn}}:{{port}}/#pbsServerAdministration:tasks>
-
-"###;
-
-const PRUNE_OK_TEMPLATE: &str = r###"
-
-Job ID: {{jobname}}
-Datastore: {{store}}
-
-Pruning successful.
-
-
-Please visit the web interface for further details:
-
-<https://{{fqdn}}:{{port}}/#DataStore-{{store}}>
-
-"###;
-
-const PRUNE_ERR_TEMPLATE: &str = r###"
-
-Job ID: {{jobname}}
-Datastore: {{store}}
-
-Pruning failed: {{error}}
-
-
Please visit the web interface for further details:
<https://{{fqdn}}:{{port}}/#pbsServerAdministration:tasks>
@@ -223,9 +195,6 @@ lazy_static::lazy_static! {
hb.register_template_string("sync_ok_template", SYNC_OK_TEMPLATE)?;
hb.register_template_string("sync_err_template", SYNC_ERR_TEMPLATE)?;
- hb.register_template_string("prune_ok_template", PRUNE_OK_TEMPLATE)?;
- hb.register_template_string("prune_err_template", PRUNE_ERR_TEMPLATE)?;
-
hb.register_template_string("tape_backup_ok_template", TAPE_BACKUP_OK_TEMPLATE)?;
hb.register_template_string("tape_backup_err_template", TAPE_BACKUP_ERR_TEMPLATE)?;
@@ -501,16 +470,6 @@ pub fn send_prune_status(
jobname: &str,
result: &Result<(), Error>,
) -> Result<(), Error> {
- let (email, notify) = match lookup_datastore_notify_settings(store) {
- (Some(email), notify, _) => (email, notify),
- (None, _, _) => return Ok(()),
- };
-
- let notify_prune = notify.prune.unwrap_or(Notify::Error);
- if notify_prune == Notify::Never || (result.is_ok() && notify_prune == Notify::Error) {
- return Ok(());
- }
-
let (fqdn, port) = get_server_url();
let mut data = json!({
"jobname": jobname,
@@ -519,20 +478,40 @@ pub fn send_prune_status(
"port": port,
});
- let text = match result {
- Ok(()) => HANDLEBARS.render("prune_ok_template", &data)?,
+ let (template, severity) = match result {
+ Ok(()) => ("prune-ok", Severity::Info),
Err(err) => {
data["error"] = err.to_string().into();
- HANDLEBARS.render("prune_err_template", &data)?
+ ("prune-err", Severity::Error)
}
};
- let subject = match result {
- Ok(()) => format!("Pruning datastore '{store}' successful"),
- Err(_) => format!("Pruning datastore '{store}' failed"),
- };
+ let metadata = HashMap::from([
+ ("job-id".into(), jobname.to_string()),
+ ("datastore".into(), store.into()),
+ ("hostname".into(), proxmox_sys::nodename().into()),
+ ("type".into(), "prune".into()),
+ ]);
- send_job_status_mail(&email, &subject, &text)?;
+ let notification = Notification::from_template(severity, template, data, metadata);
+
+ let (email, notify, mode) = lookup_datastore_notify_settings(store);
+ match mode {
+ NotificationMode::LegacySendmail => {
+ let notify = notify.prune.unwrap_or(Notify::Error);
+
+ if notify == Notify::Never || (result.is_ok() && notify == Notify::Error) {
+ return Ok(());
+ }
+
+ if let Some(email) = email {
+ send_sendmail_legacy_notification(notification, &email)?;
+ }
+ }
+ NotificationMode::NotificationSystem => {
+ send_notification(notification)?;
+ }
+ }
Ok(())
}
diff --git a/templates/Makefile b/templates/Makefile
index 7d4cb19f..1f556aba 100644
--- a/templates/Makefile
+++ b/templates/Makefile
@@ -5,6 +5,10 @@ NOTIFICATION_TEMPLATES= \
default/gc-ok-body.txt.hbs \
default/gc-err-subject.txt.hbs \
default/gc-ok-subject.txt.hbs \
+ default/prune-err-body.txt.hbs \
+ default/prune-ok-body.txt.hbs \
+ default/prune-err-subject.txt.hbs \
+ default/prune-ok-subject.txt.hbs \
default/test-body.txt.hbs \
default/test-body.html.hbs \
default/test-subject.txt.hbs \
diff --git a/templates/default/prune-err-body.txt.hbs b/templates/default/prune-err-body.txt.hbs
new file mode 100644
index 00000000..0973c3d9
--- /dev/null
+++ b/templates/default/prune-err-body.txt.hbs
@@ -0,0 +1,10 @@
+
+Job ID: {{jobname}}
+Datastore: {{store}}
+
+Pruning failed: {{error}}
+
+
+Please visit the web interface for further details:
+
+<https://{{fqdn}}:{{port}}/#pbsServerAdministration:tasks>
diff --git a/templates/default/prune-err-subject.txt.hbs b/templates/default/prune-err-subject.txt.hbs
new file mode 100644
index 00000000..836ae722
--- /dev/null
+++ b/templates/default/prune-err-subject.txt.hbs
@@ -0,0 +1 @@
+Pruning datastore '{{ store }}' failed
diff --git a/templates/default/prune-ok-body.txt.hbs b/templates/default/prune-ok-body.txt.hbs
new file mode 100644
index 00000000..b7e449e3
--- /dev/null
+++ b/templates/default/prune-ok-body.txt.hbs
@@ -0,0 +1,10 @@
+
+Job ID: {{jobname}}
+Datastore: {{store}}
+
+Pruning successful.
+
+
+Please visit the web interface for further details:
+
+<https://{{fqdn}}:{{port}}/#DataStore-{{store}}>
diff --git a/templates/default/prune-ok-subject.txt.hbs b/templates/default/prune-ok-subject.txt.hbs
new file mode 100644
index 00000000..3227a062
--- /dev/null
+++ b/templates/default/prune-ok-subject.txt.hbs
@@ -0,0 +1 @@
+Pruning datastore '{{ store }}' successful
--
2.39.2
More information about the pbs-devel
mailing list