Index: ossp-pkg/snmpdx/snmpdx.d/sysVM.pm RCS File: /v/ossp/cvs/ossp-pkg/snmpdx/snmpdx.d/sysVM.pm,v rcsdiff -q -kk '-r1.7' '-r1.8' -u '/v/ossp/cvs/ossp-pkg/snmpdx/snmpdx.d/sysVM.pm,v' 2>/dev/null --- sysVM.pm 2003/09/10 15:01:46 1.7 +++ sysVM.pm 2003/09/20 10:11:22 1.8 @@ -37,324 +37,300 @@ my ($self, $obj) = @_; if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) { - # sysVMRamMax "/sbin/sysctl -n hw.physmem", convert bytes to MB - # sysVMRamUsed sysVMRamMax - sysVMRamFree - # sysVMRamFree "/usr/bin/vmstat", avm, convert KB to MB - # + ## + ## FreeBSD 4/5 + ## + ## sysVMRamMax "/sbin/sysctl -n hw.physmem", convert bytes to MB + ## sysVMRamUsed sysVMRamMax - sysVMRamFree + ## sysVMRamFree "/usr/bin/vmstat", avm, convert KB to MB + ## sysVMSwapMax "/usr/sbin/swapinfo -k", 1K-blocks, last line, convert KB to MB + ## sysVMSwapUsed "/usr/sbin/swapinfo -k", Used, last line, convert KB to MB + ## sysVMSwapFree sysVMSwapMax - sysVMSwapUsed + ## sysVMActivity "/usr/bin/vmstat", add pi and po column + ## if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) { my $sysVMRamMax = undef; my $sysVMRamUsed = undef; my $sysVMRamFree = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; - - # sysVMRamMax - $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever"); - $raw = $out->{-stdout}; + # determine sysVMRamMax + my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.physmem", "forever"); + my $raw = $out->{-stdout}; if ($raw =~ m/^(\d+)$/) { - $sysVMRamMax = int($1 / 1024 / 1024); + $sysVMRamMax = int($1 / (1024*1024)); } - # sysVMRamFree + # determine sysVMRamFree $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m"); $raw = $out->{-stdout}; - $n2i = {}; + my $n2i = {}; if ($raw =~ m/^[^\n]*\n *([^\n]*\bavm\b[^\n]*)\n *([^\n]*)\n$/s) { - $n2i = &mkn2i(split / +/, $1); + $n2i = &mkn2i(split(/\s+/, $1)); } - if (defined $n2i->{avm}) { - @dat = split(/ +/, $2); + if (defined($n2i->{avm})) { + my @dat = split(/\s+/, $2); $sysVMRamFree = int(@dat[$n2i->{avm}] / 1024); } - # sysVMRamUsed - if (defined $sysVMRamMax and defined $sysVMRamFree) { + # determine sysVMRamUsed + if (defined($sysVMRamMax) and defined($sysVMRamFree)) { $sysVMRamUsed = $sysVMRamMax - $sysVMRamFree; } + # provide result $obj->{-value} = $sysVMRamMax if ($obj->{-name} =~ m/\.sysVMRamMax$/); $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/); $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/); } - - # sysVMSwapMax "/usr/sbin/swapinfo -k", 1K-blocks, last line, convert KB to MB - # sysVMSwapUsed "/usr/sbin/swapinfo -k", Used, last line, convert KB to MB - # sysVMSwapFree sysVMSwapMax - sysVMSwapUsed - # - if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) { + elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) { my $sysVMSwapMax = undef; my $sysVMSwapUsed = undef; my $sysVMSwapFree = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; - - # sysVMSwapMax, sysVMSwapUsed - $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swapinfo -k", "1m"); - $raw = $out->{-stdout}; - $n2i = {}; + # determine sysVMSwapMax and sysVMSwapUsed + my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swapinfo -k", "1m"); + my $raw = $out->{-stdout}; + my $n2i = {}; if ($raw =~ m/^\s*([^\n]*\b1K-blocks[^\n]*\bUsed[^\n]*).*\n([^\n]+)$/s) { - $n2i = &mkn2i(split / +/, $1); + $n2i = &mkn2i(split(/\s+/, $1)); } - @dat = split(/ +/, $2); - if (defined $n2i->{_1K_blocks}) { - $sysVMSwapMax = int(@dat[$n2i->{_1K_blocks}] / 1024) + my @dat = split(/\s+/, $2); + if (defined($n2i->{_1K_blocks})) { + $sysVMSwapMax = int(@dat[$n2i->{_1K_blocks}] / 1024) } - if (defined $n2i->{Used}) { + if (defined($n2i->{Used})) { $sysVMSwapUsed = int(@dat[$n2i->{Used}] / 1024) } - # sysVMSwapFree - if (defined $sysVMSwapMax and defined $sysVMSwapUsed) { + # determine sysVMSwapFree + if (defined($sysVMSwapMax) and defined($sysVMSwapUsed)) { $sysVMSwapFree = $sysVMSwapMax - $sysVMSwapUsed; } + # provide result $obj->{-value} = $sysVMSwapMax if ($obj->{-name} =~ m/\.sysVMSwapMax$/); $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/); $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/); } - - # sysVMActivity "/usr/bin/vmstat", add pi and po column - # - if ($obj->{-name} =~ m/\.sysVMActivity$/) { + elsif ($obj->{-name} =~ m/\.sysVMActivity$/) { my $sysVMActivity = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; - - $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m"); - $raw = $out->{-stdout}; - $n2i = {}; + my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m"); + my $raw = $out->{-stdout}; + my $n2i = {}; if ($raw =~ m/^[^\n]*\n *([^\n]*(\bp[io]\b[^\n]*){2})\n *([^\n]*)\n$/s) { $n2i = &mkn2i(split / +/, $1); } - if (defined $n2i->{pi} and defined $n2i->{po}) { - @dat = split(/ +/, $3); + if (defined($n2i->{pi}) and defined($n2i->{po})) { + my @dat = split(/ +/, $3); $sysVMActivity = @dat[$n2i->{pi}] + @dat[$n2i->{po}]; } $obj->{-value} = $sysVMActivity; } } elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) { - # sysVMRamMax "/bin/cat /proc/meminfo", MemTotal, convert KB to MB - # sysVMRamUsed "/bin/cat /proc/meminfo", MemTotal-Buffers-Cached-MemFree, convert KB to MB - # sysVMRamFree sysVMRamMax - sysVMRamUsed - # - # FIXME sysVMRamMax does not include the kernel and some of its structures so - # FIXME it is not pyhsical RAM, see dmesg | egrep '^Memory:' - # FIXME /bin/cat is used here but could be replaced by native perl code to improve performance - # + ## + ## Linux 2.2/2.4 + ## + ## sysVMRamMax "/bin/cat /proc/meminfo", MemTotal, convert KB to MB + ## sysVMRamUsed "/bin/cat /proc/meminfo", MemTotal-Buffers-Cached-MemFree, convert KB to MB + ## sysVMRamFree sysVMRamMax - sysVMRamUsed + ## sysVMSwapMax "/bin/cat /proc/meminfo", SwapTotal, convert KB to MB + ## sysVMSwapUsed sysVMSwapMax - sysVMSwapFree + ## sysVMSwapFree "/bin/cat /proc/meminfo", SwapFree, convert KB to MB + ## sysVMActivity "/usr/bin/vmstat", add si and so column + ## + ## FIXME: sysVMRamMax does not include the kernel and some of + ## its structures so it is not pyhsical RAM, see dmesg | egrep + ## '^Memory:'. Additionally, /bin/cat is used here but could be + ## replaced by native Perl code to improve performance... + ## if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) { my $sysVMRamMax = undef; my $sysVMRamUsed = undef; my $sysVMRamFree = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; my $tmp; - - # sysVMRamMax, sysVMRamUsed - $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m"); - $raw = $out->{-stdout}; - $tmp = {}; + # determine sysVMRamMax and sysVMRamUsed + my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m"); + my $raw = $out->{-stdout}; + my $tmp = {}; $tmp->{MemTotal} = $1 if ($raw =~ m/\nMemTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s); $tmp->{Buffers} = $1 if ($raw =~ m/\nBuffers:[^\n]*\b(\d+)\b[^\n]*kB\n/s); $tmp->{Cached} = $1 if ($raw =~ m/\nCached:[^\n]*\b(\d+)\b[^\n]*kB\n/s); $tmp->{MemFree} = $1 if ($raw =~ m/\nMemFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s); - if (defined $tmp->{MemTotal}) { + if (defined($tmp->{MemTotal})) { $sysVMRamMax = int($tmp->{MemTotal} / 1024); } - - if ( defined $tmp->{MemTotal} - and defined $tmp->{Buffers} - and defined $tmp->{Cached} - and defined $tmp->{MemFree} - ) { - $sysVMRamUsed = int (( $tmp->{MemTotal} - - $tmp->{Buffers} - - $tmp->{Cached} - - $tmp->{MemFree} - ) / 1024 ); + if ( defined($tmp->{MemTotal}) + and defined($tmp->{Buffers}) + and defined($tmp->{Cached}) + and defined($tmp->{MemFree}) ) { + $sysVMRamUsed = int (( $tmp->{MemTotal} + - $tmp->{Buffers} + - $tmp->{Cached} + - $tmp->{MemFree} ) / 1024 ); } - # sysVMRamFree + # determine sysVMRamFree if (defined $sysVMRamMax and defined $sysVMRamUsed) { $sysVMRamFree = $sysVMRamMax - $sysVMRamUsed; } + # provide result $obj->{-value} = $sysVMRamMax if ($obj->{-name} =~ m/\.sysVMRamMax$/); $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/); $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/); } - - # sysVMSwapMax "/bin/cat /proc/meminfo", SwapTotal, convert KB to MB - # sysVMSwapUsed sysVMSwapMax - sysVMSwapFree - # sysVMSwapFree "/bin/cat /proc/meminfo", SwapFree, convert KB to MB - # - if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) { + elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) { my $sysVMSwapMax = undef; my $sysVMSwapUsed = undef; my $sysVMSwapFree = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; - - # sysVMSwapMax, sysVMSwapFree - $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m"); - $raw = $out->{-stdout}; + # determine sysVMSwapMax and sysVMSwapFree + my $out = $self->{-ctx}->{-sys}->run("/bin/cat /proc/meminfo", "1m"); + my $raw = $out->{-stdout}; if ($raw =~ m/\nSwapTotal:[^\n]*\b(\d+)\b[^\n]*kB\n/s) { - $sysVMSwapMax = int($1 / 1024); + $sysVMSwapMax = int($1 / 1024); } if ($raw =~ m/\nSwapFree:[^\n]*\b(\d+)\b[^\n]*kB\n/s) { $sysVMSwapFree = int($1 / 1024); } - # sysVMSwapUsed - if (defined $sysVMSwapMax and defined $sysVMSwapFree) { + # determine sysVMSwapUsed + if (defined($sysVMSwapMax) and defined($sysVMSwapFree)) { $sysVMSwapUsed = $sysVMSwapMax - $sysVMSwapFree; } + # provide result $obj->{-value} = $sysVMSwapMax if ($obj->{-name} =~ m/\.sysVMSwapMax$/); $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/); $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/); } - - # sysVMActivity "/usr/bin/vmstat", add si and so column - # - if ($obj->{-name} =~ m/\.sysVMActivity$/) { + elsif ($obj->{-name} =~ m/\.sysVMActivity$/) { my $sysVMActivity = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; - - $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m"); - $raw = $out->{-stdout}; - $n2i = {}; + my $out = $self->{-ctx}->{-sys}->run("/usr/bin/vmstat", "1m"); + my $raw = $out->{-stdout}; + my $n2i = {}; if ($raw =~ m/^[^\n]*\n *([^\n]*(\bs[io]\b[^\n]*){2})\n *([^\n]*)\n$/s) { - $n2i = &mkn2i(split / +/, $1) if (not defined $n2i->{sr}); + $n2i = &mkn2i(split(/\s+/, $1)) if (not defined($n2i->{sr})); } - if (defined $n2i->{si} and defined $n2i->{so}) { - my @dat = split(/ +/, $3); + if (defined($n2i->{si}) and defined($n2i->{so})) { + my @dat = split(/\s+/, $3); $sysVMActivity = @dat[$n2i->{si}] + @dat[$n2i->{so}]; } $obj->{-value} = $sysVMActivity; } } elsif ($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) { - # sysVMRamMax "/usr/platform/$arch/sbin/prtdiag", Memory size - # sysVMRamUsed sysVMRamMax - sysVMRamFree - # sysVMRamFree "/bin/pagesize" * "/bin/sar -r 1 1", freemem, convert bytes to MB - # + ## + ## Sun Solaris 2.x (SunOS 5.x) + ## + ## sysVMRamMax "/usr/platform/$arch/sbin/prtdiag", Memory size + ## sysVMRamUsed sysVMRamMax - sysVMRamFree + ## sysVMRamFree "/bin/pagesize" * "/bin/sar -r 1 1", freemem, convert bytes to MB + ## sysVMSwapMax "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB + ## sysVMSwapUsed sysVMSwapMax - sysVMSwapFree + ## sysVMSwapFree "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB + ## sysVMActivity "/bin/vmstat", sr column + ## if ($obj->{-name} =~ m/\.sysVMRam(Max|Used|Free)$/) { my $sysVMRamMax = undef; my $sysVMRamUsed = undef; my $sysVMRamFree = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; my $arch; my $pagesize; my $tmp; + # determine architecture + my $arch = $self->{-ctx}->{-platform}->arch(); - # initialize arch; get or assume pagesize(1) - $arch = $self->{-ctx}->{-platform}->arch(); - $out = $self->{-ctx}->{-sys}->run("/bin/pagesize", "forever"); - $raw = $out->{-stdout}; - $pagesize = 4096; + # determine page size + my $out = $self->{-ctx}->{-sys}->run("/bin/pagesize", "forever"); + my $raw = $out->{-stdout}; + my $pagesize = 4096; if ($raw =~ m/^(\d+)$/) { $pagesize = $1; } - # sysVMRamMax + # determine sysVMRamMax $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m"); $raw = $out->{-stdout}; if ($raw =~ m/\nMemory size: (\d+) Megabytes/s) { $sysVMRamMax = $1; } - # sysVMRamFree + # determine sysVMRamFree $out = $self->{-ctx}->{-sys}->run("/bin/sar -r 1 1", "1m"); $raw = $out->{-stdout}; - $n2i = {}; + my $n2i = {}; if ($raw =~ m/^.*\n([^\n]*\bfreemem[^\n]*)\n(.*)$/s) { - $n2i = &mkn2i(split / +/, $1); + $n2i = &mkn2i(split(/\s+/, $1)); } - @dat = split(/ +/, $2); - if (defined $n2i->{freemem}) { + my @dat = split(/\s+/, $2); + if (defined($n2i->{freemem})) { $tmp = @dat[$n2i->{freemem}]; } - $sysVMRamFree = int($tmp * $pagesize / 1024 / 1024) if (defined $tmp); + $sysVMRamFree = int($tmp * $pagesize / (1024*1024)) if (defined($tmp)); - # sysVMRamUsed - if (defined $sysVMRamMax and defined $sysVMRamFree) { + # determine sysVMRamUsed + if (defined($sysVMRamMax) and defined($sysVMRamFree)) { $sysVMRamUsed = $sysVMRamMax - $sysVMRamFree; } + # provide result $obj->{-value} = $sysVMRamMax if ($obj->{-name} =~ m/\.sysVMRamMax$/); $obj->{-value} = $sysVMRamUsed if ($obj->{-name} =~ m/\.sysVMRamUsed$/); $obj->{-value} = $sysVMRamFree if ($obj->{-name} =~ m/\.sysVMRamFree$/); } - - # sysVMSwapMax "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB - # sysVMSwapUsed sysVMSwapMax - sysVMSwapFree - # sysVMSwapFree "swap -l", egrep ^/ and accumulate, convert 512byte blocks to MB - # - if ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) { + elsif ($obj->{-name} =~ m/\.sysVMSwap(Max|Used|Free)$/) { my $sysVMSwapMax = undef; my $sysVMSwapUsed = undef; my $sysVMSwapFree = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; my $tmpMax; my $tmpFree; - - # sysVMSwapMax, sysVMSwapFree - $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m"); - $raw = $out->{-stdout}; - $n2i = {}; + # determine sysVMSwapMax, sysVMSwapFree + my $out = $self->{-ctx}->{-sys}->run("/usr/sbin/swap -l", "1m"); + my $raw = $out->{-stdout}; + my $n2i = {}; if ($raw =~ m/^\s*([^\n]*\bblocks[^\n]*\bfree[^\n]*)\n(.*)$/s) { - $n2i = &mkn2i(split / +/, $1) if (scalar keys %$n2i == 0); + $n2i = &mkn2i(split(/\s+/, $1)) if (scalar(keys(%{$n2i})) == 0); } - $tmpMax = undef; - $tmpFree = undef; - foreach my $r (split /\n/, $2) { + my $tmpMax = undef; + my $tmpFree = undef; + foreach my $r (split(/\n/, $2)) { if ($r =~ m/^\//) { - @dat = split(/ +/, $r); - if (defined $n2i->{blocks}) { - $tmpMax = 0 if (not defined $tmpMax); + my @dat = split(/\s+/, $r); + if (defined($n2i->{blocks})) { + $tmpMax = 0 if (not defined($tmpMax)); $tmpMax += @dat[$n2i->{blocks}]; } - if (defined $n2i->{free}) { - $tmpFree = 0 if (not defined $tmpFree); + if (defined($n2i->{free})) { + $tmpFree = 0 if (not defined($tmpFree)); $tmpFree += @dat[$n2i->{free}]; } } } - $sysVMSwapMax = int($tmpMax * 512 / 1024 / 1024) if (defined $tmpMax); - $sysVMSwapFree = int($tmpFree * 512 / 1024 / 1024) if (defined $tmpFree); + $sysVMSwapMax = int($tmpMax * 512 / 1024 / 1024) if (defined($tmpMax)); + $sysVMSwapFree = int($tmpFree * 512 / 1024 / 1024) if (defined($tmpFree)); - # sysVMSwapUsed - if (defined $sysVMSwapMax and defined $sysVMSwapFree) { + # determine sysVMSwapUsed + if (defined($sysVMSwapMax) and defined($sysVMSwapFree)) { $sysVMSwapUsed = $sysVMSwapMax - $sysVMSwapFree; } + # provide result $obj->{-value} = $sysVMSwapMax if ($obj->{-name} =~ m/\.sysVMSwapMax$/); $obj->{-value} = $sysVMSwapUsed if ($obj->{-name} =~ m/\.sysVMSwapUsed$/); $obj->{-value} = $sysVMSwapFree if ($obj->{-name} =~ m/\.sysVMSwapFree$/); } - - # sysVMActivity "/bin/vmstat", sr column - # - if ($obj->{-name} =~ m/\.sysVMActivity$/) { + elsif ($obj->{-name} =~ m/\.sysVMActivity$/) { my $sysVMActivity = undef; - # local workspace - my $out; my $raw; my $n2i; my @dat; - - $out = $self->{-ctx}->{-sys}->run("/bin/vmstat", "1m"); - $raw = $out->{-stdout}; - $n2i = {}; + my $out = $self->{-ctx}->{-sys}->run("/bin/vmstat", "1m"); + my $raw = $out->{-stdout}; + my $n2i = {}; if ($raw =~ m/^[^\n]*\n *([^\n]*\bsr\b[^\n]*)\n *([^\n]*)\n$/s) { - $n2i = &mkn2i(split / +/, $1) if (not defined $n2i->{sr}); + $n2i = &mkn2i(split(/\s+/, $1)) if (not defined($n2i->{sr})); } if (defined $n2i->{sr}) { - @dat = split(/ +/, $2); + my @dat = split(/\s+/, $2); $sysVMActivity = @dat[$n2i->{sr}]; } $obj->{-value} = $sysVMActivity; @@ -363,7 +339,7 @@ return; } -# name to index +# table row name to index mapping sub mkn2i ($) { my (@name) = @_; my $rc = {};