Lukas Wagner df4858e989 notify: factor out notification content into its own type
This will be useful later for system mail forwarding, where
the content of the mail should be forwarded unchanged.

This moves notification properties into this new type and calls them
'data'. They will exclusively used for template rendering.
`Notification` will receive a separate field for metadata, which
will be useful for notification filtering. This decouples
template rendering and filtering, which enables us to be very precise
about which metadata fields we allow to be used in filters.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
2023-11-17 08:31:36 +01:00

64 lines
1.6 KiB
Rust

use proxmox_notify::renderer::{render_template, TemplateRenderer};
use proxmox_notify::Error;
use serde_json::json;
const TEMPLATE: &str = r#"
{{ heading-1 "Backup Report"}}
A backup job on host {{host}} was run.
{{ heading-2 "Guests"}}
{{ table table }}
The total size of all backups is {{human-bytes total-size}}.
The backup job took {{duration total-time}}.
{{ heading-2 "Logs"}}
{{ verbatim-monospaced logs}}
{{ heading-2 "Objects"}}
{{ object table }}
"#;
fn main() -> Result<(), Error> {
let properties = json!({
"host": "pali",
"logs": "100: starting backup\n100: backup failed",
"total-size": 1024 * 1024 + 2048 * 1024,
"total-time": 100,
"table": {
"schema": {
"columns": [
{
"label": "VMID",
"id": "vmid"
},
{
"label": "Size",
"id": "size",
"renderer": "human-bytes"
}
],
},
"data" : [
{
"vmid": 1001,
"size": "1048576"
},
{
"vmid": 1002,
"size": 2048 * 1024,
}
]
}
});
let output = render_template(TemplateRenderer::Html, TEMPLATE, &properties)?;
println!("{output}");
let output = render_template(TemplateRenderer::Plaintext, TEMPLATE, &properties)?;
println!("{output}");
Ok(())
}