1. #! /bin/sh
  2.  
  3. STATE_OK=0
  4. STATE_WARNING=1
  5. STATE_CRITICAL=2
  6. STATE_UNKNOWN=3
  7. STATE_DEPENDENT=4
  8. mysqlpath='/usr/bin'
  9. warn=2048
  10. crit=1024
  11. null="NULL"
  12. usage1="Usage: $0 -H <host> -u user -p password -d dbname [-w <warn>] [-c <crit>]"
  13. usage2="<warn> is kB to warn at. Default is 2048."
  14. usage3="<crit> is kB to be critical at. Default is 1024."
  15.  
  16. exitstatus=$STATE_WARNING #default
  17. while test -n "$1"; do
  18. case "$1" in
  19. -c)
  20. crit=$2
  21. shift
  22. ;;
  23. -d)
  24. db=$2
  25. shift
  26. ;;
  27. -w)
  28. warn=$2
  29. shift
  30. ;;
  31. -u)
  32. user=$2
  33. shift
  34. ;;
  35. -p)
  36. pass=$2
  37. shift
  38. ;;
  39. -h)
  40. echo $usage1;
  41. echo
  42. echo $usage2;
  43. echo $usage3;
  44. exit $STATE_UNKNOWN
  45. ;;
  46. -H)
  47. host=$2
  48. shift
  49. ;;
  50. *)
  51. echo "Unknown argument: $1"
  52. echo $usage1;
  53. echo
  54. echo $usage2;
  55. echo $usage3;
  56. exit $STATE_UNKNOWN
  57. ;;
  58. esac
  59. shift
  60. done
  61.  
  62. freespace=`$mysqlpath/mysql -u $user -p$pass $db -h $host -e 'show table status\G' | /bin/awk '/InnoDB free:/ {print $4}' | /usr/bin/head -1`
  63.  
  64. echo $host has $freespace kB free
  65.  
  66. # on the number line, we need to test 6 cases:
  67. # 0-----w-----c----->
  68. # 0, 0<lag<w, w, w<lag<c, c, c<lag
  69. # which we simplify to
  70. # lag>=c, w<=lag<c, 0<=lag<warn
  71.  
  72. # if null, critical
  73. if [ $freespace == $null ]; then
  74. exit $STATE_CRITICAL;
  75. fi
  76.  
  77. #w<=lag<c
  78. if [ $freespace -lt $warn ]; then
  79. if [ $freespace -ge $crit ]; then
  80. exit $STATE_WARNING;
  81. fi
  82. fi
  83.  
  84. if [ $freespace -lt $crit ]; then
  85. exit $STATE_CRITICAL;
  86. fi
  87.  
  88. # 0<=lag<warn
  89. if [ $freespace -gt $warn ]; then
  90. exit $STATE_OK;
  91. fi
  92.