]> git.proxmox.com Git - proxmox.git/commitdiff
notify: renderer: add relative-percentage helper from PBS
authorLukas Wagner <l.wagner@proxmox.com>
Fri, 19 Apr 2024 14:17:15 +0000 (16:17 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 23 Apr 2024 21:06:52 +0000 (23:06 +0200)
Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
Reviewed-by: Fiona Ebner <f.ebner@proxmox.com>
proxmox-notify/src/renderer/mod.rs

index a51ece64805fe34465a10d100a3445ccb6ddd670..ddb241deca67becb0ae7439e9bb470e15caaa916 100644 (file)
@@ -73,6 +73,30 @@ fn value_to_timestamp(val: &Value) -> Option<String> {
     proxmox_time::strftime_local("%F %H:%M:%S", timestamp).ok()
 }
 
+fn handlebars_relative_percentage_helper(
+    h: &Helper,
+    _: &Handlebars,
+    _: &Context,
+    _rc: &mut RenderContext,
+    out: &mut dyn Output,
+) -> HelperResult {
+    let param0 = h
+        .param(0)
+        .and_then(|v| v.value().as_f64())
+        .ok_or_else(|| HandlebarsRenderError::new("relative-percentage: param0 not found"))?;
+    let param1 = h
+        .param(1)
+        .and_then(|v| v.value().as_f64())
+        .ok_or_else(|| HandlebarsRenderError::new("relative-percentage: param1 not found"))?;
+
+    if param1 == 0.0 {
+        out.write("-")?;
+    } else {
+        out.write(&format!("{:.2}%", (param0 * 100.0) / param1))?;
+    }
+    Ok(())
+}
+
 /// Available render functions for `serde_json::Values``
 ///
 /// May be used as a handlebars helper, e.g.
@@ -237,6 +261,11 @@ fn render_template_impl(
 
     ValueRenderFunction::register_helpers(&mut handlebars);
 
+    handlebars.register_helper(
+        "relative-percentage",
+        Box::new(handlebars_relative_percentage_helper),
+    );
+
     let rendered_template = handlebars
         .render_template(template, data)
         .map_err(|err| Error::RenderError(err.into()))?;