#!/bin/sh set -eu mountpoint="/" warning=20 critical=10 error() { jq -cn --arg message "$1" '{ text: "N/A", percentage: 0, tooltip: $message, class: "critical" }' exit 0 } line=$(df -hP -l "$mountpoint" 2>/dev/null | tail -n 1) || error "Unable to read filesystem statistics" # df -P guarantees a single line per filesystem. set -- $line [ "$#" -ge 6 ] || error "Unable to parse filesystem statistics" filesystem=$1 size=$2 used=$3 available=$4 use=${5%\%} mounted=$6 case "$use" in ''|*[!0-9]*) error "Invalid filesystem usage percentage: $use%" ;; esac free=$((100 - use)) if [ "$free" -le "$critical" ]; then class="critical" elif [ "$free" -le "$warning" ]; then class="warning" else class="" fi jq -cn \ --arg text "${use}%" \ --argjson percentage "$use" \ --arg filesystem "$filesystem" \ --arg size "$size" \ --arg used "$used" \ --arg available "$available" \ --arg mounted "$mounted" \ --arg class "$class" \ '{ text: $text, percentage: $percentage, tooltip: ( "Filesystem: " + $filesystem + "\rSize: " + $size + "\rUsed: " + $used + "\rAvail: " + $available + "\rUse%: " + $text + "\rMounted on: " + $mounted ), class: $class }'