#!/usr/local/apps/perl-5.005_03/bin/perl # This thing produces a report detailing what has change in the # named filesystem. # Scraped together by Matt McLeod # See http://boggle.org/software/ for license details. # Last modified 20001104. use Mail::Mailer; $filebase = "/var/tmp/fsmon"; @monfs = (); $tempfile = "/var/tmp/fsmon.tmp"; $gzip = "/usr/local/bin/gzip"; %headers = ( From => "System Monitor ", To => "asacadm-reports\@asac.ericsson.se", Subject => "Daily fsmon report" ); while ($n = shift) { push @monfs, $n; }; $mailer = new Mail::Mailer 'smtp', Server => 'assc00.epa.ericsson.se'; $mailer->open(\%headers); foreach $fs (@monfs) { # initialize hashes %hist_size = (); %cur_size = (); # read in historical data, if any exists $fname = $fs; $fname =~ s/\s|:|\\|\//_/g; if ( -f "$filebase/$fname.yesterday.gz" ) { open (YESTERDAY,"$gzip -dc $filebase/$fname.yesterday.gz |"); while () { chomp($_); ($node, $size) = split(";",$_); $hist_size{$node} = $size; }; close(YESTERDAY); }; # fetch current data (will take a while...) chdir($fs); open(DU,"/bin/du -dk . |") || die "can't run du!"; while() { chomp($_); ($size, $node) = split(" ",$_); $cur_size{$node} = $size; }; close(DU); # generate the report print $mailer "\nFilesystem: $fs\n\n"; print $mailer "New nodes:\n"; foreach $n (sort keys(%cur_size)) { print $mailer "$n\n" if ($hist_size{$n} == undef); }; print $mailer "\nVanished nodes:\n"; foreach $n (sort keys(%hist_size)) { print $mailer "$n\n" if ($cur_size{$n} == undef); }; print $mailer "\nChanged nodes:\n\n"; open(TEMPFILE,">$tempfile"); print TEMPFILE <>>>>>>>> @>>>>>>>>> @>>>>>>>>> $nodename, $oldsize, $newsize, $change . foreach $n (sort keys(%cur_size)) { if ($hist_size{$n} != undef) { $change = $cur_size{$n} - $hist_size{$n}; $oldsize = $hist_size{$n}; $newsize = $cur_size{$n}; $nodename = $n; if ($change != 0) { write TEMPFILE; }; }; }; close (TEMPFILE); open(TEMPFILE,"<$tempfile"); while () { print $mailer $_; }; close(TEMPFILE); # write current data out as historical open(YESTERDAY,"| $gzip -c > $filebase/$fname.yesterday.gz"); foreach $n (sort keys(%cur_size)) { print YESTERDAY "$n;$cur_size{$n}\n"; }; close(YESTERDAY); }; $mailer->close;