Skip to content

Commit 0af3c6d

Browse files
committed
Add logging to nimble pipeline
1 parent fb6ba5c commit 0af3c6d

File tree

1 file changed

+34
-27
lines changed

1 file changed

+34
-27
lines changed

singlecell/src/org/labkey/singlecell/run/NimbleHelper.java

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -314,34 +314,39 @@ private File doAlignment(NimbleGenome genome, File refJson, File bam, PipelineSt
314314
alignArgs.add("/work/" + resultsTsv.getName());
315315
alignArgs.add("/work/" + localBam.getName());
316316

317-
runUsingDocker(alignArgs, output, "align-" + genome.genomeId);
317+
File doneFile = getNimbleDoneFile(getPipelineCtx().getWorkingDirectory(), "align-" + genome.genomeId);
318318

319-
File resultsGz = new File(resultsTsv.getPath() + ".gz");
320-
if (!resultsTsv.exists() && !resultsGz.exists())
319+
boolean dockerRan = runUsingDocker(alignArgs, output, "align-" + genome.genomeId);
320+
if (dockerRan && !resultsTsv.exists())
321321
{
322-
File doneFile = getNimbleDoneFile(getPipelineCtx().getWorkingDirectory(), "align-" + genome.genomeId);
323322
if (doneFile.exists())
324323
{
325324
doneFile.delete();
326325
}
327326

328327
throw new PipelineJobException("Expected to find file: " + resultsTsv.getPath());
329328
}
330-
else if (!resultsGz.exists())
329+
330+
File resultsGz = new File(resultsTsv.getPath() + ".gz");
331+
if (dockerRan)
331332
{
333+
if (resultsGz.exists())
334+
{
335+
getPipelineCtx().getLogger().debug("Deleting pre-existing gz output: " + resultsGz.getName());
336+
resultsGz.delete();
337+
}
338+
332339
// NOTE: perform compression outside of nimble until nimble bugs fixed
333340
getPipelineCtx().getLogger().debug("Compressing results TSV file");
334341
resultsGz = Compress.compressGzip(resultsTsv);
335342
resultsTsv.delete();
336343
}
337-
else
344+
else if (!resultsGz.exists())
338345
{
339-
getPipelineCtx().getLogger().debug("Compressed output found, skipping gzip");
346+
throw new PipelineJobException("Expected to find gz file: " + resultsGz.getPath());
340347
}
341348

342-
resultsTsv = resultsGz;
343-
344-
File log = getNimbleLogFile(resultsTsv.getParentFile(), genome.genomeId);
349+
File log = getNimbleLogFile(resultsGz.getParentFile(), genome.genomeId);
345350
if (!log.exists())
346351
{
347352
throw new PipelineJobException("Expected to find file: " + log.getPath());
@@ -372,12 +377,12 @@ else if (!resultsGz.exists())
372377
getPipelineCtx().getLogger().debug("Alignment output file not present: " + alignmentOutputFile.getName());
373378
}
374379

375-
return resultsTsv;
380+
return resultsGz;
376381
}
377382

378383
public static File getNimbleLogFile(File baseDir, int genomeId)
379384
{
380-
return new File(baseDir, "nimbleDebug." + genomeId + ".txt");
385+
return new File(baseDir, "nimbleStats." + genomeId + ".txt");
381386
}
382387

383388
private File getNimbleDoneFile(File parentDir, String resumeString)
@@ -387,7 +392,7 @@ private File getNimbleDoneFile(File parentDir, String resumeString)
387392

388393
public static String DOCKER_CONTAINER_NAME = "ghcr.io/bimberlab/nimble:latest";
389394

390-
private void runUsingDocker(List<String> nimbleArgs, PipelineStepOutput output, String resumeString) throws PipelineJobException
395+
private boolean runUsingDocker(List<String> nimbleArgs, PipelineStepOutput output, String resumeString) throws PipelineJobException
391396
{
392397
File localBashScript = new File(getPipelineCtx().getWorkingDirectory(), "docker.sh");
393398
output.addIntermediateFile(localBashScript);
@@ -434,7 +439,8 @@ private void runUsingDocker(List<String> nimbleArgs, PipelineStepOutput output,
434439
writer.println("\t-e TMPDIR=/work/tmpDir \\");
435440
writer.println("\t-w /work \\");
436441
writer.println("\t" + DOCKER_CONTAINER_NAME + " \\");
437-
writer.println("\t" + StringUtils.join(nimbleArgs, " "));
442+
// TODO: eventually remove this:
443+
writer.println("\t /bin/bash -c \"" + StringUtils.join(nimbleArgs, " ") + "; echo 'Exit code: '$?; ls /work \"");
438444
writer.println("EXIT_CODE=$?");
439445
writer.println("echo 'Bash script complete: '$EXIT_CODE");
440446
writer.println("exit $EXIT_CODE");
@@ -450,22 +456,23 @@ private void runUsingDocker(List<String> nimbleArgs, PipelineStepOutput output,
450456
if (doneFile.exists())
451457
{
452458
getPipelineCtx().getLogger().info("Nimble already completed, resuming: " + resumeString);
459+
return false;
453460
}
454-
else
455-
{
456-
SimpleScriptWrapper rWrapper = new SimpleScriptWrapper(getPipelineCtx().getLogger());
457-
rWrapper.setWorkingDir(getPipelineCtx().getWorkingDirectory());
458-
rWrapper.execute(Arrays.asList("/bin/bash", localBashScript.getName()));
459461

460-
try
461-
{
462-
FileUtils.touch(doneFile);
463-
}
464-
catch (IOException e)
465-
{
466-
throw new PipelineJobException(e);
467-
}
462+
SimpleScriptWrapper rWrapper = new SimpleScriptWrapper(getPipelineCtx().getLogger());
463+
rWrapper.setWorkingDir(getPipelineCtx().getWorkingDirectory());
464+
rWrapper.execute(Arrays.asList("/bin/bash", localBashScript.getName()));
465+
466+
try
467+
{
468+
FileUtils.touch(doneFile);
469+
}
470+
catch (IOException e)
471+
{
472+
throw new PipelineJobException(e);
468473
}
474+
475+
return true;
469476
}
470477

471478
private File ensureLocalCopy(File input, PipelineStepOutput output) throws PipelineJobException

0 commit comments

Comments
 (0)