PBS Status HLRBII

"; $header[]='D1::'; $header[]='H1::'; $header[]='H2::'; $header[]='H3::'; $header[]='S1::'; $header[]='S2::'; $header[]='S3::'; $header[]='S4::'; $header[]='S5::'; $header[]='S6::'; $header[]='S7::'; $header[]='S8::'; $header[]='S9::'; $header[]='Q1::'; $header[]='UP::'; # #for ($i=0;$i<=$no_of_headers;$i++) { # print "defined headers:: $header[$i]
"; #} #echo "


"; # # # header counter # $counter_d1=0; $counter_h1=0; $counter_h2=0; $counter_h3=0; $counter_s1=0; $counter_s2=0; $counter_s3=0; $counter_s4=0; $counter_s5=0; $counter_s6=0; $counter_s7=0; $counter_s8=0; $counter_s9=0; $counter_q1=0; $counter_up=0; # $slots_all=0; # #show_vars(); #exit; # #if (!$arr=file("/afs/lrz/common/betriebszustand/hlrb2-extern/batch_queues/OUTPUT.hlrb2_redesign")) { if (!$arr=file("/nfs/web_lrz/hls-stat/extern/htdocs/hlrb2/PBSPro/OUTPUT")){ echo " file not found
"; exit; } # # # #echo "

"; $number_of_lines=count($arr); # #echo "number of lines $number_of_lines

"; for ($i=0;$i<$number_of_lines;$i++) { $j=$i+1; #echo "line:: $j :: $arr[$i]
"; $number_of_args=sscanf($arr[$i],"%s",$was_ist_das); #echo "header:: $was_ist_das
"; # # # # echo ""; switch ($was_ist_das) { case "D1::" : $counter_d1 ++; list($header[$counter_d1],$weekday[$counter_d1],$month[$counter_d1],$day[$counter_d1],$present_time[$counter_d1],$time_zone[$counter_d1],$year[$counter_d1])=sscanf($arr[$i],"%s %s %s %s %s %s %s"); $now_time=gettimeofday(); $my_sec= $now_time["sec"]; $time_broken=explode(":",$present_time[$counter_d1]); $string_full=$month[$counter_d1]." ".$day[$counter_d1]." ".$year[$counter_d1]." ".$present_time[$counter_d1]; $report_time=strtotime($string_full); $diff_time=$my_sec-$report_time; $two_hours=7200; if ( $diff_time > $two_hours ) { echo ""; echo "
this report is older than 2 hours:: machine might be down
"; #exit(5); } #show_vars(); break; case "H1::": $counter_h1 ++; $uptime[$counter_h1]=substr($arr[$i],5); # echo ""; break; case "H2::": $counter_h2 ++; $rest_string=substr($arr[$i],5); list($host[$counter_h2],$ncpus_for_pbs[$counter_h2],$ncpus_used_by_pbs[$counter_h2])=sscanf($rest_string,"%s %d %d"); # printf(">
",$host[$counter_h2],$ncpus_for_pbs[$counter_h2],$ncpus_used_by_pbs[$counter_h2]); break; case "H3::": # # not used any more; all relevant info now in H2 # $counter_h3 ++; # $rest_string=substr($arr[$i],5); # list($host[$counter_h3],$ncpus_used_by_pbs[$counter_h3])=sscanf($rest_string,"%s %d"); # printf(">",$host[$counter_h2],$ncpus_for_pbs[$counter_h2],$ncpus_used_by_pbs[$counter_h2]); break; case "S1::": $counter_s1 ++; #$i= (int) $counter_s1; $rest_string=substr($arr[$i],43); list($running_jobs[$counter_s1],$used_cpus[$counter_s1])=sscanf($rest_string,"%d %d"); # printf("",$running_jobs[$counter_s1],$used_cpus[$counter_s1]); break; case "S2::": $counter_s2 ++; $rest_string=substr($arr[$i],43); list($queued_jobs[$counter_s2],$requested_cpus[$counter_s2])=sscanf($rest_string,"%d %d"); # printf("",$queued_jobs[$counter_s2],$requested_cpus[$counter_s2]); break; case "S3::": $counter_s3 ++; $rest_string=substr($arr[$i],43); list($other_jobs[$counter_s3],$requested_other_cpus[$counter_s3])=sscanf($rest_string,"%d %d"); # printf("",$other_jobs[$counter_s3],$requested_other_cpus[$counter_s3]); break; case "S4::": $counter_s4 ++; $rest_string=substr($arr[$i],43); list($running_jobs_in_queue[$counter_s4],$run_queue[$counter_s4])=sscanf($rest_string,"%d %s"); # printf("",$running_jobs_in_queue[$counter_s4],$run_queue[$counter_s4]); break; case "S5::": $counter_s5 ++; $rest_string=substr($arr[$i],43); list($number_of_cpus_in_queue[$counter_s5],$cpu_queue[$counter_s5])=sscanf($rest_string,"%d %s"); # printf("",$number_of_cpus_in_queue[$counter_s5],$cpu_queue[$counter_s5]); break; case "S6::": $counter_s6 ++; $rest_string=substr($arr[$i],43); list($queued_jobs_in_queue[$counter_s6],$queued_queue[$counter_s6],$queued_cpus_in_queue[$counter_s6])=sscanf($rest_string,"%d %s %d"); # printf("",$queued_jobs_in_queue[$counter_s6],$queued_queue[$counter_s6]); break; case "S7::": $counter_s7 ++; $rest_string=substr($arr[$i],43); list($memory_requested_in_run_queue[$counter_s7],$memory_request_queue[$counter_s7])=sscanf($rest_string,"%d %s"); # printf("",$memory_requested_in_run_queue[$counter_s7],$memory_request_queue[$counter_s7]); break; case "S9::": $counter_s9 ++; $rest_string=substr($arr[$i],43); #echo "
rest string :: $rest_string
"; list($entire_memory_used)=sscanf($rest_string,"%d"); #printf("",$entire_memory_used); break; case "Q1::": $counter_q1 ++; $rest_string=substr($arr[$i],43); list($queue[$counter_q1],$q_hour[$counter_q1],$q_min[$counter_q1],$q_sec[$counter_q1])=sscanf($rest_string,"%s %s %s %s"); # printf("",$queue[$counter_q1],$q_hour[$counter_q1],$q_min[$counter_q1],$q_sec[$counter_q1]); break; case "UP::": $counter_up ++; $rest_string=substr($arr[$i],36); $pos[$counter_up]=strpos($rest_string,'up'); $rest_string=substr($rest_string,$pos[$counter_up]); $pos[$counter_up]=strpos($rest_string,','); # printf("rest_string:: %s
",$rest_string); $uptime[$counter_up]=substr($rest_string,3,$pos[$counter_up]-3); # printf("pos of comma :: %d uptime :: %s
",$pos[$counter_up],$uptime[$counter_up]); break; default: echo "
unknown header found $was_ist_das

