#! perl

 # ======================================================================
 #   $Author: Jmk $
 #   $Date: 19.05.98 7:12 $
 #   $Archive: /Jmk/scripts/saa/process.pl $
 #   $Revision: 2 $
 # ======================================================================

 # shows the task list like the task manager but of any computer

 use Win32::PerfLib;
 ($server) = @ARGV;
 #Win32::PerfLib::GetCounterNames($server, \%counter);
 #%r_counter = map { $counter{$_} => $_ } keys %counter;
 #$process_obj = $r_counter{Process};
 #$process_id = $r_counter{'ID Process'};
 #$processor_time = $r_counter{'% Processor Time'};

 $process_obj = 230;
 $process_id = 784;
 $processor_time = 6;
 $elapsed = 684;
 $memory = 180;
 $page_faults = 28;
 $virtual_memory = 186;
 $priority = 682;
 $threads = 680;

 $perflib = new Win32::PerfLib($server);
 $proc_ref0 = {};
 $proc_ref1 = {};
 $perflib->GetObjectList($process_obj, $proc_ref0);
 sleep 5;
 $perflib->GetObjectList($process_obj, $proc_ref1);
 $perflib->Close();
 $instance_ref0 = $proc_ref0->{Objects}->{$process_obj}->{Instances};
 $instance_ref1 = $proc_ref1->{Objects}->{$process_obj}->{Instances};
 foreach $p (keys %{$instance_ref0})
 {
      $counter_ref0 = $instance_ref0->{$p}->{Counters};
     $counter_ref1 = $instance_ref1->{$p}->{Counters};
     foreach $i (keys %{$counter_ref0})
     {
         next if $instance_ref0->{$p}->{Name} eq "_Total";
         if($counter_ref0->{$i}->{CounterNameTitleIndex} == $process_id)
         {
             $process{$counter_ref0->{$i}->{Counter}} =
               $instance_ref0->{$p}->{Name};
             $id{$counter_ref0->{$i}->{Counter}} = $p;
         }
         elsif($counter_ref0->{$i}->{CounterNameTitleIndex} == $processor_time)
         {
             $Numerator0 = $counter_ref0->{$i}->{Counter};
             $Denominator0 = $proc_ref0->{PerfTime100nSec};
             $Numerator1 = $counter_ref1->{$i}->{Counter};
             $Denominator1 = $proc_ref1->{PerfTime100nSec};
             $proc_time{$p} = ($Numerator1 - $Numerator0) /
               ($Denominator1 - $Denominator0 ) * 100;
             $cputime{$p} = int($counter_ref1->{$i}->{Counter} / 10000000);
         }
         elsif($counter_ref0->{$i}->{CounterNameTitleIndex} == $memory)
         {
             $memory{$p} = int($counter_ref0->{$i}->{Counter} / 1024);
         }
         elsif($counter_ref0->{$i}->{CounterNameTitleIndex} == $page_faults)
         {
             $page_faults{$p} = $counter_ref1->{$i}->{Counter};
         }
         elsif($counter_ref0->{$i}->{CounterNameTitleIndex} == $virtual_memory)
         {
             $virtual_memory{$p} = int($counter_ref0->{$i}->{Counter} / 1024);
         }
         elsif($counter_ref0->{$i}->{CounterNameTitleIndex} == $priority)
         {
             $priority{$p} = $counter_ref0->{$i}->{Counter};
         }
         elsif($counter_ref0->{$i}->{CounterNameTitleIndex} == $threads)
         {
             $threads{$p} = $counter_ref0->{$i}->{Counter};
         }
     }
 }
 print " PID Process         CPU   CPU-Time     Memory       PF   Virt.Mem Priority Thr\n";
 #   0 Idle          93.73   20:51:40       16 K        1        0 K Unknown    1
 foreach $p (sort { $a <=> $b } keys %process)
 {
     $id = $id{$p};
     $seconds = $cputime{$id};
     $hour = int($seconds / 3600);
     $seconds -= $hour * 3600;
     $minute = int($seconds / 60);
     $seconds -= $minute * 60;
     if ($priority{$id} > 15)
     {
         $prio = "Realtime";
     }
     elsif ($priority{$id} > 10 )
     {
         $prio = "High";
     }
     elsif ($priority{$id} > 5 )
     {
         $prio = "Normal";
     }
     elsif ($priority{$id} > 0 )
     {
         $prio = "Low";
     }
     else
     {
         $prio = "Unknown";
     }
     printf("% 4d %-14s%5.2f  % 3d:%02d:%02d % 8d K % 8d % 8d K %8s % 3d\n",
            $p, $process{$p}, $proc_time{$id}, $hour, $minute, $seconds,
            $memory{$id}, $page_faults{$id}, $virtual_memory{$id},
            $prio, $threads{$id});
 }


 # ======================================================================
 #   $History: process.pl $
 # 
 # *****************  Version 2  *****************
 # User: Jmk          Date: 19.05.98   Time: 7:12
 # Updated in $/Jmk/scripts/saa
 # some comments added
 # ======================================================================

