NAME
Rstat::Client - Perl library for client access to rstatd
SYNOPSIS
use Rstat::Client;
$clnt = Rstat::Client->new("some.host")
$stats = $clnt->fetch(); # wait for response
$stats = $clnt->fetch(10); # fetch with timeout
printf "CPU Load: %.2f %.2f %.2f\n", @{$stats->{'avenrun'}};
DESCRIPTION
This Perl library gives you access to rstatd statistics. First create an Rstat::Client
object:
$clnt = Rstat::Client->new($hostname);
The parameter $hostname
is optional and defaults to localhost. The constructor never fails; a valid Rstat::Client
object is always returned.
Fetch statistic records by calling the fetch()
method of the Rstat::Client
object:
$stats = $clnt->fetch($timeout) or die $@;
The parameter $timeout
is optional. By default, the fetch()
method will block until a response is returned.
If the request is successful, fetch()
returns a reference to a hash containing the statistics. In the event of an error, fetch()
returns undef
, and $@
contains the reason for failure.
DATA FORMAT
Here is a commented Data::Dumper
dump of the stats hash:
$stats = {
# time when this record was fetched
'curtime.tv_sec' => '1021885390',
'curtime.tv_usec' => 181205,
# time when the system was booted
'boottime.tv_sec' => '1021781411',
'boottime.tv_usec' => '0',
# pages swapped in/out
'v_pswpin' => 1,
'v_pswpout' => '0',
# pages paged in/out
'v_pgpgin' => 43155,
'v_pgpgout' => 64266,
# interrupts and context switches
'v_intr' => 11150229,
'v_swtch' => 23174363,
# network statistics (sum over all interfaces)
'if_ipackets' => 43238686,
'if_ierrors' => 71633,
'if_opackets' => '87451',
'if_oerrors' => '0',
'if_collisions' => 0,
# run queue length (1/5/15 minutes average)
'avenrun' => [
'0.45703125',
'0.21875',
'0.13671875'
],
# cpu time (in ticks) for USER/NICE/SYS/IDLE
'cp_time' => [
261982,
11,
450845,
9685071
],
# disk transfers
'dk_xfer' => [
47053,
'0',
'0',
'0'
],
};
NOTES
Timestamps are separated into seconds (standard UNIX time) and microseconds. The availability of a current timestamp allows proper calculation of the interval between measurements without worrying about network latency.
Most values are counters. To get the real numbers you have to fetch()
samples regularly and divide the counter increments by the time interval between the samples.
The cpu_time
array holds the ticks spent in the various CPU states (averaged over all CPUs). If you know the regular tick rate of the target system you may calculate the number of CPUs from the sum of cpu_time
increments and the time interval between the samples. Most often you will be interested in the percentage of CPU states only.
The avenrun
array is originally shifted by 8 bits. Rstat::Client
takes care of this and returns floating point values.
PORTABILITY
As of version 2.0, this library is written in pure Perl and should work on any platform. It has been tested from Linux, Solaris and Microsoft Windows clients, talking to rstat servers running on Linux and Solaris.
BUGS AND DESIGN LIMITATIONS
For portability reasons this package uses version 3 (RSTATVERS_TIME) of the rstatd protocol. Version 4 adds dynamically sized arrays for CPU state and disk access but was not available on all targeted plattforms.
As any software this package may contain bugs. Please feel free to contact the author if you find one.
AUTHOR / COPYRIGHT
Version 2.0 and Later, Including This Version
Ron Isaacson <ron.isaacson@morganstanley.com>
Copyright (c) 2008, Morgan Stanley & Co. Incorporated
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.
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, version 2 for more details.
A copy of the GNU General Public License was distributed with this program in a file called LICENSE. For additional copies, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
THE FOLLOWING DISCLAIMER APPLIES TO ALL SOFTWARE CODE AND OTHER MATERIALS CONTRIBUTED IN CONNECTION WITH THIS SOFTWARE:
THIS SOFTWARE IS LICENSED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY WARRANTY OF NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 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. THIS SOFTWARE MAY BE REDISTRIBUTED TO OTHERS ONLY BY EFFECTIVELY USING THIS OR ANOTHER EQUIVALENT DISCLAIMER AS WELL AS ANY OTHER LICENSE TERMS THAT MAY APPLY.
Version 1.2 and Earlier
Axel Schwenke <axel.schwenke@gmx.net>
Copyright (c) 2002 Axel Schwenke. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
VERSION
Version 2.2 (April 16, 2008)