##########################################################################
# $Id: zz-disk_space,v 1.13 2005/11/02 14:26:11 bjorn Exp $
##########################################################################
$| = 1;

use POSIX qw(uname);

my (%Config);

$ENV{PRINTING} = "y";

my $Ouput = $ENV{'LOGWATCH_OUTPUT_TYPE'} || 0;
my $Debug = $ENV{'LOGWATCH_DEBUG'} || 0;
my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
my $logwatch_hostname = $ENV{'LOGWATCH_ONLY_HOSTNAME'};

my $show_home_dir_sizes = $ENV{'show_home_dir_sizes'} || 0;
my $home_dir = $ENV{'home_dir'} || 0;
my $show_mail_dir_sizes = $ENV{'show_mail_dir_sizes'} || 0;
my $mail_dir = $ENV{'mail_dir'} || 0;
my $show_disk_usage = $ENV{'show_disk_usage'} || 0;

my ($OSname, $hostname, $release, $version, $machine) = POSIX::uname();
$hostname =~ s/\..*//;
exit (0) if ($ENV{'LOGWATCH_ONLY_HOSTNAME'} and ($logwatch_hostname ne $hostname));

if ( $Debug >= 5 ) {
    print STDERR "\n\nDEBUG: Inside zz-disk-space Filter \n\n";
    $DebugCounter = 1;
}

sub DirUsage {
    my $Dir = $_[0];
	if ($OSname eq "Linux") {
		system("du -s --block-size=1048576 -h $Dir | sort -n -r -k 1");
	} elsif ($OSname eq "SunOS") {
		if ( ($release eq "5.10") || ($release eq "5.9") ) {
			system("/usr/xpg4/bin/du -s -h $Dir | sort -n -r -k 1");
		} else {
			system("du -s $Dir | sort -n -r -k 1");
  		}
	} elsif ($OSname eq "HP-UX") {
    	system("du -s -k $Dir | sort -n -r -k 1");
	} else {
    	system("du -s -h $Dir | sort -n -r -k 1");
	}

}


sub DirectorySizes
{
      my $Dir = $_[0];
      DirUsage($Dir.'/*');	
}

sub HomeDirectorySizes
{
      my $HomeDir = $_[0];
      print "\n\n------------- Home Directory Sizes ---------------\n\n";
      print "Size    Location\n";
      print "(MB)\n";
      DirectorySizes($HomeDir);
      print "\n\n------------- Home Directory Sizes ---------------\n\n";
}


sub MailDirectorySizes
{
      my $MailDir = $_[0];
      print "\n\n------------- Mail Directory Sizes ---------------\n\n";
      print "Size    Location\n";
      print "(MB)\n";
      DirectorySizes($MailDir);
      print "\n\n------------- Mail Directory Sizes ---------------\n\n";
}


sub DiskUsage ()
{
    my $Dir = $_[0];
    print "\n\n------------- Directory Sizes ---------------\n\n";
    print "Size    Location\n";
    print "(GB)\n";

	if ($OSname eq "Linux") {
   		DirUsage("/var/log");
   		DirUsage("/usr");
	} elsif ($OSname eq "SunOS") {
   		DirUsage("/var/log");
   		DirUsage("/usr");
   		DirUsage("/opt");
	} elsif ($OSname eq "HP-UX") {
   		DirUsage("/var/adm");
   		DirUsage("/usr");
   		DirUsage("/opt");
	} else {
   		DirUsage("/var/log");
   		DirUsage("/usr");
   		DirUsage("/opt");
	}

	print "\n\n------------- Directory Sizes ---------------\n\n";

}

sub DiskSpace ()
{

	if ($OSname eq "Linux") {
		my $awkprog='{printf("%-35s %6s %6s %6s %4s  %s\n", $1, $2, $3, $4, $5, $6); }';
		system("echo 'Filesystem:Size:Used:Avail:Use%:Mounted on' | awk -F: '$awkprog' ");
      system("df -P -h | awk '/^[/ ]/ $awkprog' | sort -b -r -n -k 5 ");
	} elsif ($OSname eq "SunOS") {
		if ( ($release eq "5.10") || ($release eq "5.9") ) {
			system("/usr/xpg4/bin/df -P -h | grep '^/dev/'");
  		} else {
   		system("/usr/xpg4/bin/df -P | grep '^/dev/'");
  		}
	} elsif ($OSname eq "HP-UX") {
  		system("bdf | grep '^/dev/'");
	} else {
  		#system("df -kP | grep '^/dev/'");
  		system("df -k | grep '^[/ ]'");
	}

   print "\n";
}

#####################
#Main

#Only show disk space "df" by default -mgt
DiskSpace();

if ( $show_disk_usage == 1 ) { DiskUsage(); }; #Turn on in zz-disk_space.conf

if (($Detail > 10) || ($show_home_dir_sizes == 1)) { #set in zz-disk_space.conf -mgt
	HomeDirectorySizes($home_dir);
}

if (($Detail > 10) || ($show_mail_dir_sizes == 1)) { #set in zz-disk_space.conf -mgt
    MailDirectorySizes($mail_dir);
}


# vi: shiftwidth=3 tabstop=3 syntax=perl et
