[Bio] / FortyEightMeta / pull_sge_accounting_for_jobs.pl Repository:
ViewVC logotype

Annotation of /FortyEightMeta/pull_sge_accounting_for_jobs.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download) (as text)

1 : olson 1.1
2 :     #
3 :     # Read and parse the SGE accounting data; then run through the
4 :     # jobs and summarize the cpu use accumulated for each, as well as the
5 :     # job size.
6 :     #
7 :    
8 :     use strict;
9 :     use Data::Dumper;
10 :     use GenomeMeta;
11 :    
12 :     our %accounting;
13 :     our %total;
14 :    
15 :     our %mg_job;
16 :    
17 :     our $job_base_dir = "/vol/rast-prod/jobs.new/jobs";
18 :     #our $job_base_dir = "/vol/rast-prod/jobs";
19 :     #our $job_base_dir = "/vol/metagenome-48-hour/Jobs.prod";
20 :     opendir(D, $job_base_dir) or die "cannot open jobdir $job_base_dir\n";
21 :    
22 :     read_accounting();
23 :    
24 :     while (my $f = readdir(D))
25 :     {
26 :     my $job_dir = "$job_base_dir/$f";
27 :     next unless $f =~ /^\d+$/ and -d $job_dir;
28 :     next unless -f "$job_dir/DONE";
29 :     next if -f "$job_dir/ERROR";
30 :     print STDERR "$f\n";
31 :     process_job($f, $job_dir);
32 :     }
33 :    
34 :     for my $j (sort { $a <=> $b } keys %mg_job)
35 :     {
36 :     my $jh = $mg_job{$j};
37 :     print join("\t", $j, $jh->{size}, $jh->{wallclock}, $jh->{user}, $jh->{slots}), "\n";
38 :     }
39 :    
40 :     sub process_job
41 :     {
42 :     my($job, $job_dir) = @_;
43 :     my $genome = `cat $job_dir/GENOME_ID`;
44 :     chomp $genome;
45 :    
46 :     my $meta = new GenomeMeta(undef, "$job_dir/meta.xml");
47 :    
48 :     if (!$meta)
49 :     {
50 :     warn "no meta for $job_dir ($!)\n";
51 :     return;
52 :     }
53 :    
54 :     # my $data = $meta->get_metadata("preprocess.fasta_file");
55 :     my $data = "$job_dir/raw/$genome/contigs";
56 :     my $size = -s $data;
57 :     if (!$size)
58 :     {
59 :     warn "no size for data file $data\n";
60 :     return;
61 :     }
62 :    
63 :     $mg_job{$job}->{size} = $size;
64 :    
65 :     for my $k (grep { /sge_(job_)?id/ } $meta->get_metadata_keys)
66 :     {
67 :     my $v = $meta->get_metadata($k);
68 :     if (!ref($v))
69 :     {
70 :     $v = [$v];
71 :     }
72 :    
73 :     for my $sge_id (@$v)
74 :     {
75 :     do_job_sge($job, $job_dir, $sge_id);
76 :     }
77 :     }
78 :     }
79 :    
80 :     sub do_job_sge
81 :     {
82 :     my($job, $job_dir, $sge_job) = @_;
83 :    
84 :     my $stat = $total{$sge_job};
85 :     if ($stat)
86 :     {
87 :     map { $mg_job{$job}->{$_} += $stat->{$_} } keys(%$stat);
88 :     }
89 :     }
90 :    
91 :     sub read_accounting
92 :     {
93 :     for my $file (<$ENV{SGE_ROOT}/$ENV{SGE_CELL}/common/accounting*>)
94 :     {
95 :     open(F, "<$file") or die "cannot read accounting file $file: $!";
96 :     while (<F>)
97 :     {
98 :     chomp;
99 :     my @a = split(/:/);
100 :     my($q, $host, $job_name, $job, $start, $end, $failed, $wallclock, $user, $slots, $task_id) =
101 :     @a[0, 1, 4, 5, 9, 10, 11, 13, 14, 34, 35];
102 :    
103 :     next if $failed;
104 :    
105 :     # print "job=$job q=$q slots=$slots task=$task_id\n";
106 :    
107 :     my $rec = { q => $q, host => $host, name => $job_name,
108 :     job => $job, start => $start, end => $end,
109 :     wallclock => $wallclock, user => $user, slots => $slots, task_id=> $task_id};
110 :     push @{$accounting{$job}}, $rec;
111 :    
112 :     for my $k (qw(wallclock user slots))
113 :     {
114 :     $total{$job}->{$k} += $rec->{$k};
115 :     }
116 :     }
117 :    
118 :     }
119 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3