Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/EnsEMBL/Pipeline/FASTA/EmailSummary.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1f6dce3d34e0 |
---|---|
1 package Bio::EnsEMBL::Pipeline::FASTA::EmailSummary; | |
2 | |
3 use strict; | |
4 use warnings; | |
5 use base qw/Bio::EnsEMBL::Hive::RunnableDB::NotifyByEmail Bio::EnsEMBL::Pipeline::Base/; | |
6 use Bio::EnsEMBL::Hive::Utils qw/destringify/; | |
7 | |
8 sub fetch_input { | |
9 my ($self) = @_; | |
10 | |
11 $self->assert_executable('sendmail'); | |
12 | |
13 my $dump_dna = $self->jobs('DumpDNA'); | |
14 my $copy_dna = $self->jobs('CopyDNA'); | |
15 my $dump_genes = $self->jobs('DumpGenes'); | |
16 my $blast_dna = $self->jobs('BlastDNAIndex'); | |
17 my $blast_gene = $self->jobs('BlastGeneIndex'); | |
18 my $blast_pep = $self->jobs('BlastPepIndex'); | |
19 my $blat = $self->jobs('BlatDNAIndex', 100); | |
20 my $blat_sm = $self->jobs('BlatSmDNAIndex', 100); | |
21 | |
22 my @args = ( | |
23 $dump_dna->{successful_jobs}, | |
24 $dump_dna->{failed_jobs}, | |
25 $copy_dna->{successful_jobs}, | |
26 $copy_dna->{failed_jobs}, | |
27 $dump_genes->{successful_jobs}, | |
28 $dump_genes->{failed_jobs}, | |
29 $blast_dna->{successful_jobs}, | |
30 $blast_dna->{failed_jobs}, | |
31 $blast_gene->{successful_jobs}, | |
32 $blast_gene->{failed_jobs}, | |
33 $blast_pep->{successful_jobs}, | |
34 $blast_pep->{failed_jobs}, | |
35 $blat->{successful_jobs}, | |
36 $blat->{failed_jobs}, | |
37 $blat_sm->{successful_jobs}, | |
38 $blat_sm->{failed_jobs}, | |
39 $self->failed(), | |
40 $self->summary($dump_dna), | |
41 $self->summary($copy_dna), | |
42 $self->summary($dump_genes), | |
43 $self->summary($blast_dna), | |
44 $self->summary($blast_gene), | |
45 $self->summary($blast_pep), | |
46 $self->summary($blat), | |
47 $self->summary($blat_sm), | |
48 ); | |
49 | |
50 my $msg = sprintf(<<'MSG', @args); | |
51 Your FASTA Pipeline has finished. We have: | |
52 | |
53 * %d species with new DNA Dumped (%d failed) | |
54 * %d species with copied DNA (%d failed) | |
55 * %d species with genes dumped (%d failed) | |
56 * %d species with BLAST DNA indexes generated (%d failed) | |
57 * %d species with BLAST GENE indexes generated (%d failed) | |
58 * %d species with BLAST PEPTIDE indexes generated (%d failed) | |
59 * %d species with BLAT DNA generated (%d failed) | |
60 * %d species with BLAT soft-masked DNA generated (%d failed) | |
61 | |
62 %s | |
63 | |
64 =============================================================================== | |
65 | |
66 Full breakdown follows ... | |
67 | |
68 %s | |
69 | |
70 %s | |
71 | |
72 %s | |
73 | |
74 %s | |
75 | |
76 %s | |
77 | |
78 %s | |
79 | |
80 %s | |
81 | |
82 %s | |
83 | |
84 MSG | |
85 $self->param('text', $msg); | |
86 return; | |
87 } | |
88 | |
89 sub jobs { | |
90 my ($self, $logic_name, $minimum_runtime) = @_; | |
91 my $aa = $self->db->get_AnalysisAdaptor(); | |
92 my $aja = $self->db->get_AnalysisJobAdaptor(); | |
93 my $analysis = $aa->fetch_by_logic_name($logic_name); | |
94 my $id = $analysis->dbID(); | |
95 my @jobs = @{$aja->generic_fetch("j.analysis_id =$id")}; | |
96 $_->{input} = destringify($_->input_id()) for @jobs; | |
97 @jobs = | |
98 sort { $a->{input}->{species} cmp $b->{input}->{species} } | |
99 grep { | |
100 if($minimum_runtime) { | |
101 if($minimum_runtime > $_->runtime_msec()) { | |
102 1; | |
103 } | |
104 else { | |
105 0; | |
106 } | |
107 } | |
108 else { | |
109 1; | |
110 } | |
111 } | |
112 @jobs; | |
113 my %passed_species = map { $_->{input}->{species}, 1 } grep { $_->status() eq 'DONE' } @jobs; | |
114 my %failed_species = map { $_->{input}->{species}, 1 } grep { $_->status() eq 'FAILED' } @jobs; | |
115 return { | |
116 analysis => $analysis, | |
117 name => $logic_name, | |
118 jobs => \@jobs, | |
119 successful_jobs => scalar(keys %passed_species), | |
120 failed_jobs => scalar(keys %failed_species), | |
121 }; | |
122 } | |
123 | |
124 | |
125 sub failed { | |
126 my ($self) = @_; | |
127 my $failed = $self->db()->get_AnalysisJobAdaptor()->fetch_all_failed_jobs(); | |
128 if(! @{$failed}) { | |
129 return 'No jobs failed. Congratulations!'; | |
130 } | |
131 my $output = <<'MSG'; | |
132 The following jobs have failed during this run. Please check your hive's error msg table for the following jobs: | |
133 | |
134 MSG | |
135 foreach my $job (@{$failed}) { | |
136 my $analysis = $self->db()->get_AnalysisAdaptor()->fetch_by_dbID($job->analysis_id()); | |
137 my $line = sprintf(q{ * job_id=%d %s(%5d) input_id='%s'}, $job->dbID(), $analysis->logic_name(), $analysis->dbID(), $job->input_id()); | |
138 $output .= $line; | |
139 $output .= "\n"; | |
140 } | |
141 return $output; | |
142 } | |
143 | |
144 my $sorter = sub { | |
145 my $status_to_int = sub { | |
146 my ($v) = @_; | |
147 return ($v->status() eq 'FAILED') ? 0 : 1; | |
148 }; | |
149 my $status_sort = $status_to_int->($a) <=> $status_to_int->($b); | |
150 return $status_sort if $status_sort != 0; | |
151 return $a->{input}->{species} cmp $b->{input}->{species}; | |
152 }; | |
153 | |
154 sub summary { | |
155 my ($self, $data) = @_; | |
156 my $name = $data->{name}; | |
157 my $underline = '~'x(length($name)); | |
158 my $output = "$name\n$underline\n\n"; | |
159 my @jobs = @{$data->{jobs}}; | |
160 if(@jobs) { | |
161 foreach my $job (sort $sorter @{$data->{jobs}}) { | |
162 my $species = $job->{input}->{species}; | |
163 $output .= sprintf(" * %s - job_id=%d %s\n", $species, $job->dbID(), $job->status()); | |
164 } | |
165 } | |
166 else { | |
167 $output .= "No jobs run for this analysis\n"; | |
168 } | |
169 $output .= "\n"; | |
170 return $output; | |
171 } | |
172 | |
173 1; |