#!/usr/bin/perl use strict; use File::Basename; use Env qw(USER); #my $ourproj="k29"; #my $fulljobname; #my $rssmb; #my $vmemmb; my $qout; my $jobid; my $jobstate; my $jobid; my $jobstate; my $owner; my $proj; my $joboutput; my $totcpu; my $cputime; my $wall; my $timelim; my $rsskb; my $vmemkb; my $memlim; my $numcpu; my $jobfskb; my $fslimmb; my $fslimgb; my @output; my $searchstring=$USER; #my $searchterm=$owner; my %switches=(-g => '501', -a => ''); foreach my $options (@ARGV){ $searchstring=$switches{$options}; #d print ("-g switch enabled?\n"); } #open(QSTAT,"qstat.out") or die ("Can't open qstat:$!\n"); #while (){ # my $line=$_; #@output=`ssh -l mbs501 sc qstat -f`; @output=`qstat -f`; my @nqstatout=`nqstat -u $USER`; print (" ID User Proj Job Name CPU WallTime Time Lim RSS vmem memlim fs fslim cpus\n"); foreach my $line (@output){ my $jobidtmp; if ($line =~ /^Job Id:\s+(\d+)\.\w+/){$jobidtmp=$1;} if ($line =~ /job_state =\s+(\w+)/) {$jobstate=$1;} elsif ($line =~ /Job_Owner = (\w\w\w\w\w\w)/) {$owner=$1;} elsif ($line =~ /Account_Name = (\w\w\w)/) {$proj=$1;} elsif ($line =~ /Output_Path = \w+:\s*(\/.+)/) {$joboutput=$1;} elsif ($line =~ /resources_used.cput = (\d+:\d\d:\d\d)/) {$cputime=$1;} elsif ($line =~ /resources_used.walltime = (\d+:\d\d:\d\d)/){$wall=$1;} elsif ($line =~ /Resource_List.walltime = (\d+:\d\d:\d\d)/) {$timelim=$1;} elsif ($line =~ /resources_used.mem = (\d+)kb/) {$rsskb=$1;} elsif ($line =~ /resources_used.vmem = (\d+)kb/) {$vmemkb=$1;} elsif ($line =~ /Resource_List.vmem = (\d+)mb/) {$memlim=$1;} elsif ($line =~ /Resource_List.ncpus = (\d+)/) {$numcpu=$1;} elsif ($line =~ /resources_used.jobfs = (\d+)kb/) {$jobfskb=$1;} elsif ($line =~ /Resource_List.jobfs = (\d+)mb/) {$fslimmb=$1;} elsif ($line =~ /Resource_List.jobfs = (\d+)gb/) {$fslimgb=$1;} # elsif ($line=~/^\s*\n/ && ){ # elsif ($line=~/^\s*\n/){ # my $jobidtmp; elsif ($line =~ /^Job Id:\s+(\d+)\.\w+/){ my $jobidtmp=$1; #d print ("jobid=$jobid jobidtmp=$jobidtmp\n"); # if ($proj=~/$ourproj/){ if ($owner=~/$searchstring/){ my $fulljobname=basename($joboutput,".batch"); my $rssmb; my $vmemmb; my $jobfsgb; if ($vmemkb != 0){ $rssmb=$rsskb/1024; $vmemmb=$vmemkb/1024; } unless ($fslimgb != 0){$fslimgb=$fslimmb/1024;} $jobfsgb=$jobfskb/1024/1024; #d print("jobid=$jobid jobstate=$jobstate owner=$owner\n"); $totcpu=(time_percent($cputime,$wall)/$numcpu); write; format STDOUT = @####### @<@<<<<<<@<<<@<<<<<<<<<<<<<<<<<<<<<<< @###@>>>>>>>> @>>>>>>>> @#### @#### @#### @### @### @## $jobid,$jobstate,$owner,$proj,$fulljobname,$totcpu,$wall,$timelim,$rssmb,$vmemmb,$memlim,$jobfsgb,$fslimgb,$numcpu . undef $totcpu; undef $rssmb; undef $vmemmb; undef $jobfsgb; } undef $jobid; undef $jobstate; undef $owner; undef $proj; undef $joboutput; undef $wall; undef $timelim; undef $rsskb; undef $vmemkb; undef $memlim; undef $numcpu; undef $jobfskb; undef $fslimgb; undef $fslimmb; $jobid=$jobidtmp; } } my @qSum; foreach my $line (@nqstatout){ if ($line =~ /^\d+ running jobs \(\d+ suspended\), \d+ queued jobs, \d+ cpus in use/){ push (@qSum,$line); } } print STDOUT $qSum[0]; sub time_percent{ my $cpu=@_[0]; my $wall=@_[1]; #d print ("cpu=$cpu wall=$wall\n"); my $cpusecs=conv2sec($cpu); my $wallsecs=conv2sec($wall); my $percent_cpu; #d print ("cpusecs=$cpusecs wallsecs=$wallsecs\n"); if ($wallsecs>0){ $percent_cpu=$cpusecs/$wallsecs*100; } else { $percent_cpu=0; } return ($percent_cpu); } sub conv2sec{ # Expecting time in the format of hh:mm:ss # Convert to seconds my $time=@_[0]; my @ind_time=split(/:/,$time); my $hours=@ind_time[0]; my $min=@ind_time[1]; my $sec=@ind_time[2]; #d print("hours=$hours min=$min sec=$sec\n"); my $total_secs=$sec+60*$min+3600*$hours; return ($total_secs); }