"; #die(); } # echo "
Report was generated on $weekday[$counter_d1] $day[$counter_d1] $month[$counter_d1] $year[$counter_d1] :: $present_time[$counter_d1]
Machine Info$uptime[$counter_h1]
%12s cpus for PBS:: %4d cpus used by PBS:: %4d
%12s cpus for PBS:: %4d cpus used by PBS:: %4d
running jobs %8dused cpus %4d
queued jobs %8drequested cpus %4d
other (held) jobs %8drequested cpus %4d
running jobs:: %8din queue:: %s
used cpus :: %8d on node : %s
queued jobs:: %8d in queue:: %s
requested memory :: %8d in queue:: %s
used memory :: %8d GB
waiting time in queue:: %s%s %s %s
"; } # # echo "counters::$counter_d1,$counter_h1,$counter_h2,$counter_s1,$counter_s2,$counter_s3, # $counter_s4,$counter_s5,$counter_s6,$counter_s7,$counter_q1

"; # #show_vars(); # echo "jetzt geht es los

"; #exit; # ################################################################################ # # Summary (date and uptime of nodes) # $jobs_all=$running_jobs[1] + $queued_jobs[1] + $other_jobs[1]; # $part_arr=substr($arr[0],5); echo "
\n"; echo "PBS Usage at $part_arr
\n "; # for($i=1;$i<=$counter_up;$i++) { echo "
Uptime of login node:: $uptime[$i]

\n "; } # ################################################################################ # # first table: summary of Jobs # # echo "

Summary of all PBS HLRB2 jobs

