From a9ba9455958ba9dbdd3a85413aa5b7aa166c44dc Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Tue, 23 Aug 2011 10:09:51 -0400 Subject: [PATCH] onExecutionDone(jobs, successFlag) added to QScript. -- This function is called when the Qscript ends, so scripts can overload this function if they want to run some code after all of the jobs have completed --- .../org/broadinstitute/sting/queue/QCommandLine.scala | 10 ++++++++-- .../src/org/broadinstitute/sting/queue/QScript.scala | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/public/scala/src/org/broadinstitute/sting/queue/QCommandLine.scala b/public/scala/src/org/broadinstitute/sting/queue/QCommandLine.scala index f19d60930..14e4adbf8 100755 --- a/public/scala/src/org/broadinstitute/sting/queue/QCommandLine.scala +++ b/public/scala/src/org/broadinstitute/sting/queue/QCommandLine.scala @@ -95,7 +95,8 @@ class QCommandLine extends CommandLineProgram with Logging { def execute = { qGraph.settings = settings - for (script <- pluginManager.createAllTypes()) { + val allQScripts = pluginManager.createAllTypes(); + for (script <- allQScripts) { logger.info("Scripting " + pluginManager.getName(script.getClass.asSubclass(classOf[QScript]))) loadArgumentsIntoObject(script) try { @@ -108,14 +109,19 @@ class QCommandLine extends CommandLineProgram with Logging { logger.info("Added " + script.functions.size + " functions") } + // Execute the job graph qGraph.run() + // walk over each script, calling onExecutionDone + for (script <- allQScripts) { + script.onExecutionDone(script.functions, qGraph.success) + } + if (!qGraph.success) { logger.info("Done with errors") qGraph.logFailed() 1 } else { - logger.info("Done") 0 } } diff --git a/public/scala/src/org/broadinstitute/sting/queue/QScript.scala b/public/scala/src/org/broadinstitute/sting/queue/QScript.scala index 5cb8d1d29..27f3e275b 100755 --- a/public/scala/src/org/broadinstitute/sting/queue/QScript.scala +++ b/public/scala/src/org/broadinstitute/sting/queue/QScript.scala @@ -57,6 +57,14 @@ trait QScript extends Logging with PrimitiveOptionConversions with StringFileCon */ def script() + /** + * A default handler for the onExecutionDone() function. By default this doesn't do anything + * except print out a fine status message. + */ + def onExecutionDone(jobs: List[QFunction], success: Boolean) { + logger.info("Script %s with %d total jobs".format(if (success) "completed successfully" else "failed", jobs.size)) + } + /** * The command line functions that will be executed for this QScript. */