All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hubspot.singularity.executor.shells.SingularityExecutorShellCommandRunnerCallable Maven / Gradle / Ivy

package com.hubspot.singularity.executor.shells;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Date;
import java.util.concurrent.Callable;

import org.slf4j.Logger;

import com.google.common.base.Charsets;
import com.google.common.base.Optional;
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.SingularityTaskShellCommandUpdate.UpdateType;
import com.hubspot.singularity.runner.base.shared.SafeProcessManager;

public class SingularityExecutorShellCommandRunnerCallable extends SafeProcessManager implements Callable {
  private final SingularityExecutorShellCommandUpdater updater;
  private final ProcessBuilder processBuilder;
  private final File outputFile;

  public SingularityExecutorShellCommandRunnerCallable(Logger log, SingularityExecutorShellCommandUpdater updater, ProcessBuilder processBuilder, File outputFile) {
    super(log);
    this.processBuilder = processBuilder;
    this.updater = updater;
    this.outputFile = outputFile;
  }

  @Override
  public Integer call() throws Exception {
    try (final PrintWriter outputWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outputFile, true), Charsets.UTF_8))) {
      outputWriter.println("#");
      outputWriter.println(String.format("# %s -- Launching %s", new Date(), JavaUtils.SPACE_JOINER.join(processBuilder.command())));
      outputWriter.println("#");
    }

    Process process = startProcess(processBuilder);

    Optional pid = getCurrentPid();

    updater.sendUpdate(UpdateType.STARTED, Optional.of(String.format("pid - %s", pid.orNull())), Optional.absent());

    try {
      return process.waitFor();
    } catch (InterruptedException ie) {
      signalKillToProcessIfActive();
      throw ie;
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy