diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/variant_effect_predictor/Bio/EnsEMBL/Pipeline/FASTA/EmailSummary.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,173 @@
+package Bio::EnsEMBL::Pipeline::FASTA::EmailSummary;
+
+use strict;
+use warnings;
+use base qw/Bio::EnsEMBL::Hive::RunnableDB::NotifyByEmail Bio::EnsEMBL::Pipeline::Base/;
+use Bio::EnsEMBL::Hive::Utils qw/destringify/;
+
+sub fetch_input {
+  my ($self) = @_;
+  
+  $self->assert_executable('sendmail');
+  
+  my $dump_dna = $self->jobs('DumpDNA');
+  my $copy_dna = $self->jobs('CopyDNA');
+  my $dump_genes = $self->jobs('DumpGenes');
+  my $blast_dna = $self->jobs('BlastDNAIndex');
+  my $blast_gene = $self->jobs('BlastGeneIndex');
+  my $blast_pep = $self->jobs('BlastPepIndex');
+  my $blat = $self->jobs('BlatDNAIndex', 100);
+  my $blat_sm = $self->jobs('BlatSmDNAIndex', 100);
+    
+  my @args = (
+    $dump_dna->{successful_jobs},
+    $dump_dna->{failed_jobs},
+    $copy_dna->{successful_jobs},
+    $copy_dna->{failed_jobs},
+    $dump_genes->{successful_jobs},
+    $dump_genes->{failed_jobs},
+    $blast_dna->{successful_jobs},
+    $blast_dna->{failed_jobs},
+    $blast_gene->{successful_jobs},
+    $blast_gene->{failed_jobs},
+    $blast_pep->{successful_jobs},
+    $blast_pep->{failed_jobs},
+    $blat->{successful_jobs},
+    $blat->{failed_jobs},
+    $blat_sm->{successful_jobs},
+    $blat_sm->{failed_jobs},
+    $self->failed(),
+    $self->summary($dump_dna),
+    $self->summary($copy_dna),
+    $self->summary($dump_genes),
+    $self->summary($blast_dna),
+    $self->summary($blast_gene),
+    $self->summary($blast_pep),
+    $self->summary($blat),
+    $self->summary($blat_sm),
+  );
+  
+  my $msg = sprintf(<<'MSG', @args);
+Your FASTA Pipeline has finished. We have:
+
+  * %d species with new DNA Dumped (%d failed)
+  * %d species with copied DNA (%d failed)
+  * %d species with genes dumped (%d failed)
+  * %d species with BLAST DNA indexes generated (%d failed)
+  * %d species with BLAST GENE indexes generated (%d failed)
+  * %d species with BLAST PEPTIDE indexes generated (%d failed)
+  * %d species with BLAT DNA generated (%d failed)
+  * %d species with BLAT soft-masked DNA generated (%d failed)
+
+%s
+
+===============================================================================
+
+Full breakdown follows ...
+
+%s
+
+%s
+
+%s
+
+%s
+
+%s
+
+%s
+
+%s
+
+%s
+
+MSG
+  $self->param('text', $msg);
+  return;
+}
+
+sub jobs {
+  my ($self, $logic_name, $minimum_runtime) = @_;
+  my $aa = $self->db->get_AnalysisAdaptor();
+  my $aja = $self->db->get_AnalysisJobAdaptor();
+  my $analysis = $aa->fetch_by_logic_name($logic_name);
+  my $id = $analysis->dbID();
+  my @jobs = @{$aja->generic_fetch("j.analysis_id =$id")};
+  $_->{input} = destringify($_->input_id()) for @jobs;
+  @jobs = 
+    sort { $a->{input}->{species} cmp $b->{input}->{species} }
+    grep { 
+      if($minimum_runtime) {
+        if($minimum_runtime > $_->runtime_msec()) {
+          1;
+        }
+        else {
+          0;
+        }
+      }
+      else {
+        1;
+      }
+    }
+    @jobs;
+  my %passed_species = map { $_->{input}->{species}, 1 } grep { $_->status() eq 'DONE' } @jobs;
+  my %failed_species = map { $_->{input}->{species}, 1 } grep { $_->status() eq 'FAILED' } @jobs;
+  return {
+    analysis => $analysis,
+    name => $logic_name,
+    jobs => \@jobs,
+    successful_jobs => scalar(keys %passed_species),
+    failed_jobs => scalar(keys %failed_species),
+  };
+}
+
+
+sub failed {
+  my ($self) = @_;
+  my $failed = $self->db()->get_AnalysisJobAdaptor()->fetch_all_failed_jobs();
+  if(! @{$failed}) {
+    return 'No jobs failed. Congratulations!';
+  }
+  my $output = <<'MSG';
+The following jobs have failed during this run. Please check your hive's error msg table for the following jobs:
+
+MSG
+  foreach my $job (@{$failed}) {
+    my $analysis = $self->db()->get_AnalysisAdaptor()->fetch_by_dbID($job->analysis_id());
+    my $line = sprintf(q{  * job_id=%d %s(%5d) input_id='%s'}, $job->dbID(), $analysis->logic_name(), $analysis->dbID(), $job->input_id());
+    $output .= $line;
+    $output .= "\n";
+  }
+  return $output;
+}
+
+my $sorter = sub {
+  my $status_to_int = sub {
+    my ($v) = @_;
+    return ($v->status() eq 'FAILED') ? 0 : 1;
+  };
+  my $status_sort = $status_to_int->($a) <=> $status_to_int->($b);
+  return $status_sort if $status_sort != 0;
+  return $a->{input}->{species} cmp $b->{input}->{species};
+};
+
+sub summary {
+  my ($self, $data) = @_;
+  my $name = $data->{name};
+  my $underline = '~'x(length($name));
+  my $output = "$name\n$underline\n\n";
+  my @jobs = @{$data->{jobs}};
+  if(@jobs) {
+    foreach my $job (sort $sorter @{$data->{jobs}}) {
+      my $species = $job->{input}->{species};
+      $output .= sprintf("  * %s - job_id=%d %s\n", $species, $job->dbID(), $job->status());
+    }
+  }
+  else {
+    $output .= "No jobs run for this analysis\n";
+  }
+  $output .= "\n";
+  return $output;
+}
+
+1;
\ No newline at end of file