NIFI-380: Added documentation Signed-off-by: joewitt <joew...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/bd066cd5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/bd066cd5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/bd066cd5 Branch: refs/heads/develop Commit: bd066cd567b7084015aa9c9cf4f729f337c60d4d Parents: e4ab0f4 Author: Mark Payne <marka...@hotmail.com> Authored: Wed Mar 4 20:09:08 2015 -0500 Committer: joewitt <joew...@apache.org> Committed: Mon Mar 9 10:40:24 2015 -0400 ---------------------------------------------------------------------- .../processors/standard/ExecuteProcess.java | 27 ++++-- .../index.html | 90 ++++++++++++++++++++ 2 files changed, 110 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/bd066cd5/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java index 6f68f7d..c510641 100644 --- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java +++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java @@ -57,7 +57,6 @@ import org.apache.nifi.processor.Relationship; import org.apache.nifi.processor.exception.ProcessException; import org.apache.nifi.processor.io.OutputStreamCallback; import org.apache.nifi.processor.util.StandardValidators; -import org.apache.nifi.stream.io.StreamUtils; @Tags({"command", "process", "source", "external", "invoke", "script"}) @@ -66,13 +65,8 @@ import org.apache.nifi.stream.io.StreamUtils; + "format, as it typically does not make sense to split binary data on arbitrary time-based intervals.") public class ExecuteProcess extends AbstractProcessor { - public static final Relationship REL_SUCCESS = new Relationship.Builder() - .name("success") - .description("All created FlowFiles are routed to this relationship") - .build(); - public static final PropertyDescriptor COMMAND = new PropertyDescriptor.Builder() - .name("Command Path") + .name("Command") .description("Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.") .required(true) .expressionLanguageSupported(false) @@ -105,6 +99,12 @@ public class ExecuteProcess extends AbstractProcessor { .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) .build(); + public static final Relationship REL_SUCCESS = new Relationship.Builder() + .name("success") + .description("All created FlowFiles are routed to this relationship") + .build(); + + private volatile ExecutorService executor; @Override @@ -317,6 +317,10 @@ public class ExecuteProcess extends AbstractProcessor { process.destroy(); break; } + + // Create a FlowFile that we can write to and set the OutputStream for the FlowFile + // as the delegate for the ProxyOuptutStream, then wait until the process finishes + // or until the specified amount of time FlowFile flowFile = session.create(); flowFile = session.write(flowFile, new OutputStreamCallback() { @Override @@ -345,17 +349,22 @@ public class ExecuteProcess extends AbstractProcessor { }); if ( flowFile.getSize() == 0L ) { + // If no data was written to the file, remove it session.remove(flowFile); } else if ( failure.get() ) { + // If there was a failure processing the output of the Process, remove the FlowFile session.remove(flowFile); getLogger().error("Failed to read data from Process, so will not generate FlowFile"); + break; } else { + // All was good. Generate event and transfer FlowFile. session.getProvenanceReporter().create(flowFile, "Created from command: " + commandString); getLogger().info("Created {} and routed to success", new Object[] {flowFile}); session.transfer(flowFile, REL_SUCCESS); flowFileCount++; } + // Commit the session so that the FlowFile is transferred to the next processor session.commit(); } @@ -394,6 +403,10 @@ public class ExecuteProcess extends AbstractProcessor { } + /** + * Output stream that is used to wrap another output stream in a way that the + * underlying output stream can be swapped out for a different one when needed + */ private static class ProxyOutputStream extends OutputStream { private final ProcessorLog logger; http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/bd066cd5/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.ExecuteProcess/index.html ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.ExecuteProcess/index.html b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.ExecuteProcess/index.html new file mode 100644 index 0000000..9129855 --- /dev/null +++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/resources/docs/org.apache.nifi.processors.standard.ExecuteProcess/index.html @@ -0,0 +1,90 @@ +<!DOCTYPE html> +<html lang="en"> + <!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + <head> + <meta charset="utf-8" /> + <title>ExecuteProcess</title> + + <link rel="stylesheet" href="../../css/component-usage.css" type="text/css" /> + </head> + + <body> + <!-- Processor Documentation ================================================== --> + <h2> Description:</h2> + <p> + Runs an operating system command specified by the user and writes the output of that command to a FlowFile. If the command is expected + to be long-running, the Processor can output the partial data on a specified interval. When this option is used, the output is expected to be in textual + format, as it typically does not make sense to split binary data on arbitrary time-based intervals. + </p> + + <p> + <strong>Properties:</strong> + </p> + <p>In the list below, the names of required properties appear + in bold. Any other properties (not in bold) are considered optional. + If a property has a default value, it is indicated. If a property + supports the use of the NiFi Expression Language (or simply, + "expression language"), that is also indicated.</p> + <ul> + <li><strong>Command</strong> + <ul> + <li>Specifies the command to be executed; if just the name of an executable is provided, it must be in the user's environment PATH.</li> + <li>Default value: none</li> + <li>Supports expression language: false</li> + </ul> + </li> + <li>Command Arguments + <ul> + <li>The arguments to supply to the executable delimited by white space. White space can be escaped by enclosing it in double-quotes.</li> + <li>Default value: none</li> + <li>Supports expression language: false</li> + </ul> + </li> + <li>Working Directory + <ul> + <li>The directory to use as the current working directory when executing the command</li> + <li>Default value: none (which means whatever NiFi's root installation directory is)</li> + <li>Supports expression language: false</li> + </ul> + </li> + <li> + Batch Duration> + <ul> + <li> + If the process is expected to be long-running and produce textual output, a batch duration can be specified so + that the output will be captured for this amount of time and a FlowFile will then be sent out with the results + and a new FlowFile will be started, rather than waiting for the process to finish before sending out the results. + If no value is provided, the process will run to completion and the entire output of the process will be written + to a single FlowFile. + </li> + <li>Default value: none</li> + <li>Supports expression language: false</li> + </ul> + </li> + </ul> + + <p> + <strong>Relationships:</strong> + </p> + <ul> + <li>success + <ul> + <li>All FlowFiles that are created are routed to this relationship.</li> + </ul> + </li> + </ul> + </body> +</html>