head 1.11; access; symbols SNMPDX_1_0_0:1.11 SNMPDX_0_2_11:1.10 SNMPDX_0_2_10:1.9 SNMPDX_0_2_9:1.9 SNMPDX_0_2_8:1.8 SNMPDX_0_2_7:1.8 SNMPDX_0_2_6:1.7 SNMPDX_0_2_5:1.7 SNMPDX_0_2_4:1.6 SNMPDX_0_2_3:1.6 SNMPDX_0_2_2:1.6 SNMPDX_0_2_1:1.5 SNMPDX_0_2_0:1.5; locks; strict; comment @# @; 1.11 date 2007.03.01.10.52.39; author rse; state Exp; branches; next 1.10; commitid FNuFlqR2Qo3fkn8s; 1.10 date 2005.10.05.17.42.13; author rse; state Exp; branches; next 1.9; 1.9 date 2004.07.28.13.00.59; author thl; state Exp; branches; next 1.8; 1.8 date 2003.09.10.15.01.46; author rse; state Exp; branches; next 1.7; 1.7 date 2003.09.10.12.29.06; author thl; state Exp; branches; next 1.6; 1.6 date 2003.09.09.13.44.04; author thl; state Exp; branches; next 1.5; 1.5 date 2003.09.08.14.34.56; author thl; state Exp; branches; next 1.4; 1.4 date 2003.09.08.13.42.05; author thl; state Exp; branches; next 1.3; 1.3 date 2003.09.08.11.07.56; author thl; state Exp; branches; next 1.2; 1.2 date 2003.09.08.10.49.35; author thl; state Exp; branches; next 1.1; 1.1 date 2003.09.01.15.22.42; author rse; state Exp; branches; next ; desc @@ 1.11 log @Upgrade build environment to GNU shtool 2.0.6 and GNU autoconf 2.60 @ text @## ## OSSP snmpdx - SNMP Daemon Extension ## Copyright (c) 2003-2007 The OSSP Project ## Copyright (c) 2003-2007 Ralf S. Engelschall ## Copyright (c) 2003-2005 Cable & Wireless ## ## This file is part of OSSP snmpdx, a SNMP daemon extension which ## can be found at http://www.ossp.org/pkg/tool/snmpdx/. ## ## This program is free software; you can redistribute it and/or ## modify it under the terms of the GNU General Public License ## as published by the Free Software Foundation; either version ## 2.0 of the License, or (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this file; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 ## USA, or contact Ralf S. Engelschall . ## ## hwCpu.pm: probe for Hardware, CPU ## package My::Probe::hwCpu; our @@ISA = qw(My::Probe); sub oids ($) { my ($self) = @@_; return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.hardware.hwCpu.*"); } sub probe ($$) { my ($self, $obj) = @@_; if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) { my $hwCpuNum; my @@hwCpuENTRY; #N/A # local workspace my $out; my $raw; # query sysctl(8) $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.ncpu", "forever"); $raw = $out->{-stdout}; if ($raw =~ m/^\s*(.+?)\s*$/s) { $hwCpuNum = $1; } $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/); } elsif ($self->{-ctx}->{-platform}->id() =~ m/Linux/i) { my $hwCpuNum; my @@hwCpuENTRY; #N/A # local workspace my $out; my $raw; # query dmesg(8) # FIXME: this works only within a reasonable time after booting # but I don't know any alternative method for querying the speed! $out = $self->{-ctx}->{-sys}->run("/bin/dmesg", "forever"); $raw = $out->{-stdout}; if ($raw =~ m/\nProcessors: (\d+)\n/si) { $hwCpuNum = $1; } $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/); } elsif($self->{-ctx}->{-platform}->id() =~ m/SunOS/i) { my $hwCpuNum; my @@hwCpuENTRY; # local workspace my $out; my $raw; my $arch; # initialize arch $arch = $self->{-ctx}->{-platform}->arch(); # hwCpuSpeed $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m"); $raw = $out->{-stdout}; if ($raw =~ m/\n=+ CPUs =+\n.*?\n---[ -]+\n(.*?)\n=+/s) { $raw = $1; foreach $line (split "\n", $raw) { my ($brd,$cpu,$module,$mhz,$mb,$impl,$mask) = split(" ", $line); if ($cpu =~ m/^\d+$/) { $hwCpuENTRY[$cpu] = {} if (not defined $hwCpuENTRY[$cpu]); $hwCpuENTRY[$cpu]->{hwCpuIndex} = $cpu; $hwCpuENTRY[$cpu]->{hwCpuId} = "Cpu_$cpu"; $hwCpuENTRY[$cpu]->{hwCpuSpeed} = $mhz; } } } # hwCpuTemp $out = $self->{-ctx}->{-sys}->run("/usr/platform/$arch/sbin/prtdiag -v", "1m"); $raw = $out->{-stdout}; if ($raw =~ m/\n=+ Environmental Status =+\n.*\nSystem Temperatures \(Celsius\):\n-+\n(.*?)\n=+/s) { $raw = $1; foreach $line (split "\n", $raw) { my ($cpu,$temp) = split(" ", $line); if ($cpu =~ m/CPU(\d+)/) { $cpu = $1; $new->{$cpu} = $cpu; $hwCpuENTRY[$cpu] = {} if (not defined $hwCpuENTRY[$cpu]); $hwCpuENTRY[$cpu]->{hwCpuIndex} = $cpu; $hwCpuENTRY[$cpu]->{hwCpuId} = "Cpu_$cpu"; $hwCpuENTRY[$cpu]->{hwCpuTemp} = $temp; } } } # hwCpuNum $hwCpuNum = $#{@@hwCpuENTRY} + 1; $obj->{-value} = $hwCpuNum if ($obj->{-name} =~ m/\.hwCpuNum$/); if ($obj->{-name} =~ m/\.hwCpuENTRY\.([^.]+)\.(\d+)$/) { my $col = $1; my $row = ($2 > 0 ? $2 - 1 : 0); $self->{-ctx}->{-log}->printf(4, "col=%s row=%s", $col, $row); $obj->{-value} = $hwCpuENTRY[$row]->{$col} if (defined $hwCpuENTRY[$row] and defined $hwCpuENTRY[$row]->{$col}); } } return; } 1; @ 1.10 log @flush pending changes @ text @d3 2 a4 2 ## Copyright (c) 2003-2005 The OSSP Project ## Copyright (c) 2003-2005 Ralf S. Engelschall @ 1.9 log @remove irrelevant assignments which perl >= 5.8.4 optimizes away anyway @ text @d3 3 a5 3 ## Copyright (c) 2003 The OSSP Project ## Copyright (c) 2003 Ralf S. Engelschall ## Copyright (c) 2003 Cable & Wireless @ 1.8 log @More source tree cleanups and polishing, especially adding the GPL-based copyright header used inside OSSP packages @ text @d40 2 a41 2 my $hwCpuNum = undef; my @@hwCpuENTRY = undef; #N/A d56 2 a57 2 my $hwCpuNum = undef; my @@hwCpuENTRY = undef; #N/A d74 2 a75 2 my $hwCpuNum = undef; my @@hwCpuENTRY = undef; @ 1.7 log @fix more array/scalar problem; add Index; rename variables removing Info @ text @d2 1 a2 1 ## snmpdx -- SNMP Daemon Extension d7 2 a8 4 ## Permission to use, copy, modify, and distribute this software for ## any purpose with or without fee is hereby granted, provided that ## the above copyright notice and this permission notice appear in all ## copies. d10 4 a13 12 ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. d15 11 a25 1 ## hwCpu: Hardware, CPU @ 1.6 log @fix array/scalar problem @ text @d40 2 a41 2 my $hwCpuNum = undef; my @@hwCpuInfoENTRY = undef; #N/A d56 2 a57 2 my $hwCpuNum = undef; my @@hwCpuInfoENTRY = undef; #N/A d74 2 a75 2 my $hwCpuNum = undef; my @@hwCpuInfoENTRY = undef; d91 4 a94 2 @@hwCpuInfoENTRY[$cpu] = {} if (not defined @@hwCpuInfoENTRY[$cpu]); @@hwCpuInfoENTRY[$cpu]->{hwCpuSpeed} = $mhz; d108 5 a112 2 @@hwCpuInfoENTRY[$cpu] = {} if (not defined @@hwCpuInfoENTRY[$cpu]); @@hwCpuInfoENTRY[$cpu]->{hwCpuTemp} = $temp; d118 1 a118 1 $hwCpuNum = $#{@@hwCpuInfoENTRY} + 1; d121 1 a121 1 if ($obj->{-name} =~ m/\.hwCpuInfoENTRY\.([^.]+)\.(\d+)$/) { d125 1 a125 1 $obj->{-value} = @@hwCpuInfoENTRY[$row]->{$col} if (defined @@hwCpuInfoENTRY[$row] and defined @@hwCpuInfoENTRY[$row]->{$col}); @ 1.5 log @avoid referencing undefined hash @ text @d41 1 a41 1 my $hwCpuInfoENTRY = undef; #N/A d57 1 a57 1 my $hwCpuInfoENTRY = undef; #N/A d75 1 a75 1 my $hwCpuInfoENTRY = undef; @ 1.4 log @variable name cleanup @ text @d120 1 a120 1 $obj->{-value} = @@hwCpuInfoENTRY[$row]->{$col} if (defined @@hwCpuInfoENTRY[$row]->{$col}); @ 1.3 log @hwCpuNum for FreeBSD, Linux, SunOS @ text @d40 2 a41 3 my $hwCpuNum = undef; my $hwCpuSpeed = undef; #N/A my $hwCpuTemp = undef; #N/A d56 2 a57 3 my $hwCpuNum = undef; my $hwCpuSpeed = undef; #N/A my $hwCpuTemp = undef; #N/A d74 2 a75 3 my $hwCpuNum = undef; my $hwCpuSpeed = undef; #see @@dat[]->{hwCpuSpeed} my $hwCpuTemp = undef; #see @@dat[]->{hwCpuTemp} d78 1 a78 1 my $out; my $raw; my @@dat; my $arch; d91 2 a92 2 @@dat[$cpu] = {} if (not defined @@dat[$cpu]); @@dat[$cpu]->{hwCpuSpeed} = $mhz; d100 1 a100 1 if ($raw =~ m/\n=+ Environmental Status =+\n\nSystem Temperatures \(Celsius\):\n-+\n(.*?)\n=+/s) { d106 2 a107 2 @@dat[$cpu] = {} if (not defined @@dat[$cpu]); @@dat[$cpu]->{hwCpuTemp} = $temp; d113 1 a113 1 $hwCpuNum = $#{@@dat} + 1; d120 1 a120 1 $obj->{-value} = @@dat[$row]->{$col} if (defined @@dat[$row]->{$col}); @ 1.2 log @implement hwCpuSpeed and hwCpuTemp as array @ text @d40 7 d48 7 a54 3 my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.ncpu", "forever"); $obj->{-value} = $out->{-stdout}; $obj->{-value} =~ s/^\s*(.+?)\s*$/$1/s; d57 7 d67 4 a70 3 my $out = $self->{-ctx}->{-sys}->run("/sbin/dmesg", "forever"); if ($out->{-stdout} =~ m|(\d+)(\.\d+)?[ -]*MHz|si) { $obj->{-value} = $1; d72 2 d77 2 a78 2 # $hwCpuSpeed see @@dat[]->{hwCpuSpeed} # $hwCpuTemp see @@dat[]->{hwCpuTemp} @ 1.1 log @genesis of OSSP snmpdx @ text @d39 13 a51 6 if ($obj->{-name} =~ m|\.hwCpuNum$|) { if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) { # query sysctl(8) my $out = $self->{-ctx}->{-sys}->run("/sbin/sysctl -n hw.ncpu", "forever"); $obj->{-value} = $out->{-stdout}; $obj->{-value} =~ s/^\s*(.+?)\s*$/$1/s; d54 37 a90 8 elsif ($obj->{-name} =~ m|\.hwCpuSpeed$|) { if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) { # query dmesg(8) # FIXME: this works only within a reasonable time after booting # but I don't know any alternative method for querying the speed! my $out = $self->{-ctx}->{-sys}->run("/sbin/dmesg", "forever"); if ($out->{-stdout} =~ m|(\d+)(\.\d+)?[ -]*MHz|si) { $obj->{-value} = $1; d93 10 a102 3 } elsif ($obj->{-name} =~ m|\.hwCpuTemp$|) { if ($self->{-ctx}->{-platform}->id() =~ m/FreeBSD/i) { @