diff --git a/experimental/examples/new-disk.json b/experimental/examples/new-disk.json index 293f33266..6aae4bd4b 100644 --- a/experimental/examples/new-disk.json +++ b/experimental/examples/new-disk.json @@ -22,7 +22,8 @@ "value": "100 * {disk.used} / {disk.size}", "uom": "%", "min": 0, - "max": 100 + "max": 100, + "output": "{prefix}: {metrics.value}% used" }, { "prefix": "{disk.label}", @@ -42,6 +43,16 @@ "max": 100 } ] + }, + "output": { + "ok": "Disk usage OK: {aggregations.avg.disk.usage.percent}% used", + "detail_ok": false, + "warning": "Disk usage WARNING:", + "detail_warning": true, + "critical": "Disk usage CRITICAL:", + "detail_critical": true, + "instance_separator": " - ", + "metric_separator": ", " } } diff --git a/experimental/examples/new-disk.json.example b/experimental/examples/new-disk.json.example index 2c30de6c1..92cbd6f88 100644 --- a/experimental/examples/new-disk.json.example +++ b/experimental/examples/new-disk.json.example @@ -4,7 +4,7 @@ { "name": "disk", "oid": "1.3.6.1.2.1.25.2.3.1", - "query": "Walk", // par défaut walk + "query": "Walk", "labels": { ".3": "label", ".4": "allocationUnits", @@ -17,30 +17,42 @@ "compute": { "metrics": [ { - "prefix": "{disk.label}", // par défaut "{idx}" - "name": "disk.usage.percent", // le nom final est `prefix`#`name` + "prefix": "{disk.label}", + "name": "disk.usage.percent", "value": "100 * {disk.used} / {disk.size}", - "uom": "%", // optional - "min": 0, // optional - "max": 100, // optional + "uom": "%", + "min": 0, + "max": 100, + "output": "{prefix}: {metrics.value}% used" // optional : displayed if output. Default value: "{metrics.prefix}: {value}{metrics.uom}" }, { + "prefix": "{disk.label}", "name": "disk.usage.bytes", "value": "{disk.used} * {disk.allocationUnits}", - "uom": "B", // optional - "min": 0, // optional - "max_expr": "{disk.size} * {disk.allocationUnits}" // optional + "uom": "B", + "min": 0, + "max_expr": "{disk.size} * {disk.allocationUnits}" } ], "aggregations": [ { "name": "avg.disk.usage.percent", - "value": "Average({metrics.disk.usage.percent})", // si agregation, pas de prefix - "uom": "%", // optional - "min": 0, // optional - "max": 100 // optional + "value": "Average({metrics.disk.usage.percent})", + "uom": "%", + "min": 0, + "max": 100 } ] + }, + "output": { + "ok": "Disk usage OK: {aggregations.avg.disk.usage.percent}% used", // optional: default value: "Everything is OK" + "detail_ok": False, // optional: default value: False, if True, metrics are concatenated to the output + "warning": "Disk usage WARNING:", // optional: default value: "WARNING:" + "detail_warning": True, // optional: default value: True + "critical": "Disk usage CRITICAL:", // optional: default value: "CRITICAL:" + "detail_critical": True, // optional: default value: True + "instance_separator": " - ", // optional: default value: " - " + "metric_separator": ", ", // optional: default value: ", " } } diff --git a/experimental/src/generic/mod.rs b/experimental/src/generic/mod.rs index 974bc8885..98fde6455 100644 --- a/experimental/src/generic/mod.rs +++ b/experimental/src/generic/mod.rs @@ -80,10 +80,55 @@ pub struct Collect { snmp: Vec, } +#[derive(Deserialize, Debug)] +pub struct Output { + #[serde(default = "default_ok")] + ok: String, + #[serde(default = "default_detail_ok")] + detail_ok: bool, + #[serde(default = "default_warning")] + warning: String, + #[serde(default = "default_detail_warning")] + detail_warning: bool, + #[serde(default = "default_critical")] + critical: String, + #[serde(default = "default_detail_critical")] + detail_critical: bool, + #[serde(default = "default_instance_separator")] + instance_separator: String, + #[serde(default = "default_metric_separator")] + metric_separator: String, +} +fn default_ok() -> String { + "Everything is OK".to_string() +} +fn default_detail_ok() -> bool { + false +} +fn default_warning() -> String { + "WARNING: ".to_string() +} +fn default_detail_warning() -> bool { + true +} +fn default_critical() -> String { + "CRITICAL: ".to_string() +} +fn default_detail_critical() -> bool { + true +} +fn default_instance_separator() -> String { + " - ".to_string() +} +fn default_metric_separator() -> String { + ", ".to_string() +} + #[derive(Deserialize, Debug)] pub struct Command { collect: Collect, compute: Compute, + output: Output, } #[derive(Debug)] @@ -252,7 +297,8 @@ impl Command { panic!("A label must be a string"); } }; - let current_status = compute_status(*item, &metric.warning, &metric.critical)?; + let current_status = + compute_status(*item, &metric.warning, &metric.critical)?; status = worst(status, current_status); let w = match metric.warning { Some(ref w) => Some(w.as_str()), @@ -361,7 +407,8 @@ impl Command { res } }; - let current_status = compute_status(item, &metric.warning, &metric.critical)?; + let current_status = + compute_status(item, &metric.warning, &metric.critical)?; status = worst(status, current_status); let w = match metric.warning { Some(ref w) => Some(w.as_str()),