Download
  0: #! perl -w
  1: ###################################################################
  2: # Disk Statistic
  3: ###################################################################
  4: # Copyright (c) Istvan Szikra, 2008-2011. All rights reserved.
  5: # If you want to do something with this just contact me at 
  6: #   e-mail: szikra.istvan@freemail.hu
  7: #   web: http://www.szikraistvan.hu/
  8: #        http://foton.szikraistvan.hu/blog/
  9: #
 10: # File Name   : diskstat.pl
 11: # Version     : 0.2
 12: # Revision    : 17
 13: # Editor Tabs : 4
 14: # Created     : 2008.07.12
 15: # Revision History / Change Log:
 16: #        https://foton.szikraistvan.hu/svn/lib/NET/mrtg/trunk
 17: ###################################################################
 18: #require Net_SNMP_util;
 19: #import Net_SNMP_util;
 20: 
 21: $host="public\@127.0.0.1";
 22: 
 23: $tmpdir="tmp\\";
 24: #$tmpdir="";
 25: $CACHE_FILE = $tmpdir."disk.cache";
 26: 
 27: sub GetDiskStats(){
 28: 
 29:   push(@INC, "..\\lib\\mrtg2");
 30:   
 31:   require SNMP_util;
 32:   import SNMP_util;
 33: 
 34:   #use diagnostics -verbose;
 35:   #require SNMP_Session;
 36:   #import SNMP_Session;
 37:   $SNMP_Session::suppress_warnings = 2;
 38:   $SNMP_Session::suppress_warnings = 2; # just to supress warning: 'Name "SNMP_Session::suppress_warnings" used only once: possible typo'
 39:   #$SNMP_Session->suppress_warnings = 2;
 40:   
 41:   # get SysUptime, Name, Description
 42:   @result = snmpget( $host, (".1.3.6.1.2.1.1.3.0", ".1.3.6.1.2.1.1.5.0", ".1.3.6.1.2.1.1.1.0"));
 43:   push( @diskstats , $result[0]."\n");
 44:   push( @diskstats , $result[1]." [".$result[2]."]\n");
 45: 
 46:   $i=1;
 47:   while ($idx = snmpget( $host, (".1.3.6.1.2.1.25.2.3.1.1.".$i) ) ){
 48:     push(@storageidxs,$idx);
 49:     $i++;
 50:   }
 51:   $count=$i-1;
 52:   for (@storageidxs){
 53:    for $i (2..6){
 54:      push(@diskoids,".1.3.6.1.2.1.25.2.3.1.".$i.".".$_);
 55:    }
 56:   }
 57:   @result = snmpget( $host, @diskoids );
 58:   for($i=0;$i<$count;$i++){
 59:     push( @diskstats , $storageidxs[$i]." ".$result[$i*5+0]." ".$result[$i*5+2]." ".$result[$i*5+3]*$result[$i*5+2]." ".$result[$i*5+4]*$result[$i*5+2]." ".$result[$i*5+1]."\n");
 60:   }
 61: 
 62:   open FCACHE, ">", $CACHE_FILE or die $!;
 63:   print FCACHE @diskstats;
 64:   close FCACHE;  
 65: }
 66: 
 67: sub ReadCache(){
 68:   open FCACHE, $CACHE_FILE or die $!;
 69:   @diskstats=<FCACHE>;
 70:   close FCACHE;  
 71: 
 72: }
 73: 
 74: if ((scalar(@ARGV) < 1) || ($ARGV[0] eq '') ) {
 75:      print "Usage: $0 <drive letter:|VM|RAM> [host]\n";
 76:      print "Example: perl $0 c: public\@127.0.0.1\n";
 77:      print "Example: perl $0 RAM\n";
 78:      print "Out: Used Space, Disk Size, uptime, desc";
 79:      exit;
 80: }
 81: if ((scalar(@ARGV) > 1) && ($ARGV[1] ne '') ) {
 82:   $host = $ARGV[1];
 83:   $CACHE_FILE = $tmpdir.$host.".disk.cache";
 84: }
 85: $diskletter=uc($ARGV[0]);
 86: 
 87: if ( time() - (stat($CACHE_FILE))[9] > (1*60) ){	
 88: 	GetDiskStats();
 89: } else {
 90:     ReadCache();
 91: }
 92: 
 93: $uptime = $diskstats[0];
 94: $hostdesc = $diskstats[1];
 95: $used="0"; $size="0";
 96: $label = "";
 97: for (@diskstats[2..$#diskstats]){
 98:   /^(\d+)\s+([\d\.]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(.{2})(.*)$/;
 99: #  /^(\d+)\s+([\d\.]+)\s+(.*)$/;
100: #  print $1,"-",$2,"-",$3,"-",$4,"-",$5,"-",$6,"-",$7,"\n";
101:   if (($diskletter eq 'VM') && ($2 eq "1.3.6.1.2.1.25.2.1.3")) {
102:     $size=$4; $used=$5; $label=$6.$7;
103:     last;
104:   } elsif (($diskletter eq 'RAM') && ($2 eq "1.3.6.1.2.1.25.2.1.2")) {
105:     $size=$4; $used=$5; $label=$6.$7;
106:     last;
107:   } elsif (uc($6) eq $diskletter) {
108:     $size=$4; $used=$5; $label=$6.$7;
109:     last;
110:   }
111: }
112: print $used."\n";
113: print $size."\n";
114: print $uptime;
115: print $label." - ".$hostdesc;