\n"; echo "
Jobs all Running Queued held jobs
Overview $jobs_all $running_jobs[1] $queued_jobs[1] $other_jobs[1]


"; #exit(); # ################################################################################ # # second table: running jobs and slot availability # # for ($i=1;$i<=$counter_h2;$i++) { $slots_all=$slots_all + $ncpus_for_pbs[$i]; } # $slots_all_used=$used_cpus[$counter_s1]; # $slots_available= $slots_all - $slots_all_used; $subscription_factor= number_format(($slots_all_used/$slots_all),2); if ($subscription_factor > 0.85) { $bg_over1=$bgred; } else { $bg_over1=$bgalarm; }; #show_vars(); #echo "color $bg_over1
"; #exit; # echo "Slots Usage and Run Queues

"; echo ""; for($i=1;$i<=$counter_s4;$i++) { echo " "; } echo"
machine used slots available slots free slots (for PBS) subscription factor used memory (GB)
PBS Complex $slots_all_used $slots_all $slots_available $subscription_factor $entire_memory_used
PBS Run Queue running jobs used slots
$run_queue[$i] $running_jobs_in_queue[$i] $number_of_cpus_in_queue[$i]


"; #exit(); ############################################################################################################################ # # table 2 A: slots availability per node # # $bg2=$background_color; $bg4=$background_color; $bga=$background_color; $bg_feld=$bgalarm; # $slots_oversubscription= number_format(($requested_cpus[1]/$slots_all),2); if ($slots_oversubscription >= 1.0 ) {$bg_over=$bgred; } else { $bg_over=$bg_feld; }; #echo "color $bg_over
"; #show_vars(); #exit(); # echo "Slot Availability per Node

\n"; # echo "\n"; echo "\n"; for ($i=1;$i<=6;$i++) { echo " \n"; } echo "\n"; for ($i=1;$i<=19;$i++) { $i_modulo = $i%6; if ($i_modulo == 1) { echo "\n"; } $hostid=$i; $ausgabe_string=""; $bg_cell = $bg4; $percentage= number_format(($ncpus_used_by_pbs[$hostid]/$ncpus_for_pbs[$hostid]),2); $ausgabe_string=sprintf("a%02d:: %3d / %3d / %s ",$hostid,$ncpus_for_pbs[$hostid],$ncpus_used_by_pbs[$hostid],$percentage); if ( $ncpus_for_pbs[$hostid] == 0) { $bg_cell = $bgred;} echo " \n"; // Insert end of row after 6 cells if ($i_modulo == 0) { echo"\n"; } } // Fill table with empty cells for ($i=20;$i<=24;$i++) { $i_modulo = $i%6; echo " \n"; // Insert end of row after 6 cells if ($i_modulo == 0) { echo"\n"; } } // Only insert end of row if # of partitions not a multiple of 6 if ($i_modulo != 0) echo"\n"; echo "
available / used / percentage
$ausgabe_string


\n"; #exit(); if (! ($queued_jobs[1] == 0)) { #if ($queued_jobs != 0) { ############################################################################################################################ # # third table: queued jobs # # $bg2=$background_color; $bg4=$background_color; $bga=$background_color; $bg_feld=$bgalarm; # $slots_oversubscription= number_format(($requested_cpus[1]/$slots_all),2); if ($slots_oversubscription >= 1.0 ) {$bg_over=$bgred; } else { $bg_over=$bg_feld; }; #echo "color $bg_over
"; #show_vars(); # echo "Queued jobs

\n"; # echo""; for ($i=1;$i<=$counter_s6;$i++) { echo " "; } echo "
queue no. of queued jobs available slots requested slots subscription factor
Sum $queued_jobs[1] $slots_all $requested_cpus[1] $slots_oversubscription
$queued_queue[$i] $queued_jobs_in_queue[$i] $queued_cpus_in_queue[$i]


"; #exit(); ############################################################################################################################ # # fourth table: waiting times in queues # # echo "Longest waiting time

"; # echo ""; for ($i=1;$i<=$counter_q1;$i++) { $long_wait=$q_hour[$i]." ".$q_min[$i]; echo " "; } echo "
waiting time by queue type time
$queue[$i] $long_wait

"; } echo "\n"; echo "
\n"; ?>