This is an automated email from the ASF dual-hosted git repository.

aichrist pushed a commit to branch analytics-framework
in repository https://gitbox.apache.org/repos/asf/nifi.git

commit 84d981d6f568c1c2c47cf44cdef71bd8960b0822
Author: Matthew Burgess <[email protected]>
AuthorDate: Wed Jul 24 17:09:27 2019 -0400

    NIFI-6510 Added prediction fields for use by UI, still need to be populated
---
 .../nifi/controller/status/ConnectionStatus.java   |  9 ++++++
 .../dto/status/ConnectionStatusSnapshotDTO.java    | 33 ++++++++++++++++++++++
 .../apache/nifi/cluster/manager/StatusMerger.java  | 28 ++++++++++++++++++
 .../org/apache/nifi/web/api/dto/DtoFactory.java    |  4 +++
 4 files changed, 74 insertions(+)

diff --git 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/ConnectionStatus.java
 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/ConnectionStatus.java
index 0e5d306..ee7dd45 100644
--- 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/ConnectionStatus.java
+++ 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/ConnectionStatus.java
@@ -40,6 +40,7 @@ public class ConnectionStatus implements Cloneable {
     private long outputBytes;
     private int maxQueuedCount;
     private long maxQueuedBytes;
+    private long predictionIntervalMillis;
     private int nextPredictedQueuedCount;
     private long nextPredictedQueuedBytes;
     private long predictedTimeToCountBackpressureMillis;
@@ -190,6 +191,14 @@ public class ConnectionStatus implements Cloneable {
         this.backPressureBytesThreshold = backPressureBytesThreshold;
     }
 
+    public long getPredictionIntervalMillis() {
+        return predictionIntervalMillis;
+    }
+
+    public void setPredictionIntervalMillis(long predictionIntervalMillis) {
+        this.predictionIntervalMillis = predictionIntervalMillis;
+    }
+
     public int getNextPredictedQueuedCount() {
         return nextPredictedQueuedCount;
     }
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusSnapshotDTO.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusSnapshotDTO.java
index 3237385..f48e145 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusSnapshotDTO.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusSnapshotDTO.java
@@ -50,8 +50,11 @@ public class ConnectionStatusSnapshotDTO implements 
Cloneable {
     private Integer percentUseBytes;
     private Long predictedMillisUntilCountBackpressure = 0L;
     private Long predictedMillisUntilBytesBackpressure = 0L;
+    private Integer predictionIntervalSeconds;
     private Integer predictedCountAtNextInterval = 0;
     private Long predictedBytesAtNextInterval = 0L;
+    private Integer predictedPercentCount;
+    private Integer predictedPercentBytes;
 
     /* getters / setters */
     /**
@@ -302,6 +305,15 @@ public class ConnectionStatusSnapshotDTO implements 
Cloneable {
         this.predictedCountAtNextInterval = predictedCountAtNextInterval;
     }
 
+    @ApiModelProperty("The configured interval (in seconds) for predicting 
connection queue count and size (and percent usage).")
+    public Integer getPredictionIntervalSeconds() {
+        return predictionIntervalSeconds;
+    }
+
+    public void setPredictionIntervalSeconds(Integer 
predictionIntervalSeconds) {
+        this.predictionIntervalSeconds = predictionIntervalSeconds;
+    }
+
     @ApiModelProperty("The predicted total number of bytes in the queue at the 
next configured interval.")
     public Long getPredictedBytesAtNextInterval() {
         return predictedBytesAtNextInterval;
@@ -311,6 +323,24 @@ public class ConnectionStatusSnapshotDTO implements 
Cloneable {
         this.predictedBytesAtNextInterval = predictedBytesAtNextInterval;
     }
 
+    @ApiModelProperty("Predicted connection percent use regarding queued flow 
files count and backpressure threshold if configured.")
+    public Integer getPredictedPercentCount() {
+        return predictedPercentCount;
+    }
+
+    public void setPredictedPercentCount(Integer predictedPercentCount) {
+        this.predictedPercentCount = predictedPercentCount;
+    }
+
+    @ApiModelProperty("Predicted connection percent use regarding queued flow 
files size and backpressure threshold if configured.")
+    public Integer getPredictedPercentBytes() {
+        return predictedPercentBytes;
+    }
+
+    public void setPredictedPercentBytes(Integer predictedPercentBytes) {
+        this.predictedPercentBytes = predictedPercentBytes;
+    }
+
     @Override
     public ConnectionStatusSnapshotDTO clone() {
         final ConnectionStatusSnapshotDTO other = new 
ConnectionStatusSnapshotDTO();
@@ -337,8 +367,11 @@ public class ConnectionStatusSnapshotDTO implements 
Cloneable {
         other.setPercentUseCount(getPercentUseCount());
         
other.setPredictedMillisUntilCountBackpressure(getPredictedMillisUntilCountBackpressure());
         
other.setPredictedMillisUntilBytesBackpressure(getPredictedMillisUntilBytesBackpressure());
+        other.setPredictionIntervalSeconds(getPredictionIntervalSeconds());
         
other.setPredictedCountAtNextInterval(getPredictedCountAtNextInterval());
         
other.setPredictedBytesAtNextInterval(getPredictedBytesAtNextInterval());
+        other.setPredictedPercentBytes(getPredictedPercentBytes());
+        other.setPredictedPercentCount(getPredictedPercentCount());
 
         return other;
     }
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
index 946295a..4d21ce4 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
@@ -500,6 +500,34 @@ public class StatusMerger {
             target.setPercentUseCount(Math.max(target.getPercentUseCount(), 
toMerge.getPercentUseCount()));
         }
 
+        // Merge predicted values (minimum time to backpressure, maximum 
percent at next interval
+
+        if (target.getPredictionIntervalSeconds() == null) {
+            
target.setPredictionIntervalSeconds(toMerge.getPredictionIntervalSeconds());
+        }
+
+        if (target.getPredictedMillisUntilBytesBackpressure() == null) {
+            
target.setPredictedMillisUntilBytesBackpressure(toMerge.getPredictedMillisUntilBytesBackpressure());
+        } else if (toMerge.getPredictedMillisUntilBytesBackpressure() != null) 
{
+            
target.setPredictedMillisUntilBytesBackpressure(Math.min(target.getPredictedMillisUntilBytesBackpressure(),
 toMerge.getPredictedMillisUntilBytesBackpressure()));
+        }
+        if (target.getPredictedMillisUntilCountBackpressure() == null) {
+            
target.setPredictedMillisUntilCountBackpressure(toMerge.getPredictedMillisUntilCountBackpressure());
+        } else if (toMerge.getPredictedMillisUntilCountBackpressure() != null) 
{
+            
target.setPredictedMillisUntilCountBackpressure(Math.min(target.getPredictedMillisUntilCountBackpressure(),
 toMerge.getPredictedMillisUntilCountBackpressure()));
+        }
+
+        if (target.getPredictedPercentBytes() == null) {
+            
target.setPredictedPercentBytes(toMerge.getPredictedPercentBytes());
+        } else if (toMerge.getPercentUseBytes() != null) {
+            
target.setPredictedPercentBytes(Math.max(target.getPredictedPercentBytes(), 
toMerge.getPredictedPercentBytes()));
+        }
+        if (target.getPredictedPercentCount() == null) {
+            
target.setPredictedPercentCount(toMerge.getPredictedPercentCount());
+        } else if (toMerge.getPredictedPercentCount() != null) {
+            
target.setPredictedPercentCount(Math.max(target.getPredictedPercentCount(), 
toMerge.getPredictedPercentCount()));
+        }
+
         updatePrettyPrintedFields(target);
     }
 
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
index 2ff12e6..88cc299 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
@@ -1179,11 +1179,15 @@ public final class DtoFactory {
 
         if (connectionStatus.getBackPressureObjectThreshold() > 0) {
             snapshot.setPercentUseCount(Math.min(100, 
StatusMerger.getUtilization(connectionStatus.getQueuedCount(), 
connectionStatus.getBackPressureObjectThreshold())));
+
+            snapshot.setPredictionIntervalSeconds(((Long) 
(connectionStatus.getPredictionIntervalMillis() / 1000L)).intValue());
             
snapshot.setPredictedMillisUntilCountBackpressure(connectionStatus.getPredictedTimeToCountBackpressureMillis());
             
snapshot.setPredictedCountAtNextInterval(connectionStatus.getNextPredictedQueuedCount());
         }
         if (connectionStatus.getBackPressureBytesThreshold() > 0) {
             snapshot.setPercentUseBytes(Math.min(100, 
StatusMerger.getUtilization(connectionStatus.getQueuedBytes(), 
connectionStatus.getBackPressureBytesThreshold())));
+
+            snapshot.setPredictionIntervalSeconds(((Long) 
(connectionStatus.getPredictionIntervalMillis() / 1000L)).intValue());
             
snapshot.setPredictedMillisUntilBytesBackpressure(connectionStatus.getPredictedTimeToBytesBackpressureMillis());
             
snapshot.setPredictedBytesAtNextInterval(connectionStatus.getNextPredictedQueuedBytes());
         }

Reply via email to