From 71ab4c5434d6fd47ab6b4f5a940e561ca24c296f Mon Sep 17 00:00:00 2001
From: William <3502082+wtip@users.noreply.github.com>
Date: Fri, 25 Oct 2019 09:52:17 -0400
Subject: [PATCH] added script for ipmitool chassis status metrics
---
ipmitool_chassis.sh | 61 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
create mode 100644 ipmitool_chassis.sh
diff --git a/ipmitool_chassis.sh b/ipmitool_chassis.sh
new file mode 100644
index 0000000..aa8ee58
--- /dev/null
+++ b/ipmitool_chassis.sh
@@ -0,0 +1,61 @@
+#!/usr/bin/awk -nf
+
+#
+# Converts output of `ipmitool chassis status` to prometheus format.
+#
+# With GNU awk:
+# ipmitool chassis status | ./ipmitool_chassis.sh > ipmitool_chassis.prom
+#
+# With BSD awk:
+# ipmitool chassis status | awk -f ./ipmitool_chassis.sh > ipmitool_chassis.prom
+#
+
+function export(values, name) {
+ if (values["metric_count"] < 1) {
+ return
+ }
+ delete values["metric_count"]
+
+ printf("# HELP %s%s %s sensor reading from ipmitool\n", namespace, name, help[name]);
+ printf("# TYPE %s%s gauge\n", namespace, name);
+ for (sensor in values) {
+ printf("%s%s{sensor=\"%s\"} %f\n", namespace, name, sensor, values[sensor]);
+ }
+}
+
+# Fields are colon separated, with space padding.
+BEGIN {
+ FS = "[ ]*[:][ ]*";
+ namespace = "node_ipmi_chassis_";
+
+ # Friendly description of the type of sensor for HELP.
+ help["fault"] = "Chassis Fault";
+
+ fault["metric_count"] = 0;
+}
+
+# Not a valid line.
+{
+ if (NF < 2) {
+ next
+ }
+}
+
+# $2 is value field.
+$2 ~ /na/ {
+ next
+}
+
+# $1 is type field.
+$1 ~ /Fault/ {
+ if ($2 == "true") {
+ fault[$1] = 1
+ } else {
+ fault[$1] = 0
+ }
+ fault["metric_count"]++;
+}
+
+END {
+ export(fault, "fault");
+}