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;