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;