|
Win32::PerfLib - accessing the Windows NT Performance Counter |
Win32::PerfLib - accessing the Windows NT Performance Counter
use Win32::PerfLib;
my $server = "";
Win32::PerfLib::GetCounterNames($server, \%counter);
%r_counter = map { $counter{$_} => $_ } keys %counter;
# retrieve the id for process object
$process_obj = $r_counter{Process};
# retrieve the id for the process ID counter
$process_id = $r_counter{'ID Process'};
# create connection to $server
$perflib = new Win32::PerfLib($server);
$proc_ref = {};
# get the performance data for the process object
$perflib->GetObjectList($process_obj, $proc_ref);
$perflib->Close();
$instance_ref = $proc_ref->{Objects}->{$process_obj}->{Instances};
foreach $p (sort keys %{$instance_ref})
{
$counter_ref = $instance_ref->{$p}->{Counters};
foreach $i (keys %{$counter_ref})
{
if($counter_ref->{$i}->{CounterNameTitleIndex} == $process_id)
{
printf( "% 6d %s\n", $counter_ref->{$i}->{Counter},
$instance_ref->{$p}->{Name}
);
}
}
}
This module allows to retrieve the performance counter of any computer (running Windows NT) in the network.
All of the functions return FALSE (0) if they fail, unless otherwise noted. If the $server argument is undef the local machine is assumed.
GetObjectList($objectid,$hashref)Close($hashref)
The performance data is returned in the following data structure:
$hashref = {
'NumObjectTypes' => VALUE
'Objects' => HASHREF
'PerfFreq' => VALUE
'PerfTime' => VALUE
'PerfTime100nSec' => VALUE
'SystemName' => STRING
'SystemTime' => VALUE
}
ID(s) as keys and
a hash reference to the object counter data as value. Even there is only one
object requested in the call to GetObjectList there may be more than one object
in the result.
$hashref->{Objects} = {
<object1> => HASHREF
<object2> => HASHREF
...
}
$hashref->{Objects}->{<object1>} = {
'DetailLevel' => VALUE
'Instances' => HASHREF
'Counters' => HASHREF
'NumCounters' => VALUE
'NumInstances' => VALUE
'ObjectHelpTitleIndex' => VALUE
'ObjectNameTitleIndex' => VALUE
'PerfFreq' => VALUE
'PerfTime' => VALUE
}
$hashref->{Objects}->{<object1>}->{Instances} = {
<1> => HASHREF
<2> => HASHREF
...
<n> => HASHREF
}
or
$hashref->{Objects}->{<object1>}->{Counters} = {
<1> => HASHREF
<2> => HASHREF
...
<n> => HASHREF
}
$hashref->{Objects}->{<object1>}->{Instances}->{<1>} = {
Counters => HASHREF
Name => STRING
ParentObjectInstance => VALUE
ParentObjectTitleIndex => VALUE
}
or
$hashref->{Objects}->{<object1>}->{Counters}->{<1>} = {
Counter => VALUE
CounterHelpTitleIndex => VALUE
CounterNameTitleIndex => VALUE
CounterSize => VALUE
CounterType => VALUE
DefaultScale => VALUE
DetailLevel => VALUE
Display => STRING
}
$hashref->{Objects}->{<object1>}->{Instances}->{<1>}->{Counters} = {
<1> => HASHREF
<2> => HASHREF
...
<n> => HASHREF
}
$hashref->{Objects}->{<object1>}->{Instances}->{<1>}->{Counters}->{<1>} = {
Counter => VALUE
CounterHelpTitleIndex => VALUE
CounterNameTitleIndex => VALUE
CounterSize => VALUE
CounterType => VALUE
DefaultScale => VALUE
DetailLevel => VALUE
Display => STRING
}
Depending on the CounterType there are calculations to do (see calc.html).
Jutta M. Klebe, jmk@bybyte.de
perl(1).
|
Win32::PerfLib - accessing the Windows NT Performance Counter |