#! /usr/bin/perl # Show disk operations from FreeBSD gstat program # anders@fupp.net, 2007-09-24 $ENV{PATH} = "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin"; $gstatcmd="gstat -b"; if ($< != 0) { $gstatcmd = "sudo " . $gstatcmd; } if ($ARGV[0] eq "autoconf") { print "yes\n"; } elsif ($ARGV[0] eq "config") { print "graph_title Disk operations\n"; print "graph_vlabel operations\n"; print "graph_category disk\n"; print "graph_info This graph shows disk read and write operations, per 30 seconds with data from gstat (GEOM stat) in FreeBSD\n"; print "graph_args --base 1000 -l 0\n"; @parts = (); foreach $gline (`$gstatcmd`) { chomp($gline); if ($gline =~ /\s+\d+\s+\d+\s+(\d+)\s+\d+\s+[0-9\.]+\s+(\d+)\s+\d+\s+[0-9\.]+\s+[0-9\.]+\|\s+(\w+)/) { $part = $3; # Do not show c labels next if ($part =~ /c$/); # Only show real labels next if ($part !~ /[a-z]+\d+(s\d+|)[abcdefgh]/); push(@parts, $part); } } print "graph_order"; foreach $part (sort(@parts)) { print " " . $part . "_rs"; print " " . $part . "_ws"; } print "\n"; foreach $part (sort(@parts)) { print $part . "_rs.label $part (read)\n"; print $part . "_rs.type GAUGE\n"; print $part . "_rs.graph yes\n"; print $part . "_ws.label $part (write)\n"; print $part . "_ws.type GAUGE\n"; print $part . "_ws.graph yes\n"; } } else { foreach $gline (`cat /var/tmp/gstat.dat`) { chomp($gline); if ($gline =~ /\s+\d+\s+\d+\s+(\d+)\s+\d+\s+[0-9\.]+\s+(\d+)\s+\d+\s+[0-9\.]+\s+[0-9\.]+\|\s+(\w+)/) { $rs = $1; $ws = $2; $part = $3; # Do not show c labels next if ($part =~ /c$/); # Only show real labels next if ($part !~ /[a-z]+\d+(s\d+|)[abcdefgh]/); print $part . "_rs.value $rs\n"; print $part . "_ws.value $ws\n"; } } }