List of usage examples for org.apache.commons.exec DefaultExecutor setStreamHandler
public void setStreamHandler(final ExecuteStreamHandler streamHandler)
From source file:org.ng200.openolympus.cerberus.executors.OpenOlympusWatchdogExecutor.java
private static String callNativeId(boolean group) throws IOException { OpenOlympusWatchdogExecutor.ensureUserAndGroupExists(); final CommandLine commandLine = new CommandLine("id"); commandLine.addArgument(group ? "-g" : "-u"); commandLine.addArgument("olympuswatchdogchild"); final DefaultExecutor executor = new DefaultExecutor(); final ByteArrayOutputStream out = new ByteArrayOutputStream(); executor.setStreamHandler(new PumpStreamHandler(out)); executor.setWatchdog(new ExecuteWatchdog(1000)); try {/*from w w w .j a v a 2 s . c o m*/ executor.execute(commandLine); return out.toString(StandardCharsets.UTF_8.name()); } catch (final ExecuteException e) { throw new ExecuteException( "Couldn't find user/group id of the olympuswatchdogchild user/group: does it even exist?", e.getExitValue(), e); } }
From source file:org.ng200.openolympus.cerberus.executors.SandboxedExecutor.java
@Override public ExecutionResult execute(final Path program) throws IOException { SandboxedExecutor.logger.debug("Copying program into jail"); final Path chrootedProgram = this.storage.getPath().resolve("chroot") .resolve(program.getFileName().toString()); chrootedProgram.getParent().toFile().mkdirs(); FileAccess.copy(program, chrootedProgram, StandardCopyOption.COPY_ATTRIBUTES); final CommandLine commandLine = new CommandLine("sudo"); commandLine.addArgument("olympus_watchdog"); this.setUpOlrunnerLimits(commandLine); commandLine.addArgument(MessageFormat.format("--jail={0}", this.storage.getPath().resolve("chroot").toAbsolutePath().toString())); commandLine.addArgument("--"); commandLine/*from w ww . j a v a 2 s . co m*/ .addArgument("/" + this.storage.getPath().resolve("chroot").relativize(chrootedProgram).toString()); final DefaultExecutor executor = new DefaultExecutor(); executor.setExitValue(0); executor.setWatchdog(new ExecuteWatchdog(60000)); // 60 seconds for the // sandbox to // complete executor.setWorkingDirectory(this.storage.getPath().toFile()); executor.setStreamHandler(new PumpStreamHandler(this.outputStream, this.errorStream, this.inputStream)); SandboxedExecutor.logger.debug("Executing in sandbox: {}", commandLine.toString()); try { executor.execute(commandLine); } catch (final ExecuteException e) { SandboxedExecutor.logger.info("Execution failed: {}", e); throw e; } catch (final IOException e) { if (!e.getMessage().toLowerCase().equals("stream closed")) { throw e; } } return this.readOlrunnerVerdict(this.storage.getPath().resolve("verdict.txt")); }
From source file:org.ng200.openolympus.controller.admin.DiagnosticsController.java
private File which(final String applicationName) { try {/*from w w w.j a va 2 s .c om*/ final DefaultExecutor executor = new DefaultExecutor(); executor.setWatchdog(new ExecuteWatchdog(20000)); final CommandLine commandLine = new CommandLine("which"); commandLine.addArgument(applicationName); final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); executor.setStreamHandler(new PumpStreamHandler(byteArrayOutputStream)); executor.execute(commandLine); final String fileName = byteArrayOutputStream.toString().trim(); if (fileName.isEmpty()) { return null; } return new File(fileName); } catch (final IOException e) { return null; } }
From source file:org.ng200.openolympus.FileAccess.java
public static void rsync(final Path from, final Path to) throws IOException { final CommandLine commandLine = new CommandLine("/usr/bin/rsync"); commandLine.addArgument("-r"); commandLine.addArgument("--ignore-errors"); commandLine.addArgument(from.toAbsolutePath().toString()); commandLine.addArgument(to.toAbsolutePath().toString()); final DefaultExecutor executor = new DefaultExecutor(); executor.setWatchdog(new ExecuteWatchdog(20000)); // 20 seconds for the // sandbox to // complete//from w w w . j ava2s. c o m final ByteArrayOutputStream outAndErr = new ByteArrayOutputStream(); executor.setStreamHandler(new PumpStreamHandler(outAndErr)); executor.setExitValues(new int[] { 0 }); try { executor.execute(commandLine); } catch (final ExecuteException e) { throw new IOException("Rsync failed:\n" + outAndErr.toString(), e); } }
From source file:org.nps.autopsypycaffe.NPSPyCaffeFactory.java
public NPSPyCaffeFactory() { IngestServices services = IngestServices.getInstance(); props = new Properties(); //The user directory is where the plugin got installed File userDir = PlatformUtil.getUserDirectory(); basePath = userDir.toString();//ww w. j a v a2 s. co m // Search for all directories in the detectors directory. This is the list // of all the detector types. if (new File(basePath + "/NPSPyCaffe/detectors").exists() == false) { // When we run in the netbeans debugger basePath is up two directories basePath = basePath + "/../../release/NPSPyCaffe/detectors/"; } else basePath = basePath + "/NPSPyCaffe/detectors/"; String[] dlist = new File(basePath).list(); for (String name : dlist) { if (new File(basePath + name).isDirectory()) { detectorTypes.add(name); } } if (detectorTypes.size() == 0) { IngestMessage msg = IngestMessage.createErrorMessage(NPSPyCaffeFactory.getModuleName(), "Congigure Error!", "No Detector types found!"); services.postMessage(msg); } else for (String det : detectorTypes) { String[] plist = new File(basePath + det).list(); for (String name : plist) { if (name.endsWith(".properties")) { // Read anything that ends with .properties File propfile = new File(basePath + det + "/" + name); if (propfile.exists() == true) { try { FileInputStream in = new FileInputStream(propfile); props.load(in); in.close(); if (name.equals("detector.properties")) { // main property file describing the detector type boolean gpu = checkForGPU(det); hasGPU.put(det, gpu); } else { // specific detector property file so use name of file as detector name int idx = name.indexOf(".properties"); String detName = name.substring(0, idx); detectorNames.add(det + "." + detName); } } catch (FileNotFoundException ex) { logger.log(Level.SEVERE, "Could not Find detector.properties file"); } catch (IOException ex) { logger.log(Level.SEVERE, ex.getMessage()); } } } } for (String name : plist) { if (name.endsWith(".properties")) { } } } // Find Python Exec try { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); CommandLine args = CommandLine.parse("where.exe"); args.addArgument("python"); DefaultExecutor exec = new DefaultExecutor(); PumpStreamHandler stdpump = new PumpStreamHandler(outStream); exec.setStreamHandler(stdpump); exec.execute(args); String whereOut = outStream.toString(); String[] lines = StringUtils.split(whereOut, "\r\n"); pythonExec = lines[0]; } catch (IOException ex) { } }
From source file:org.onehippo.forge.gallerymagick.core.command.AbstractMagickCommand.java
/** * Execute the Magick command with the sub-command and arguments. * @param stdOut standard output stream//from w w w . ja v a2s. c o m * @throws MagickExecuteException if an execution exception occurs * @throws IOException if IO exception occurs */ public void execute(final OutputStream stdOut) throws IOException { CommandLine cmdLine = createCommandLine(); ByteArrayOutputStream errStream = null; int exitValue = 0; DefaultExecuteResultHandler resultHandler = null; try { errStream = new ByteArrayOutputStream(512); final DefaultExecutor executor = new DefaultExecutor(); ExecuteStreamHandler streamHandler; if (stdOut != null) { streamHandler = new PumpStreamHandler(stdOut, errStream); } else { streamHandler = new PumpStreamHandler(System.out, errStream); } executor.setStreamHandler(streamHandler); if (getWorkingDirectory() != null) { executor.setWorkingDirectory(getWorkingDirectory()); } long timeout = NumberUtils.toLong(System.getProperty(PROP_TIMEOUT), DEFAULT_COMMAND_TIMEOUT); if (timeout > 0) { ExecuteWatchdog watchdog = new ExecuteWatchdog(DEFAULT_COMMAND_TIMEOUT); executor.setWatchdog(watchdog); resultHandler = new DefaultExecuteResultHandler(); executor.execute(cmdLine, resultHandler); log.debug("Executed with watchdog: {}", cmdLine); resultHandler.waitFor(); } else { exitValue = executor.execute(cmdLine); log.debug("Executed without watchdog: {}", cmdLine); } } catch (ExecuteException | InterruptedException e) { if (resultHandler != null) { exitValue = resultHandler.getExitValue(); } if (e.getCause() == null) { throw new MagickExecuteException(getExecutionErrorMessage(cmdLine, errStream, e), exitValue); } else { throw new MagickExecuteException(getExecutionErrorMessage(cmdLine, errStream, e), exitValue, e.getCause()); } } finally { IOUtils.closeQuietly(errStream); } }
From source file:org.opencron.agent.AgentProcessor.java
@Override public Response execute(final Request request) throws TException { if (!this.password.equalsIgnoreCase(request.getPassword())) { return errorPasswordResponse(request); }//from w ww.j a va 2 s . co m String command = request.getParams().get("command") + EXITCODE_SCRIPT; String pid = request.getParams().get("pid"); //?? Long timeout = CommonUtils.toLong(request.getParams().get("timeout"), 0L); boolean timeoutFlag = timeout > 0; logger.info("[opencron]:execute:{},pid:{}", command, pid); File shellFile = CommandUtils.createShellFile(command, pid); Integer exitValue; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); final Response response = Response.response(request); final ExecuteWatchdog watchdog = new ExecuteWatchdog(Integer.MAX_VALUE); final Timer timer = new Timer(); DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler(); try { CommandLine commandLine = CommandLine.parse("/bin/bash +x " + shellFile.getAbsolutePath()); final DefaultExecutor executor = new DefaultExecutor(); ExecuteStreamHandler stream = new PumpStreamHandler(outputStream, outputStream); executor.setStreamHandler(stream); response.setStartTime(new Date().getTime()); //?0,shell executor.setExitValue(0); if (timeoutFlag) { //... executor.setWatchdog(watchdog); // timer.schedule(new TimerTask() { @Override public void run() { //,kill... if (watchdog.isWatching()) { /** * watchdogdestroyProcesskill... * watchdog.destroyProcess(); */ timer.cancel(); watchdog.stop(); //call kill... request.setAction(Action.KILL); try { kill(request); response.setExitCode(Opencron.StatusCode.TIME_OUT.getValue()); } catch (TException e) { e.printStackTrace(); } } } }, timeout * 60 * 1000); // resultHandler = new DefaultExecuteResultHandler() { @Override public void onProcessComplete(int exitValue) { super.onProcessComplete(exitValue); timer.cancel(); } @Override public void onProcessFailed(ExecuteException e) { super.onProcessFailed(e); timer.cancel(); } }; } executor.execute(commandLine, resultHandler); resultHandler.waitFor(); } catch (Exception e) { if (e instanceof ExecuteException) { exitValue = ((ExecuteException) e).getExitValue(); } else { exitValue = Opencron.StatusCode.ERROR_EXEC.getValue(); } if (Opencron.StatusCode.KILL.getValue().equals(exitValue)) { if (timeoutFlag) { timer.cancel(); watchdog.stop(); } logger.info("[opencron]:job has be killed!at pid :{}", request.getParams().get("pid")); } else { logger.info("[opencron]:job execute error:{}", e.getCause().getMessage()); } } finally { exitValue = resultHandler.getExitValue(); if (CommonUtils.notEmpty(outputStream.toByteArray())) { try { outputStream.flush(); String text = outputStream.toString(); if (notEmpty(text)) { try { text = text.replaceAll(String.format(REPLACE_REX, shellFile.getAbsolutePath()), ""); response.setMessage(text.substring(0, text.lastIndexOf(EXITCODE_KEY))); exitValue = Integer.parseInt(text .substring(text.lastIndexOf(EXITCODE_KEY) + EXITCODE_KEY.length() + 1).trim()); } catch (IndexOutOfBoundsException e) { response.setMessage(text); } } outputStream.close(); } catch (Exception e) { logger.error("[opencron]:error:{}", e); } } if (Opencron.StatusCode.TIME_OUT.getValue() == response.getExitCode()) { response.setSuccess(false).end(); } else { response.setExitCode(exitValue) .setSuccess(response.getExitCode() == Opencron.StatusCode.SUCCESS_EXIT.getValue()).end(); } if (shellFile != null) { shellFile.delete();// } } logger.info("[opencron]:execute result:{}", response.toString()); watchdog.stop(); return response; }
From source file:org.opennms.gizmo.k8s.portforward.KubeCtlPortForwardingStrategy.java
@Override public ForwardedPort portForward(String namespace, String pod, int remotePort) { CommandLine cmdLine = new CommandLine("kubectl"); cmdLine.addArgument("--namespace=${namespace}"); cmdLine.addArgument("port-forward"); cmdLine.addArgument("${pod}"); cmdLine.addArgument(":${remotePort}"); HashMap<String, String> map = new HashMap<>(); map.put("namespace", namespace); map.put("pod", pod); map.put("remotePort", Integer.toString(remotePort)); cmdLine.setSubstitutionMap(map);/*from ww w . ja v a2s . c o m*/ ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream err = new ByteArrayOutputStream(); PumpStreamHandler psh = new PumpStreamHandler(out, err); DefaultExecutor executor = new DefaultExecutor(); final ExecuteWatchdog wd = new ExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT); executor.setWatchdog(wd); executor.setStreamHandler(psh); DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler(); try { executor.execute(cmdLine, resultHandler); } catch (IOException e) { throw Throwables.propagate(e); } final int localPort = waitForLocalPort(wd, out, err); return new ForwardedPort() { @Override public InetSocketAddress getAddress() { return new InetSocketAddress(InetAddress.getLoopbackAddress(), localPort); } @Override public void close() throws IOException { wd.destroyProcess(); } @Override public String toString() { return String.format("ForwardedPort[localPort=%d]", localPort); } }; }
From source file:org.opennms.netmgt.integrations.R.RScriptExecutor.java
/** * Executes by given script by://from w w w. j av a 2s .c om * - Searching both the classpath and the filesystem for the path * - Copying the script at the given path to a temporary file and * performing variable substitution with the arguments using Freemarker. * - Invoking the script with commons-exec * - Converting the input table to CSV and passing this to the process via stdin * - Parsing stdout, expecting CSV output, and converting this to an immutable table */ public RScriptOutput exec(String script, RScriptInput input) throws RScriptException { Preconditions.checkNotNull(script, "script argument"); Preconditions.checkNotNull(input, "input argument"); // Grab the script/template Template template; try { template = m_freemarkerConfiguration.getTemplate(script); } catch (IOException e) { throw new RScriptException("Failed to read the script.", e); } // Create a temporary file File scriptOnDisk; try { scriptOnDisk = File.createTempFile("Rcsript", "R"); scriptOnDisk.deleteOnExit(); } catch (IOException e) { throw new RScriptException("Failed to create a temporary file.", e); } // Perform variable substitution and write the results to the temporary file try (FileOutputStream fos = new FileOutputStream(scriptOnDisk); Writer out = new OutputStreamWriter(fos);) { template.process(input.getArguments(), out); } catch (IOException | TemplateException e) { scriptOnDisk.delete(); throw new RScriptException("Failed to process the template.", e); } // Convert the input matrix to a CSV string which will be passed to the script via stdin. // The table may be large, so we try and avoid writing it to disk StringBuilder inputTableAsCsv; try { inputTableAsCsv = toCsv(input.getTable()); } catch (IOException e) { scriptOnDisk.delete(); throw new RScriptException("Failed to convert the input table to CSV.", e); } // Invoke Rscript against the script (located in a temporary file) CommandLine cmdLine = new CommandLine(RSCRIPT_BINARY); cmdLine.addArgument(scriptOnDisk.getAbsolutePath()); // Use commons-exec to execute the process DefaultExecutor executor = new DefaultExecutor(); // Use the CharSequenceInputStream in order to avoid explicitly converting // the StringBuilder a string and then an array of bytes. InputStream stdin = new CharSequenceInputStream(inputTableAsCsv, Charset.forName("UTF-8")); ByteArrayOutputStream stderr = new ByteArrayOutputStream(); ByteArrayOutputStream stdout = new ByteArrayOutputStream(); executor.setStreamHandler(new PumpStreamHandler(stdout, stderr, stdin)); // Fail if we get a non-zero exit code executor.setExitValue(0); // Fail if the process takes too long ExecuteWatchdog watchdog = new ExecuteWatchdog(SCRIPT_TIMEOUT_MS); executor.setWatchdog(watchdog); // Execute try { executor.execute(cmdLine); } catch (IOException e) { scriptOnDisk.delete(); throw new RScriptException("An error occured while executing Rscript, or the requested script.", inputTableAsCsv.toString(), stderr.toString(), stdout.toString(), e); } // Parse and return the results try { ImmutableTable<Long, String, Double> table = fromCsv(stdout.toString()); return new RScriptOutput(table); } catch (Throwable t) { throw new RScriptException("Failed to parse the script's output.", inputTableAsCsv.toString(), stderr.toString(), stdout.toString(), t); } finally { scriptOnDisk.delete(); } }
From source file:org.opennms.netmgt.measurements.impl.RrdtoolXportFetchStrategy.java
/** * {@inheritDoc}// www .j a v a 2 s .c om */ @Override protected FetchResults fetchMeasurements(long start, long end, long step, int maxrows, Map<Source, String> rrdsBySource, Map<String, Object> constants) throws RrdException { String rrdBinary = System.getProperty("rrd.binary"); if (rrdBinary == null) { throw new RrdException("No RRD binary is set."); } final long startInSeconds = (long) Math.floor(start / 1000); final long endInSeconds = (long) Math.floor(end / 1000); long stepInSeconds = (long) Math.floor(step / 1000); // The step must be strictly positive if (stepInSeconds <= 0) { stepInSeconds = 1; } final CommandLine cmdLine = new CommandLine(rrdBinary); cmdLine.addArgument("xport"); cmdLine.addArgument("--step"); cmdLine.addArgument("" + stepInSeconds); cmdLine.addArgument("--start"); cmdLine.addArgument("" + startInSeconds); cmdLine.addArgument("--end"); cmdLine.addArgument("" + endInSeconds); if (maxrows > 0) { cmdLine.addArgument("--maxrows"); cmdLine.addArgument("" + maxrows); } // Use labels without spaces when executing the xport command // These are mapped back to the requested labels in the response final Map<String, String> labelMap = Maps.newHashMap(); int k = 0; for (final Map.Entry<Source, String> entry : rrdsBySource.entrySet()) { final Source source = entry.getKey(); final String rrdFile = entry.getValue(); final String tempLabel = Integer.toString(++k); labelMap.put(tempLabel, source.getLabel()); cmdLine.addArgument(String.format("DEF:%s=%s:%s:%s", tempLabel, Utils.escapeColons(rrdFile), Utils.escapeColons(source.getEffectiveDataSource()), source.getAggregation())); cmdLine.addArgument(String.format("XPORT:%s:%s", tempLabel, tempLabel)); } // Use commons-exec to execute rrdtool final DefaultExecutor executor = new DefaultExecutor(); // Capture stdout/stderr final ByteArrayOutputStream stdout = new ByteArrayOutputStream(); final ByteArrayOutputStream stderr = new ByteArrayOutputStream(); executor.setStreamHandler(new PumpStreamHandler(stdout, stderr, null)); // Fail if we get a non-zero exit code executor.setExitValue(0); // Fail if the process takes too long final ExecuteWatchdog watchdog = new ExecuteWatchdog(XPORT_TIMEOUT_MS); executor.setWatchdog(watchdog); // Export RrdXport rrdXport; try { LOG.debug("Executing: {}", cmdLine); executor.execute(cmdLine); final XMLReader xmlReader = XMLReaderFactory.createXMLReader(); xmlReader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); final SAXSource source = new SAXSource(xmlReader, new InputSource(new StringReader(stdout.toString()))); final JAXBContext jc = JAXBContext.newInstance(RrdXport.class); final Unmarshaller u = jc.createUnmarshaller(); rrdXport = (RrdXport) u.unmarshal(source); } catch (IOException e) { throw new RrdException("An error occured while executing '" + StringUtils.join(cmdLine.toStrings(), " ") + "' with stderr: " + stderr.toString(), e); } catch (SAXException | JAXBException e) { throw new RrdException("The output generated by 'rrdtool xport' could not be parsed.", e); } final int numRows = rrdXport.getRows().size(); final int numColumns = rrdXport.getMeta().getLegends().size(); final long xportStartInMs = rrdXport.getMeta().getStart() * 1000; final long xportStepInMs = rrdXport.getMeta().getStep() * 1000; final long timestamps[] = new long[numRows]; final double values[][] = new double[numColumns][numRows]; // Convert rows to columns int i = 0; for (final XRow row : rrdXport.getRows()) { // Derive the timestamp from the start and step since newer versions // of rrdtool no longer include it as part of the rows timestamps[i] = xportStartInMs + xportStepInMs * i; for (int j = 0; j < numColumns; j++) { if (row.getValues() == null) { // NMS-7710: Avoid NPEs, in certain cases the list of values may be null throw new RrdException( "The output generated by 'rrdtool xport' was not recognized. Try upgrading your rrdtool binaries."); } values[j][i] = row.getValues().get(j); } i++; } // Map the columns by label // The legend entries are in the same order as the column values final Map<String, double[]> columns = Maps.newHashMapWithExpectedSize(numColumns); i = 0; for (String label : rrdXport.getMeta().getLegends()) { columns.put(labelMap.get(label), values[i++]); } return new FetchResults(timestamps, columns, xportStepInMs, constants); }