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


The following commit(s) were added to refs/heads/analytics-framework by this 
push:
     new daad09c  NIFI-6586 - documentation and comments
daad09c is described below

commit daad09cc60d3c860724385214ee474681b6fa620
Author: Yolanda Davis <[email protected]>
AuthorDate: Tue Aug 27 14:46:24 2019 -0400

    NIFI-6586 - documentation and comments
    
    This closes NIFI-6586
    
    Signed-off-by: Andrew I. Christianson <[email protected]>
---
 .../controller/status/analytics/QueryWindow.java   |  3 ++
 .../status/analytics/StatusAnalytics.java          | 17 ++++++++-
 .../status/analytics/StatusAnalyticsEngine.java    |  5 +++
 .../status/analytics/StatusAnalyticsModel.java     | 33 ++++++++++++++++
 .../src/main/asciidoc/administration-guide.adoc    | 15 +++++++-
 nifi-docs/src/main/asciidoc/user-guide.adoc        |  2 +
 .../CachingConnectionStatusAnalyticsEngine.java    | 12 +++++-
 .../analytics/ConnectionStatusAnalytics.java       | 44 +++++++++++++++++++++-
 .../analytics/ConnectionStatusAnalyticsEngine.java | 10 +++++
 .../analytics/StatusAnalyticsModelMapFactory.java  | 22 ++++++++++-
 .../analytics/StatusMetricExtractFunction.java     |  6 +++
 .../models/BivariateStatusAnalyticsModel.java      |  6 ++-
 .../analytics/models/OrdinaryLeastSquares.java     |  6 +++
 .../status/analytics/models/SimpleRegression.java  |  8 ++++
 14 files changed, 182 insertions(+), 7 deletions(-)

diff --git 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/QueryWindow.java
 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/QueryWindow.java
index c477872..b404d19 100644
--- 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/QueryWindow.java
+++ 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/QueryWindow.java
@@ -18,6 +18,9 @@ package org.apache.nifi.controller.status.analytics;
 
 import java.util.Date;
 
