[
https://issues.apache.org/jira/browse/NIFI-1582?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15245680#comment-15245680
]
ASF GitHub Bot commented on NIFI-1582:
--------------------------------------
Github user JPercivall commented on a diff in the pull request:
https://github.com/apache/nifi/pull/319#discussion_r60060311
--- Diff:
nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/main/java/org/apache/nifi/processors/attributes/UpdateAttribute.java
---
@@ -187,24 +167,83 @@ public UpdateAttribute() {
protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
List<PropertyDescriptor> descriptors = new ArrayList<>();
descriptors.add(DELETE_ATTRIBUTES);
+ descriptors.add(STORE_STATE);
+ descriptors.add(STATEFUL_VARIABLES_INIT_VALUE);
return Collections.unmodifiableList(descriptors);
}
@Override
protected PropertyDescriptor
getSupportedDynamicPropertyDescriptor(final String propertyDescriptorName) {
- return new PropertyDescriptor.Builder()
- .name(propertyDescriptorName)
- .required(false)
-
.addValidator(StandardValidators.createAttributeExpressionLanguageValidator(AttributeExpression.ResultType.STRING,
true))
-
.addValidator(StandardValidators.ATTRIBUTE_KEY_PROPERTY_NAME_VALIDATOR)
- .expressionLanguageSupported(true)
- .dynamic(true)
- .build();
+ if(!stateful){
+ return new PropertyDescriptor.Builder()
+ .name(propertyDescriptorName)
+ .required(false)
+
.addValidator(StandardValidators.ATTRIBUTE_KEY_PROPERTY_NAME_VALIDATOR)
+ .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+ .expressionLanguageSupported(true)
+ .dynamic(true)
+ .build();
+ } else {
+ return new PropertyDescriptor.Builder()
+ .name(propertyDescriptorName)
+ .required(false)
+
.addValidator(StandardValidators.createAttributeExpressionLanguageValidator(AttributeExpression.ResultType.STRING,
true))
+
.addValidator(StandardValidators.ATTRIBUTE_KEY_PROPERTY_NAME_VALIDATOR)
+ .expressionLanguageSupported(true)
+ .dynamic(true)
+ .build();
+ }
+ }
+
+ @Override
+ public void onPropertyModified(final PropertyDescriptor descriptor,
final String oldValue, final String newValue) {
+ super.onPropertyModified(descriptor, oldValue, newValue);
+
+ if (descriptor.equals(STORE_STATE)) {
+ if ("true".equalsIgnoreCase(newValue)) {
+ stateful = true;
+ } else {
+ stateful = false;
+ }
+ }
--- End diff --
Yup, will fix
> New processor to update attributes with state
> ---------------------------------------------
>
> Key: NIFI-1582
> URL: https://issues.apache.org/jira/browse/NIFI-1582
> Project: Apache NiFi
> Issue Type: New Feature
> Reporter: Joseph Percivall
> Assignee: Joseph Percivall
>
> This idea was sparked by a thread on the user list and should allow basic
> data science:
> I expect that in the future I’ll need something a little more sophisticated
> but for now my problem is very simple:
> I want to be able to trigger an alert (only once) when an attribute in an
> incoming stream, for instance, goes over a predefined threshold. The
> Processor should then trigger (only once again) another trigger when the
> signal goes back to normal (below threshold). Basically a RouteByAttribute
> but with memory.
> Thanks
> Claudio
> ------------------------------------------------
> Hello Claudio,
> Your use-case actually could leverage a couple of recently added features to
> create a really cool open-source processor. The two key features that were
> added are State Management and the ability to reference processor specific
> variables in expression language. You can take a look at RouteText to see
> both in action.
> By utilizing both you can create a processor that is configured with multiple
> Expression language expressions. There would be dynamic properties which
> would accept expression language and then store the evaluated value via state
> management. Then there would be a routing property (that supports expression
> language) that could simply add an attribute to the flowfile with the
> evaluated value which would allow it to be used by flowing processors for
> routing.
> This would allow you to do your use-case where you store the value for the
> incoming stream and route differently once you go over a threshold. It could
> even allow more complex use-cases. One instance, I believe, would be possible
> is to have a running average and standard deviation and route data to
> different locations based on it's standard deviation.
> You can think of this like an UpdateAttribute with the ability to store and
> calculate variables using expression language.
> Joe
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)