#!/usr/local/bin/bash

: <<=cut
=head1 NAME

xfs_frag - Munin plugin to monitor the fragmentation level on your XFS filesystems

=head1 APPLICABLE SYSTEMS

Any machine with an XFS file system.

=head1 CONFIGURATION

None, generally, but you may want to run as root and set a timeout.

  [xfs_frag]
  user root
  timeout 90

=head1 MAGIC MARKERS

  #%# family=auto contrib
  #%# capabilities=

=head1 VERSION

1

=head1 AUTHOR

Paul Saunders L<darac+munin@darac.org.uk>

=cut

declare -a TOKENS
shopt -s nocasematch

case $1 in
	config)
		cat <<'EOF'
graph_title XFS fragmentation
graph_vlabel Percent
graph_category disk
EOF
		awk '{print $2 " " $3}' </etc/mtab | while read -r LINE; do
			# shellcheck disable=SC2206
			TOKENS=($LINE)
			if [[ ${TOKENS[1]} =~ xfs ]]; then
				FIELDNAME=$(echo "${TOKENS[0]}" | sed 's/^[^A-Za-z_]/_/; s/[^A-Za-z0-9_]/_/g')
				echo "$FIELDNAME.label ${TOKENS[0]}"
				echo "$FIELDNAME.type GAUGE"
			fi
		done
		exit 0
		;;
esac

awk '{print $2 " " $3 " " $1}' </etc/mtab | while read -r LINE; do
	# shellcheck disable=SC2206
	TOKENS=($LINE)
	if [[ ${TOKENS[1]} =~ xfs ]]; then
		FIELDNAME=$(echo "${TOKENS[0]}" | sed 's/^[^A-Za-z_]/_/; s/[^A-Za-z0-9_]/_/g')
		FRAG=$(xfs_db -c frag -r "${TOKENS[2]}" | sed 's/.*fragmentation factor \(.*\)%.*/\1/')
		echo "$FIELDNAME.value $FRAG"
	fi
done
