[Bio] / FortyEight / PipelineUtils.pm Repository:
ViewVC logotype

Annotation of /FortyEight/PipelineUtils.pm

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : olson 1.1
2 :     package PipelineUtils;
3 :     use strict;
4 :    
5 :     use base 'Exporter';
6 :    
7 : olson 1.2 our @EXPORT = qw(sge_submit get_sge_deadline_arg find_fs_resource get_sge_priority);
8 : olson 1.1
9 :     sub sge_submit
10 :     {
11 :     my($meta, $sge_args, $cmd) = @_;
12 :    
13 :     my @sge_opts;
14 :     if (my $res = $meta->get_metadata("lustre_resource"))
15 :     {
16 :     push @sge_opts, -l => $res;
17 :     }
18 : olson 1.2 #
19 :     # Require any node we run on to have the rast_qualified attribute.
20 :     # This makes sure the operating environment on the node
21 :     # has everything we need.
22 :     #
23 :     push(@sge_opts, -l => "rast_qualified");
24 : olson 1.1 push(@sge_opts, get_sge_deadline_arg($meta));
25 :     push(@sge_opts, get_sge_user_priority($meta));
26 :     if (my $res = $meta->get_metadata("sge_priority"))
27 :     {
28 :     if (ref($res) eq 'ARRAY')
29 :     {
30 :     push @sge_opts, @$res;
31 :     }
32 :     elsif (!ref($res))
33 :     {
34 :     push @sge_opts, split(/\s+/, $res);
35 :     }
36 :     }
37 :    
38 :     my $sge_cmd = "qsub @sge_opts $sge_args $cmd";
39 :    
40 :     $meta->add_log_entry($0, $sge_cmd);
41 :    
42 :     if (!open(Q, "$sge_cmd 2>&1 |"))
43 :     {
44 :     die "Qsub failed: $!";
45 :     }
46 :     my $sge_job_id;
47 :     my $submit_output;
48 :     while (<Q>)
49 :     {
50 :     $submit_output .= $_;
51 :     print "Qsub: $_";
52 :     if (/Your\s+job\s+(\d+)/)
53 :     {
54 :     $sge_job_id = $1;
55 :     }
56 :     elsif (/Your\s+job-array\s+(\d+)/)
57 :     {
58 :     $sge_job_id = $1;
59 :     }
60 :     }
61 :     $meta->add_log_entry($0, ["qsub_output", $submit_output]);
62 :     if (!close(Q))
63 :     {
64 :     die "Qsub close failed: $!";
65 :     }
66 :    
67 :     if (!$sge_job_id)
68 :     {
69 :     die "did not get job id from qsub";
70 :     }
71 :    
72 :     return $sge_job_id;
73 :     }
74 :    
75 :     sub get_sge_deadline_arg
76 :     {
77 :     my($meta) = @_;
78 :     if ($FIG_Config::use_deadline_scheduling)
79 :     {
80 :     my $dl = $meta->get_metadata("sge_deadline");
81 :     if ($dl ne '')
82 :     {
83 :     if (wantarray)
84 :     {
85 :     return("-dl", $dl);
86 :     }
87 :     else
88 :     {
89 :     return "-dl $dl";
90 :     }
91 :     }
92 :     }
93 :     return;
94 :     }
95 :    
96 :     sub get_sge_user_priority
97 :     {
98 :     my($meta) = @_;
99 :     if ($FIG_Config::use_priority_scheduling)
100 :     {
101 :     my $prio = $meta->get_metadata("sge_priority");
102 :     if (defined($prio))
103 :     {
104 :     return $prio;
105 :     }
106 :     else
107 :     {
108 :     return;
109 :     }
110 :     }
111 :     }
112 :    
113 :     sub find_fs_resource
114 :     {
115 :     my($job) = @_;
116 :     my $fs_resource;
117 :     if (my $fileserver = $job->find_job_fileserver())
118 :     {
119 :     if ($fileserver eq 'rast.mcs.anl.gov')
120 :     {
121 :     $fs_resource = "-l local_rast";
122 :     }
123 :     elsif ($fileserver eq 'cgat.mcs.anl.gov')
124 :     {
125 :     $fs_resource = "-l local_cgat";
126 :     }
127 :     elsif ($fileserver eq 'lustre')
128 :     {
129 :     $fs_resource = "-l lustre_lustre1";
130 :     }
131 :     }
132 :    
133 :     return $fs_resource;
134 :     }
135 : olson 1.3
136 :     sub read_qstat
137 :     {
138 :     if (!open(Q, "qstat -f -s prs -u rastprod |"))
139 :     {
140 :     warn "Could not read queue status: $!\n";
141 :     return;
142 :     }
143 :    
144 :     my $qstat = {};
145 :     my $finished;
146 :     my $queue;
147 :     my $host;
148 :     while (<Q>)
149 :     {
150 :    
151 :     if (/FINISHED JOBS/)
152 :     {
153 :     $finished++;
154 :     undef $queue;
155 :     undef $host;
156 :     next;
157 :     }
158 :     if (/^([^@]+)@(\S+)/)
159 :     {
160 :     $queue = $1;
161 :     $host = $2;
162 :     }
163 :     elsif (/^----/)
164 :     {
165 :     undef $queue;
166 :     undef $host;
167 :     }
168 :    
169 :     if (/^(\d+)\s+(.*)/)
170 :     {
171 :     my $jobid = $1;
172 :     my $rest = $2;
173 :     my($uptime, $job, $user, $status, $date, $time, $slots) = split(/\s+/, $rest);
174 :     # print "Got job=$jobid status=$status user=$user date=$date time=$time finished=$finished\n";
175 :     $status = "done" if $finished;
176 :     my $ent = { id => $jobid, status => $status, user => $user, date => $date, time => $time, name => $job };
177 :    
178 :     $ent->{queue} = $queue if $queue;
179 :     $ent->{host} = $host if $host;
180 :    
181 :     $qstat->{$jobid} = $ent;
182 :     }
183 :     }
184 :     return $qstat;
185 :     }
186 :    
187 :     1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3