diff --git a/scripts/seed_pipeline.pl b/scripts/seed_pipeline.pl index 924ec16f2e159dc5ddbfecf0225ed259ccfdd5d5..aa2325f021857ff8aa6c1e18e35cc25692733fcc 100755 --- a/scripts/seed_pipeline.pl +++ b/scripts/seed_pipeline.pl @@ -9,65 +9,84 @@ use Bio::EnsEMBL::Hive::DBSQL::DBAdaptor; use Bio::EnsEMBL::Hive::DBSQL::AnalysisJobAdaptor; use Bio::EnsEMBL::Hive::Utils ('destringify', 'stringify', 'script_usage'); -my ($reg_conf, $reg_alias, $url, $analysis_id, $logic_name, $input_id); - - -GetOptions( - # connect to the database: - 'reg_conf|regfile=s' => \$reg_conf, - 'reg_alias|regname=s' => \$reg_alias, - 'url=s' => \$url, - - # identify the analysis: - 'analysis_id=i' => \$analysis_id, - 'logic_name=s' => \$logic_name, - - # specify the input_id (as a string): - 'input_id=s' => \$input_id, -); - -my $hive_dba; -if($reg_conf and $reg_alias) { - Bio::EnsEMBL::Registry->load_all($reg_conf); - $hive_dba = Bio::EnsEMBL::Registry->get_DBAdaptor($reg_alias, 'hive'); -} elsif($url) { - $hive_dba = Bio::EnsEMBL::Hive::DBSQL::DBAdaptor->new(-url => $url); -} else { - warn "\nERROR: Connection parameters (url or reg_conf+reg_alias) need to be specified\n"; - script_usage(1); +sub show_seedable_analyses { + my ($hive_dba) = @_; + + my $analyses = $hive_dba->get_AnalysisAdaptor->fetch_all(); + my $incoming = $hive_dba->get_DataflowRuleAdaptor->fetch_HASHED_FROM_to_analysis_url_TO_dataflow_rule_id(); + my $job_adaptor = $hive_dba->get_AnalysisJobAdaptor; + + print "\nYou haven't specified neither -logic_name nor -analysis_id of the analysis being seeded.\n"; + print "\nSeedable analyses without incoming dataflow:\n"; + foreach my $analysis (@$analyses) { + my $logic_name = $analysis->logic_name; + unless($incoming->{$logic_name}) { + print "\t".$logic_name." (".$analysis->dbID.")\n"; + } + } } -my $analysis_adaptor = $hive_dba->get_AnalysisAdaptor; -my $analysis; -if($logic_name) { - $analysis = $analysis_adaptor->fetch_by_logic_name( $logic_name ) - or die "Could not fetch analysis '$logic_name'"; -} else { - unless($analysis_id) { - $analysis_id = 1; - warn "Neither -logic_name nor -analysis_id was set, assuming analysis_id='$analysis_id'\n"; + +sub main { + my ($reg_conf, $reg_alias, $url, $analysis_id, $logic_name, $input_id); + + GetOptions( + # connect to the database: + 'reg_conf|regfile=s' => \$reg_conf, + 'reg_alias|regname=s' => \$reg_alias, + 'url=s' => \$url, + + # identify the analysis: + 'analysis_id=i' => \$analysis_id, + 'logic_name=s' => \$logic_name, + + # specify the input_id (as a string): + 'input_id=s' => \$input_id, + ); + + my $hive_dba; + if($reg_conf and $reg_alias) { + Bio::EnsEMBL::Registry->load_all($reg_conf); + $hive_dba = Bio::EnsEMBL::Registry->get_DBAdaptor($reg_alias, 'hive'); + } elsif($url) { + $hive_dba = Bio::EnsEMBL::Hive::DBSQL::DBAdaptor->new(-url => $url); + } else { + warn "\nERROR: Connection parameters (url or reg_conf+reg_alias) need to be specified\n"; + script_usage(1); } - $analysis = $analysis_adaptor->fetch_by_dbID( $analysis_id ) - or die "Could not fetch analysis with dbID='$analysis_id'"; -} -unless($input_id) { - $input_id = '{}'; - warn "Since -input_id has not been set, assuming input_id='$input_id'\n"; -} + my $analysis_adaptor = $hive_dba->get_AnalysisAdaptor; + my $analysis; + if($logic_name) { + $analysis = $analysis_adaptor->fetch_by_logic_name( $logic_name ) + or die "Could not fetch analysis '$logic_name'"; + } elsif($analysis_id) { + $analysis = $analysis_adaptor->fetch_by_dbID( $analysis_id ) + or die "Could not fetch analysis with dbID='$analysis_id'"; + } else { + show_seedable_analyses($hive_dba); + exit(0); + } + + unless($input_id) { + $input_id = '{}'; + warn "Since -input_id has not been set, assuming input_id='$input_id'\n"; + } - # Make sure all job creations undergo re-stringification - # to avoid alternative "spellings" of the same input_id hash: -$input_id = stringify( destringify( $input_id ) ); + # Make sure all job creations undergo re-stringification + # to avoid alternative "spellings" of the same input_id hash: + $input_id = stringify( destringify( $input_id ) ); -Bio::EnsEMBL::Hive::DBSQL::AnalysisJobAdaptor->CreateNewJob( - -analysis => $analysis, - -input_id => $input_id, - -prev_job_id => undef, # this job has been created by the initialization script, not by another job -) or die "Could not create job '$input_id' (it could have been there already)\n"; + Bio::EnsEMBL::Hive::DBSQL::AnalysisJobAdaptor->CreateNewJob( + -analysis => $analysis, + -input_id => $input_id, + -prev_job_id => undef, # this job has been created by the initialization script, not by another job + ) or die "Could not create job '$input_id' (it could have been there already)\n"; -warn "Job '$input_id' in analysis '".$analysis->logic_name."'(".$analysis->dbID.") has been created\n"; + warn "Job '$input_id' in analysis '".$analysis->logic_name."'(".$analysis->dbID.") has been created\n"; +} +main(); __DATA__