+/**
+ * QueryWindow is used to track time intervals for querying for observations
+ */
 public class QueryWindow {
 
     private long startTimeMillis;
diff --git 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalytics.java
 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalytics.java
index a65629f..d8247b0 100644
--- 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalytics.java
+++ 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalytics.java
@@ -19,12 +19,27 @@ package org.apache.nifi.controller.status.analytics;
 import java.util.Map;
 
 /**
- * The StatusAnalytics interface offers methods for accessing predicted and 
other values for a single component (Connection instance, e.g.)
+ * The StatusAnalytics interface offers methods for accessing predicted and 
other values for a single component (Connection instance, e.g.).
  */
 public interface StatusAnalytics {
 
+    /**
+     * Get the Query Window used by the analytics instance
+     * @return queryWindow
+     */
     QueryWindow getQueryWindow();
+
+    /**
+     * Get available predictions where the key (String) in the map is the name 
of the prediction and value (Long)
+     * is the value for the prediction
+     * @return map
+     */
     Map<String,Long> getPredictions();
+
+    /**
+     * Return if analytics object supports online learning
+     * @return boolean
+     */
     boolean supportsOnlineLearning();
 
 
diff --git 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsEngine.java
 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsEngine.java
index 01021c2..57c13e6 100644
--- 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsEngine.java
+++ 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsEngine.java
@@ -18,6 +18,11 @@ package org.apache.nifi.controller.status.analytics;
 
 public interface StatusAnalyticsEngine {
 
+    /**
+     * Retrieve status analytics object for given component
+     * @param componentId identifier for component
+     * @return componenet specific status analytics object
+     */
     StatusAnalytics getStatusAnalytics(String componentId);
 
 }
diff --git 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsModel.java
 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsModel.java
index 8d601e6..3674b1f 100644
--- 
a/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsModel.java
+++ 
b/nifi-api/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsModel.java
@@ -21,11 +21,44 @@ import java.util.stream.Stream;
 
 public interface StatusAnalyticsModel {
 
+    /**
+     * Train model with provided observations (features, labels/targets)
+     * @param features Stream of feature observation values
+     * @param labels target observation values
+     */
     void learn(Stream<Double[]> features, Stream<Double> labels);
+
+    /**
+     * Return a prediction given observation values
+     * @param feature feature observation values values
+     * @return prediction of target/label
+     */
     Double predict(Double[] feature);
+
+    /**
+     * Predict a feature given a known target and known predictor values (if 
multiple predictors are included with model)
+     * @param predictVariableIndex index of feature that we would like to 
predict (index should align with order provided in model learn method)
+     * @param knownVariablesWithIndex a map of known predictor values with 
their indexes if available
+     * @param label known target value
+     * @return prediction for variable
+     */
     Double predictVariable(Integer predictVariableIndex, Map<Integer,Double> 
knownVariablesWithIndex, Double label);
+
+    /**
+     * Indicate if model supports online learning (e.g. can learn new 
observation samples to create a model)
+     * @return boolean indicating online learning support
+     */
     Boolean supportsOnlineLearning();
+
+    /**
+     * Returns a map of scores relevant to model (e.g. rSquared, Confidence 
Intervals, etc.)
+     * @return Map of score names with values
+     */
     Map<String,Double> getScores();
+
+    /**
+     * Resets a model by clearing observations and other calculations
+     */
     void clear();
 
 }
diff --git a/nifi-docs/src/main/asciidoc/administration-guide.adoc 
b/nifi-docs/src/main/asciidoc/administration-guide.adoc
index 0b2fd8c..085083d 100644
--- a/nifi-docs/src/main/asciidoc/administration-guide.adoc
+++ b/nifi-docs/src/main/asciidoc/administration-guide.adoc
@@ -2379,6 +2379,17 @@ root@kdc:~# ll /http*
 root@kdc:~#
 ....
 
+[[analytics_framework]]
+== Analytics Framework
+NiFi has an internal analytics framework which is currently used to predict 
back pressure occurrence, given the configured settings for threshold on a 
queue.  The model used by default for prediction is an ordinary least squares 
linear regression with multiple predictors which uses recent observations from 
a queue to determine the next value or percentage of total threshold that will 
be reached within a given interval.
+
+In order to generate predictions, snapshot history is reviewed on a regular 
basis to obtain enough data to generate a model.  By default snapshots are 
captured every minute. Models may need at least 2 or more observation in order 
to develop a reasonable prediction, therefore it may take up to 2 or more 
minutes for predictions to be available by default.  If predictions are needed 
sooner than what is provided by default the timing of snapshots can be adjusted 
using the  `nifi.components.s [...]
+
+The prediction interval can also be configured to to project out further when 
back pressure will occur.  Prediction that are further out in time require 
enough observations stored locally and may require tuning of the model's 
scoring threshold to allow NiFi to use a model within reasonable accuracy.  
Currently the R-Squared score is calculated and used to evaluate the generated 
model (which compares the model's performance against simply predicting with 
the average queue count/ byte size).
+
+See <<analytics_properties>> for complete information on configuring analytic 
properties.
+
+
 [[system_properties]]
 == System Properties
 The _nifi.properties_ file in the `conf` directory is the main configuration 
file for controlling how NiFi runs. This section provides an overview of the 
properties in this file and includes some notes on how to configure it in a way 
that will make upgrading easier. *After making changes to this file, restart 
NiFi in order
@@ -3320,14 +3331,14 @@ that is specified.
 [[analytics_properties]]
 === Analytics Properties
 
-These properties determine the behavior of the internal NiFi Analytics 
capability, such as backpressure prediction, and should be configured the same 
way on all nodes.
+These properties determine the behavior of the internal NiFi predictive 
analytics capability, such as backpressure prediction, and should be configured 
the same way on all nodes.
 
 |====
 |*Property*|*Description*
 |`nifi.analytics.predict.interval`|This indicates a time interval for which 
analytical predictions (queue saturation, e.g.) should be made. The default 
value is `3 mins`.
 |`nifi.analytics.connection.model.implementation`|This is the implementation 
class for the status analytics model used to make connection predictions.  The 
default value is 
`org.apache.nifi.controller.status.analytics.models.OrdinaryLeastSquares`.
 |`nifi.analytics.connection.model.score.name`|This is the name of the scoring 
type that should be used to evaluate model.  The default value is `rSquared`.
-|`nifi.analytics.connection.model.score.threshold`|This is the threshold for 
the scoring value (where score should be above given threshold).  The default 
value is `.9`.
+|`nifi.analytics.connection.model.score.threshold`|This is the threshold for 
the scoring value (where model score should be above given threshold).  The 
default value is `.9`.
 
 |====
 
diff --git a/nifi-docs/src/main/asciidoc/user-guide.adoc 
b/nifi-docs/src/main/asciidoc/user-guide.adoc
index 2a3a7b8..6e18563 100644
--- a/nifi-docs/src/main/asciidoc/user-guide.adoc
+++ b/nifi-docs/src/main/asciidoc/user-guide.adoc
@@ -1685,6 +1685,8 @@ The FlowFiles enqueued in a Connection can also be 
deleted when necessary. The r
 via `Empty queue` in the Connection's context menu. This action can also be 
performed if the source and destination
 are actively running.
 
+Hovering over the queue will also reveal predicted statistics on when the 
queue may encounter back pressure, either due to the object count or content 
size meeting the current threshold
+settings.  Predictions will only be available when NiFi has enough data in 
it's internal repository and if it's model is accurate enough to broadcast a 
prediction.
 
 [[Summary_Page]]
 === Summary Page
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/CachingConnectionStatusAnalyticsEngine.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/CachingConnectionStatusAnalyticsEngine.java
index 0cda68c..3588ed5 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/CachingConnectionStatusAnalyticsEngine.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/CachingConnectionStatusAnalyticsEngine.java
@@ -28,7 +28,12 @@ import org.slf4j.LoggerFactory;
 
 import com.github.benmanes.caffeine.cache.Cache;
 import com.github.benmanes.caffeine.cache.Caffeine;
-
+/**
+ * <p>
+ * An implementation of {@link StatusAnalyticsEngine} that supports caching of 
ConnectionStatusAnalytics objects.
+ * Caching engine in use is an in-memory cache where the caching policy is to 
expire 30 minutes after initial write to cache.
+ * </p>
+ */
 public class CachingConnectionStatusAnalyticsEngine extends 
ConnectionStatusAnalyticsEngine{
     private volatile Cache<String, StatusAnalytics> cache;
     private static final Logger LOG = 
LoggerFactory.getLogger(CachingConnectionStatusAnalyticsEngine.class);
@@ -43,6 +48,11 @@ public class CachingConnectionStatusAnalyticsEngine extends 
ConnectionStatusAnal
                 .build();
     }
 
+    /**
+     * Return a connection status analytics instance
+     * @param identifier connection identifier
+     * @return StatusAnalytics analytics object for given connection with id
+     */
     @Override
     public StatusAnalytics getStatusAnalytics(String identifier) {
 
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/ConnectionStatusAnalytics.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/ConnectionStatusAnalytics.java
index 68c472e..4bf1948 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/ConnectionStatusAnalytics.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/ConnectionStatusAnalytics.java
@@ -39,7 +39,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.primitives.Doubles;
-
+/**
+ * <p>
+ * An implementation of {@link StatusAnalytics} that is provides Connection 
related analysis/prediction for a given connection instance
+ * </p>
+ */
 public class ConnectionStatusAnalytics implements StatusAnalytics {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(ConnectionStatusAnalytics.class);
@@ -65,6 +69,9 @@ public class ConnectionStatusAnalytics implements 
StatusAnalytics {
         this.supportOnlineLearning = supportOnlineLearning;
     }
 
+    /**
+     *  Retrieve observations and train available model(s)
+     */
     public void refresh() {
 
         if (supportOnlineLearning && this.queryWindow != null) {
@@ -206,6 +213,11 @@ public class ConnectionStatusAnalytics implements 
StatusAnalytics {
 
     }
 
+    /**
+     * Returns the predicted object count percentage in queue when compared to 
threshold (maximum value allowed) at the next configured interval
+     *
+     * @return percentage of bytes used at next interval
+     */
     public Long getNextIntervalPercentageUseCount() {
 
         final Connection connection = getConnection();
@@ -223,6 +235,12 @@ public class ConnectionStatusAnalytics implements 
StatusAnalytics {
 
     }
 
+    /**
+     * Returns the predicted bytes percentage in queue when compared to 
threshold (maximum value allowed) at the next configured interval
+     *
+     * @return percentage of bytes used at next interval
+     */
+
     public Long getNextIntervalPercentageUseBytes() {
 
         final Connection connection = getConnection();
@@ -307,6 +325,13 @@ public class ConnectionStatusAnalytics implements 
StatusAnalytics {
         return statusReport.getReportEntry(this.connectionIdentifier);
     }
 
+    /**
+     * Convert time into valid prediction value (-1 indicates no prediction 
available).
+     * Valid time translates to prediction equal to current time or in the 
future
+     * @param prediction prediction value
+     * @param timeMillis time in milliseconds
+     * @return valid model boolean
+     */
     private Long convertTimePrediction(Double prediction, Long timeMillis) {
         if (Double.isNaN(prediction) || Double.isInfinite(prediction) || 
prediction < timeMillis) {
             return -1L;
@@ -315,6 +340,11 @@ public class ConnectionStatusAnalytics implements 
StatusAnalytics {
         }
     }
 
+    /**
+     * Convert count into valid prediction value (-1 indicates no prediction 
available)
+     * @param prediction prediction value
+     * @return prediction prediction value converted into valid value for 
consumption
+     */
     private Long convertCountPrediction(Double prediction) {
         if (Double.isNaN(prediction) || Double.isInfinite(prediction) || 
prediction < 0) {
             return -1L;
@@ -323,6 +353,12 @@ public class ConnectionStatusAnalytics implements 
StatusAnalytics {
         }
     }
 
+    /**
+     * Check if model is valid for prediction based on score
+     * @param model StatusAnalyticsModel object
+     * @return valid model boolean
+     */
+
     private boolean validModel(StatusAnalyticsModel model) {
 
         Double score = getScore(model);
@@ -337,6 +373,12 @@ public class ConnectionStatusAnalytics implements 
StatusAnalytics {
         }
     }
 
+    /**
+     * Get specific score from trained model
+     * @param model StatusAnalyticsModel object
+     * @return scoreValue
+     */
+
     private Double getScore(StatusAnalyticsModel model) {
         if (model != null && model.getScores() != null) {
             return model.getScores().get(scoreName);
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/ConnectionStatusAnalyticsEngine.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/ConnectionStatusAnalyticsEngine.java
index de815fa..17a2704 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/ConnectionStatusAnalyticsEngine.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/ConnectionStatusAnalyticsEngine.java
@@ -25,6 +25,11 @@ import org.apache.nifi.util.Tuple;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * <p>
+ * An implementation of {@link StatusAnalyticsEngine} that supports creation 
of ConnectionStatusAnalytics objects
+ * </p>
+ */
 public class ConnectionStatusAnalyticsEngine implements StatusAnalyticsEngine {
     private static final Logger LOG = 
LoggerFactory.getLogger(ConnectionStatusAnalyticsEngine.class);
     protected final ComponentStatusRepository statusRepository;
@@ -46,6 +51,11 @@ public class ConnectionStatusAnalyticsEngine implements 
StatusAnalyticsEngine {
         this.scoreThreshold = scoreThreshold;
     }
 
+    /**
+     * Return a connection status analytics instance
+     * @param identifier connection identifier
+     * @return status analytics object
+     */
     @Override
     public StatusAnalytics getStatusAnalytics(String identifier) {
         ConnectionStatusAnalytics connectionStatusAnalytics = new 
ConnectionStatusAnalytics(statusRepository, flowManager, 
flowFileEventRepository, modelMap, identifier, false);
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsModelMapFactory.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsModelMapFactory.java
index b8e6775..a1e82b2 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsModelMapFactory.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/StatusAnalyticsModelMapFactory.java
@@ -30,6 +30,11 @@ import org.apache.nifi.util.Tuple;
 import org.apache.nifi.web.api.dto.status.StatusHistoryDTO;
 import org.apache.nifi.web.api.dto.status.StatusSnapshotDTO;
 
+/**
+ * <p>
+ * This factory supports the creation of models and their associated 
extraction functions
+ * </p>
+ */
 public class StatusAnalyticsModelMapFactory {
 
     private final static String QUEUED_COUNT_METRIC = "queuedCount";
@@ -39,7 +44,12 @@ public class StatusAnalyticsModelMapFactory {
     private final static String OUTPUT_COUNT_METRIC = "outputCount";
     private final static String OUTPUT_BYTES_METRIC = "outputBytes";
 
-
+    /**
+     * Return mapping of models and extraction functions for connection status 
analytics prediction instances
+     * @param extensionManager Extension Manager object for instantiating 
classes
+     * @param niFiProperties NiFi Properties object
+     * @return
+     */
     public static Map<String, Tuple<StatusAnalyticsModel, 
StatusMetricExtractFunction>> getConnectionStatusModelMap(ExtensionManager 
extensionManager, NiFiProperties niFiProperties){
             Map<String, Tuple<StatusAnalyticsModel, 
StatusMetricExtractFunction>> modelMap = new HashMap<>();
             StatusMetricExtractFunction extract = 
getConnectionStatusExtractFunction();
@@ -50,6 +60,12 @@ public class StatusAnalyticsModelMapFactory {
             return modelMap;
     }
 
+    /**
+     * Create a connection model instance  using configurations set in NiFi 
properties
+     * @param extensionManager Extension Manager object for instantiating 
classes
+     * @param nifiProperties NiFi Properties object
+     * @return statusAnalyticsModel
+     */
     private static StatusAnalyticsModel createModelInstance(ExtensionManager 
extensionManager, NiFiProperties nifiProperties) {
         final String implementationClassName = 
nifiProperties.getProperty(NiFiProperties.ANALYTICS_CONNECTION_MODEL_IMPLEMENTATION,
 NiFiProperties.DEFAULT_ANALYTICS_CONNECTION_MODEL_IMPLEMENTATION);
         if (implementationClassName == null) {
@@ -63,6 +79,10 @@ public class StatusAnalyticsModelMapFactory {
         }
     }
 
+    /**
+     * Get a connection status extract function instance
+     * @return StatusMetricExtractFunction
+     */
     private static StatusMetricExtractFunction 
getConnectionStatusExtractFunction() {
 
         return (metric, statusHistory) -> {
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/StatusMetricExtractFunction.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/StatusMetricExtractFunction.java
index 38d2c86..5a9f705 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/StatusMetricExtractFunction.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/StatusMetricExtractFunction.java
@@ -23,5 +23,11 @@ import org.apache.nifi.util.Tuple;
 
 public interface StatusMetricExtractFunction {
 
+    /**
+     * Searches through status history to extract observations for a given 
metric
+     * @param metric metric value that should be extracted
+     * @param statusHistory StatusHistory object used to search metrics
+     * @return a Tuple with extracted observations (features and 
targets/labels)
+     */
     Tuple<Stream<Double[]>, Stream<Double>> extractMetric(String metric, 
StatusHistory statusHistory);
 }
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/BivariateStatusAnalyticsModel.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/BivariateStatusAnalyticsModel.java
index 9dcc45b..2745bf1 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/BivariateStatusAnalyticsModel.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/BivariateStatusAnalyticsModel.java
@@ -20,7 +20,11 @@ import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.nifi.controller.status.analytics.StatusAnalyticsModel;
-
+/**
+ * <p>
+ * An abstract class for implementations of {@link StatusAnalyticsModel} which 
makes bivariate models compatible with analytics interface
+ * </p>
+ */
 public abstract class BivariateStatusAnalyticsModel implements 
StatusAnalyticsModel {
 
     @Override
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/OrdinaryLeastSquares.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/OrdinaryLeastSquares.java
index 74aa8f8..9ee5e03 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/OrdinaryLeastSquares.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/OrdinaryLeastSquares.java
@@ -27,6 +27,12 @@ import 
org.apache.nifi.controller.status.analytics.StatusAnalyticsModel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * <p>
+ * An implementation of the {@link StatusAnalyticsModel} that uses Ordinary 
Least Squares computation for regression.
+ * This model support multiple regression
+ * </p>
+ */
 public class OrdinaryLeastSquares implements StatusAnalyticsModel {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(OrdinaryLeastSquares.class);
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/SimpleRegression.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/SimpleRegression.java
index a6f1455..1b6e40e 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/SimpleRegression.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/status/analytics/models/SimpleRegression.java
@@ -23,9 +23,17 @@ import java.util.stream.Stream;
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.math3.stat.regression.RegressionResults;
+import org.apache.nifi.controller.status.analytics.StatusAnalyticsModel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * <p>
+ * An implementation of the {@link StatusAnalyticsModel} that uses the 
SimpleRegression class from math for computation of regression. It only 
supports Bivariates
+ * for x,y (multiple predictors are not supported by SimpleRegression). Online 
learning is supported for collecting multiple samples at different points in 
time
+ *
+ * </p>
+ */
 public class SimpleRegression extends BivariateStatusAnalyticsModel {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(SimpleRegression.class);

Reply via email to