diff --git a/scripts/disk-health-check.sh b/scripts/disk-health-check.sh index 9ff772e..cc8ec2b 100755 --- a/scripts/disk-health-check.sh +++ b/scripts/disk-health-check.sh @@ -49,6 +49,28 @@ HTML_NVME="" HTML_ZFS="" HTML_SPACE="" +# Map a usage percentage to a hex color: green at 0%, amber at 50%, +# red at 100%, linearly interpolated per RGB channel. Endpoints are the +# same dark shades used by state_html so they stay readable on white. +# Done in bash because email clients can't compute colors in CSS. +usage_color() { + local p=$1 r g b + [ "$p" -ge 0 ] 2>/dev/null || { printf '#222222'; return; } + [ "$p" -gt 100 ] && p=100 + if [ "$p" -le 50 ]; then + # 1a7f37 (green) -> 9a6700 (amber) + r=$(( 26 + (154 - 26) * p / 50 )) + g=$(( 127 + (103 - 127) * p / 50 )) + b=$(( 55 + (0 - 55) * p / 50 )) + else + # 9a6700 (amber) -> cf222e (red) + r=$(( 154 + (207 - 154) * (p - 50) / 50 )) + g=$(( 103 + (34 - 103) * (p - 50) / 50 )) + b=$(( 0 + (46 - 0) * (p - 50) / 50 )) + fi + printf '#%02x%02x%02x' "$r" "$g" "$b" +} + # Green for healthy, red for anything else. UNKNOWN is amber because it # means smartctl couldn't read the device, not that the device failed. state_html() { @@ -190,11 +212,12 @@ while IFS= read -r line; do used=$(echo "$line" | awk '{print $3}') avail=$(echo "$line" | awk '{print $4}') STATUS+=" $mount: ${usage}% (${used}/${size}, ${avail} free)\n" - usage_cell="${usage}%" + weight="" if [ "$usage" -gt "$SPACE_THRESHOLD" ] 2>/dev/null; then PROBLEMS+="[SPACE] $mount is ${usage}% full\n" - usage_cell="${usage}%" + weight=";font-weight:bold" fi + usage_cell="${usage}%" HTML_SPACE+="