[Bio] / MGRASTBackend / MGRASTPipeline.pm Repository:
ViewVC logotype

Annotation of /MGRASTBackend/MGRASTPipeline.pm

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : jared 1.1 package MGRASTBackend::MGRASTPipeline;
2 :    
3 :     use ClusterStage;
4 :     use Filesys::DfPortable;
5 :     use Mail::Mailer;
6 :     use Job48;
7 :     use FIG;
8 :    
9 :     use strict;
10 :     use warnings;
11 :    
12 :     use base qw( Exporter );
13 :     our @EXPORT = qw ( check_free_space get_jobs get_pipeline_for_job process_upload mark_job_done);
14 :    
15 :     1;
16 :    
17 :    
18 :     ########################################
19 :     #
20 :     # Basic methods
21 :     #
22 :     #########################################
23 :    
24 :     sub check_free_space {
25 :     my ($job_spool_dir) = @_;
26 :     my $df = dfportable($job_spool_dir, 1024*1024*1024);
27 :     if (!defined($df)){
28 :     die "dfportable call failed on $job_spool_dir: $!";
29 :     }
30 :     if ($df->{bavail} < 10){
31 :     die sprintf "Not enough free space available (%.1f GB) in $job_spool_dir", $df->{bavail};
32 :     }
33 :     return;
34 :     }
35 :    
36 :     sub get_jobs {
37 :     my ($job_spool_dir) = @_;
38 :     opendir(D, $job_spool_dir) or die "Cannot open job directory $job_spool_dir: $!\n";
39 :     my @jobs = sort { $a <=> $b } grep { /^\d+$/ and -d "$job_spool_dir/$_" } readdir(D);
40 :     return \@jobs;
41 :     }
42 :    
43 :     sub get_pipeline_for_job {
44 :     my ($job_dir) = @_;
45 : jared 1.4 if(! -f "$job_dir/PIPELINE"){
46 : jared 1.1 return &{&pipeline("default")};
47 :     } else {
48 : jared 1.4 my $pipe = &FIG::file_head("$job_dir/PIPELINE", 1);
49 : jared 1.1 chomp $pipe;
50 :     if (ref(&pipeline($pipe)) eq 'CODE'){
51 :     return &{&pipeline($pipe)};
52 :     } else {
53 :     return undef;
54 :     }
55 :     }
56 :     }
57 :    
58 :     ########################################
59 :     #
60 :     # Pipelines
61 :     #
62 :     #########################################
63 :    
64 :     sub pipeline {
65 :     my ($name) = @_;
66 :     my %pipelines = (
67 :     default => \&default_process,
68 : arodri7 1.9 figfams => \&figfam_process,
69 : jared 1.1 );
70 :    
71 :     if(defined $pipelines{$name}){
72 :     return $pipelines{$name};
73 :     } else {
74 : jared 1.7 return $pipelines{default};
75 : jared 1.1 }
76 :     }
77 :    
78 :     sub default_process {
79 :     return [[uploaded => \&process_upload],
80 :     [preprocess => ClusterStage->new('mg_preprocess',
81 :     sge_flag => "-l mg_preprocess",
82 :     )],
83 :     [sims => ClusterStage->new('mg_sims',
84 :     start_locally => 1,
85 :     )],
86 :     [check_sims => ClusterStage->new('mg_check_sims',
87 :     start_locally => 1,
88 :     )],
89 :     [create_seed_org => ClusterStage->new('mg_create_seed_org',
90 :     sge_flag => "-l mg_postproc_taxa_sims",
91 :     )],
92 : jared 1.6 [export_to_genbank => ClusterStage->new('mg_sims_to_gff_and_gbk',
93 : jared 1.3 start_locally => 1,
94 : jared 1.1 )],
95 :     ];
96 :     }
97 :    
98 : arodri7 1.8 sub figfam_process {
99 :     return [[uploaded => \&process_upload],
100 :     [preprocess => ClusterStage->new('mg_preprocess',
101 :     sge_flag => "-l mg_preprocess",
102 :     )],
103 :     [dereplication => ClusterStage->new('mg_check_sequence_distribution',
104 :     start_locally => 1,
105 :     )],
106 :     [figfam_server => ClusterStage->new('mg_figfam_server',
107 :     sge_flag => "-l mg_ff_server",
108 :     )],
109 : arodri7 1.10 [figfam_server => ClusterStage->new('mg_check_figfam_server',
110 :     start_locally => 1,
111 :     )],
112 : arodri7 1.8 [figfam_sims => ClusterStage->new('mg_figfam_sims',
113 :     start_locally => 1,
114 :     )],
115 :     [check_figfam_sims => ClusterStage->new('mg_check_figfam_sims',
116 :     start_locally => 1,
117 :     )],
118 :     [non_figfam_sims => ClusterStage->new('mg_non_figfam_sims',
119 :     start_locally => 1,
120 :     )],
121 :     [check_non_figfam_sims => ClusterStage->new('mg_check_non_figfam_sims',
122 :     start_locally => 1,
123 :     )],
124 : arodri7 1.10 [sims => ClusterStage->new('mg_non_seed_sims',
125 : arodri7 1.8 start_locally => 1,
126 :     )],
127 : arodri7 1.10 [check_sims => ClusterStage->new('mg_check_non_seed_sims',
128 : arodri7 1.8 start_locally => 1,
129 :     )],
130 :     [create_seed_org => ClusterStage->new('mg_create_seed_org',
131 :     sge_flag => "-l mg_postproc_taxa_sims",
132 :     )],
133 :     [export_to_genbank => ClusterStage->new('mg_sims_to_gff_and_gbk',
134 :     start_locally => 1,
135 :     )],
136 :     ];
137 :     }
138 :    
139 :    
140 : jared 1.1 ########################################
141 :     #
142 :     # Pipeline Stages
143 :     #
144 :     #########################################
145 :    
146 :     sub process_upload
147 :     {
148 :     return;
149 :     }
150 :    
151 :     sub mark_job_done
152 :     {
153 :    
154 :     print "Attempting to Email user\n";
155 : jared 1.2
156 : jared 1.1 my($job_id, $job_dir, $meta, $req) = @_;
157 :    
158 :     if (open(D, ">$job_dir/DONE"))
159 :     {
160 :     print D time . "\n";
161 :     close(D);
162 :     }
163 :     else
164 :     {
165 :     warn "Error opening $job_dir/DONE: $!\n";
166 :     }
167 :    
168 :     my $job = new Job48($job_id);
169 :    
170 :     my $userobj = $job->getUserObject();
171 :    
172 :     print "setting meta $meta\n";
173 :     $meta->set_metadata("status.final","complete");
174 :     print "setting meta $meta .. done\n";
175 :    
176 :     if ($userobj)
177 :     {
178 :     my $email = $userobj->email();
179 :     my $name = join(" " , $userobj->firstname(), $userobj->lastname());
180 :    
181 :     my $full = $name ? "$name <$email>" : $email;
182 :     print "send email to $full\n";
183 :    
184 :     my $mail = Mail::Mailer->new();
185 :     $mail->open({
186 :     To => $full,
187 :     From => 'Metagenome RAST server <mg-rast@mcs.anl.gov>',
188 :     Subject => "MG-RAST job completed"
189 :     });
190 :    
191 :     my $gname = $job->genome_name;
192 :     my $entry = $FIG_Config::fortyeight_home;
193 :     $entry = "http://metagenomics.nmpdr.org/" if $entry eq '';
194 :     print $mail "The annotation job that you submitted for $gname has completed.\n";
195 :     print $mail "It is available for browsing at $entry as job number $job_id.\n";
196 :     $mail->close();
197 :     }
198 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3