nifi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From marka...@apache.org
Subject [5/5] nifi git commit: NIFI-1563: Federate requests and merge responses from nodes instead of storing bulletins and stats at NCM
Date Thu, 03 Mar 2016 18:29:57 GMT
NIFI-1563: Federate requests and merge responses from nodes instead of storing bulletins and stats at NCM


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/ad32cb82
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/ad32cb82
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/ad32cb82

Branch: refs/heads/NIFI-1563
Commit: ad32cb8243cc20ce7b04cc1fce0263503322ce5b
Parents: 6776060
Author: Mark Payne <markap14@hotmail.com>
Authored: Thu Mar 3 13:29:34 2016 -0500
Committer: Mark Payne <markap14@hotmail.com>
Committed: Thu Mar 3 13:29:34 2016 -0500

----------------------------------------------------------------------
 .../nifi-framework/nifi-client-dto/pom.xml      |   8 +
 .../api/dto/status/ClusterStatusHistoryDTO.java |  79 --
 .../web/api/dto/status/ConnectionStatusDTO.java | 168 +++--
 .../web/api/dto/status/ControllerStatusDTO.java | 134 ++--
 .../api/dto/status/NodeStatusHistoryDTO.java    |  60 --
 .../nifi/web/api/dto/status/PortStatusDTO.java  | 100 ++-
 .../api/dto/status/ProcessGroupStatusDTO.java   | 372 +++++++---
 .../web/api/dto/status/ProcessorStatusDTO.java  | 159 +++-
 .../dto/status/RemoteProcessGroupStatusDTO.java | 107 ++-
 .../nifi/web/api/dto/status/StatusDTO.java      |  14 +-
 .../web/api/dto/status/StatusHistoryDTO.java    |  66 +-
 .../api/dto/status/StatusHistoryDetailDTO.java  |  59 --
 .../nifi/web/api/dto/status/StatusMerger.java   | 375 ++++++++++
 .../api/entity/ClusterStatusHistoryEntity.java  |  43 --
 .../cluster/protocol/NodeProtocolSender.java    |  10 -
 .../protocol/impl/NodeProtocolSenderImpl.java   |   6 -
 .../impl/NodeProtocolSenderListener.java        |   6 -
 .../protocol/jaxb/message/ObjectFactory.java    |   5 -
 .../protocol/message/NodeBulletinsMessage.java  |  42 --
 .../protocol/message/ProtocolMessage.java       |   2 -
 .../nifi/cluster/manager/ClusterManager.java    |   7 -
 .../manager/impl/ClusteredEventAccess.java      |   2 +-
 .../cluster/manager/impl/WebClusterManager.java | 737 +++++++++----------
 .../apache/nifi/controller/FlowController.java  | 192 +----
 .../history/ConnectionStatusDescriptor.java     | 110 +++
 .../history/ProcessGroupStatusDescriptor.java   | 143 ++++
 .../history/ProcessorStatusDescriptor.java      | 220 ++++++
 .../RemoteProcessGroupStatusDescriptor.java     | 127 ++++
 .../status/history/StatusHistoryUtil.java       |   4 +-
 .../VolatileComponentStatusRepository.java      | 418 +----------
 .../events/NodeBulletinProcessingStrategy.java  |  38 +-
 .../nifi/events/VolatileBulletinRepository.java |  20 -
 .../org/apache/nifi/web/NiFiServiceFacade.java  |  24 -
 .../nifi/web/StandardNiFiServiceFacade.java     | 129 +---
 .../apache/nifi/web/api/ClusterResource.java    | 221 +-----
 .../apache/nifi/web/api/ConnectionResource.java |  89 ++-
 .../apache/nifi/web/api/ControllerResource.java |   4 +
 .../nifi/web/api/ProcessGroupResource.java      |  29 +-
 .../apache/nifi/web/api/ProcessorResource.java  |  37 +-
 .../web/api/RemoteProcessGroupResource.java     |  30 +-
 .../nifi/web/api/ReportingTaskResource.java     |  38 +-
 .../org/apache/nifi/web/api/dto/DtoFactory.java |  98 ++-
 .../src/main/resources/nifi-web-api-context.xml |   1 +
 43 files changed, 2364 insertions(+), 2169 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/pom.xml
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/pom.xml b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/pom.xml
index c1cb557..3318f3b 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/pom.xml
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/pom.xml
@@ -26,5 +26,13 @@
             <groupId>com.wordnik</groupId>
             <artifactId>swagger-annotations</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-utils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-api</artifactId>
+        </dependency>
     </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ClusterStatusHistoryDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ClusterStatusHistoryDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ClusterStatusHistoryDTO.java
deleted file mode 100644
index 997e24b..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ClusterStatusHistoryDTO.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.
- */
-package org.apache.nifi.web.api.dto.status;
-
-import com.wordnik.swagger.annotations.ApiModelProperty;
-import java.util.Collection;
-import java.util.Date;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import org.apache.nifi.web.api.dto.util.TimeAdapter;
-
-/**
- * DTO for serializing the a status history across the cluster.
- */
-@XmlType(name = "clusterStatusHistory")
-public class ClusterStatusHistoryDTO {
-
-    private Collection<NodeStatusHistoryDTO> nodeStatusHistory;
-    private StatusHistoryDTO clusterStatusHistory;
-    private Date generated;
-
-    /**
-     * @return when this status history was generated
-     */
-    @XmlJavaTypeAdapter(TimeAdapter.class)
-    @ApiModelProperty(
-            value = "When the status history was generated."
-    )
-    public Date getGenerated() {
-        return generated;
-    }
-
-    public void setGenerated(Date generated) {
-        this.generated = generated;
-    }
-
-    /**
-     * @return status history from each node in the cluster
-     */
-    @ApiModelProperty(
-            value = "The status history from each node."
-    )
-    public Collection<NodeStatusHistoryDTO> getNodeStatusHistory() {
-        return nodeStatusHistory;
-    }
-
-    public void setNodeStatusHistory(Collection<NodeStatusHistoryDTO> nodeStatusHistory) {
-        this.nodeStatusHistory = nodeStatusHistory;
-    }
-
-    /**
-     * @return status history for this component across the entire cluster
-     */
-    @ApiModelProperty(
-            value = "The status history for the entire cluster."
-    )
-    public StatusHistoryDTO getClusterStatusHistory() {
-        return clusterStatusHistory;
-    }
-
-    public void setClusterStatusHistory(StatusHistoryDTO clusterStatusHistory) {
-        this.clusterStatusHistory = clusterStatusHistory;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusDTO.java
index dc17c21..4083e1f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusDTO.java
@@ -23,29 +23,34 @@ import javax.xml.bind.annotation.XmlType;
  * DTO for serializing the status of a connection.
  */
 @XmlType(name = "connectionStatus")
-public class ConnectionStatusDTO {
+public class ConnectionStatusDTO implements Cloneable {
 
     private String id;
     private String groupId;
     private String name;
-    private String input;
-    private String queuedCount;
-    private String queuedSize;
-    private String queued;
-    private String output;
 
     private String sourceId;
     private String sourceName;
     private String destinationId;
     private String destinationName;
 
+    private Integer flowFilesIn = 0;
+    private Long bytesIn = 0L;
+    private String input;
+    private Integer flowFilesOut = 0;
+    private Long bytesOut = 0L;
+    private String output;
+    private Integer flowFilesQueued = 0;
+    private Long bytesQueued = 0L;
+    private String queued;
+    private String queuedSize;
+    private String queuedCount;
+
     /* getters / setters */
     /**
      * @return The connection id
      */
-    @ApiModelProperty(
-            value = "The id of the connection."
-    )
+    @ApiModelProperty("The id of the connection.")
     public String getId() {
         return id;
     }
@@ -57,9 +62,7 @@ public class ConnectionStatusDTO {
     /**
      * @return the ID of the Process Group to which this connection belongs.
      */
-    @ApiModelProperty(
-            value = "The id of the process group the connection belongs to."
-    )
+    @ApiModelProperty("The id of the process group the connection belongs to.")
     public String getGroupId() {
         return groupId;
     }
@@ -71,9 +74,7 @@ public class ConnectionStatusDTO {
     /**
      * @return name of this connection
      */
-    @ApiModelProperty(
-            value = "The name of the connection."
-    )
+    @ApiModelProperty("The name of the connection.")
     public String getName() {
         return name;
     }
@@ -85,9 +86,7 @@ public class ConnectionStatusDTO {
     /**
      * @return total count of flow files that are queued
      */
-    @ApiModelProperty(
-            value = "The number of flowfiles that are queued."
-    )
+    @ApiModelProperty("The number of flowfiles that are queued, pretty printed.")
     public String getQueuedCount() {
         return queuedCount;
     }
@@ -96,16 +95,28 @@ public class ConnectionStatusDTO {
         this.queuedCount = queuedCount;
     }
 
+
     /**
      * @return total size of flow files that are queued
      */
-    @ApiModelProperty(
-            value = "The total size of flowfiles that are queued formatted."
-    )
+    @ApiModelProperty("The total size of flowfiles that are queued formatted.")
     public String getQueuedSize() {
         return queuedSize;
     }
 
+
+    public void setInput(String input) {
+        this.input = input;
+    }
+
+    public void setOutput(String output) {
+        this.output = output;
+    }
+
+    public void setQueued(String queued) {
+        this.queued = queued;
+    }
+
     public void setQueuedSize(String queuedSize) {
         this.queuedSize = queuedSize;
     }
@@ -113,23 +124,16 @@ public class ConnectionStatusDTO {
     /**
      * @return The total count and size of queued flow files
      */
-    @ApiModelProperty(
-            value = "The total count and size of queued flowfiles formatted."
-    )
+    @ApiModelProperty("The total count and size of queued flowfiles formatted.")
     public String getQueued() {
         return queued;
     }
 
-    public void setQueued(String queued) {
-        this.queued = queued;
-    }
 
     /**
      * @return id of the source of this connection
      */
-    @ApiModelProperty(
-            value = "The id of the source of the connection."
-    )
+    @ApiModelProperty("The id of the source of the connection.")
     public String getSourceId() {
         return sourceId;
     }
@@ -141,9 +145,7 @@ public class ConnectionStatusDTO {
     /**
      * @return name of the source of this connection
      */
-    @ApiModelProperty(
-            value = "The name of the source of the connection."
-    )
+    @ApiModelProperty("The name of the source of the connection.")
     public String getSourceName() {
         return sourceName;
     }
@@ -155,9 +157,7 @@ public class ConnectionStatusDTO {
     /**
      * @return id of the destination of this connection
      */
-    @ApiModelProperty(
-            value = "The id of the destination of the connection."
-    )
+    @ApiModelProperty("The id of the destination of the connection.")
     public String getDestinationId() {
         return destinationId;
     }
@@ -169,9 +169,7 @@ public class ConnectionStatusDTO {
     /**
      * @return name of the destination of this connection
      */
-    @ApiModelProperty(
-            value = "The name of the destination of the connection."
-    )
+    @ApiModelProperty("The name of the destination of the connection.")
     public String getDestinationName() {
         return destinationName;
     }
@@ -183,29 +181,99 @@ public class ConnectionStatusDTO {
     /**
      * @return input for this connection
      */
-    @ApiModelProperty(
-            value = "The input count/size for the connection in the last 5 minutes."
-    )
+    @ApiModelProperty("The input count/size for the connection in the last 5 minutes, pretty printed.")
     public String getInput() {
         return input;
     }
 
-    public void setInput(String input) {
-        this.input = input;
-    }
 
     /**
      * @return output for this connection
      */
-    @ApiModelProperty(
-            value = "The output count/sie for the connection in the last 5 minutes."
-    )
+    @ApiModelProperty("The output count/sie for the connection in the last 5 minutes, pretty printed.")
     public String getOutput() {
         return output;
     }
 
-    public void setOutput(String output) {
-        this.output = output;
+
+    @ApiModelProperty("The number of FlowFiles that have come into the connection in the last 5 minutes.")
+    public Integer getFlowFilesIn() {
+        return flowFilesIn;
+    }
+
+    public void setFlowFilesIn(Integer flowFilesIn) {
+        this.flowFilesIn = flowFilesIn;
+    }
+
+    @ApiModelProperty("The size of the FlowFiles that have come into the connection in the last 5 minutes.")
+    public Long getBytesIn() {
+        return bytesIn;
+    }
+
+    public void setBytesIn(Long bytesIn) {
+        this.bytesIn = bytesIn;
+    }
+
+    @ApiModelProperty("The number of FlowFiles that have left the connection in the last 5 minutes.")
+    public Integer getFlowFilesOut() {
+        return flowFilesOut;
+    }
+
+    public void setFlowFilesOut(Integer flowFilesOut) {
+        this.flowFilesOut = flowFilesOut;
+    }
+
+    @ApiModelProperty("The number of bytes that have left the connection in the last 5 minutes.")
+    public Long getBytesOut() {
+        return bytesOut;
+    }
+
+    public void setBytesOut(Long bytesOut) {
+        this.bytesOut = bytesOut;
+    }
+
+    @ApiModelProperty("The number of FlowFiles that are currently queued in the connection.")
+    public Integer getFlowFilesQueued() {
+        return flowFilesQueued;
+    }
+
+    public void setFlowFilesQueued(Integer flowFilesQueued) {
+        this.flowFilesQueued = flowFilesQueued;
     }
 
+    @ApiModelProperty("The size of the FlowFiles that are currently queued in the connection.")
+    public Long getBytesQueued() {
+        return bytesQueued;
+    }
+
+    public void setBytesQueued(Long bytesQueued) {
+        this.bytesQueued = bytesQueued;
+    }
+
+
+    @Override
+    public ConnectionStatusDTO clone() {
+        final ConnectionStatusDTO other = new ConnectionStatusDTO();
+        other.setDestinationId(getDestinationId());
+        other.setDestinationName(getDestinationName());
+        other.setGroupId(getGroupId());
+        other.setId(getId());
+        other.setName(getName());
+        other.setSourceId(getSourceId());
+        other.setSourceName(getSourceName());
+
+        other.setFlowFilesIn(getFlowFilesIn());
+        other.setBytesIn(getBytesIn());
+        other.setInput(getInput());
+        other.setFlowFilesOut(getFlowFilesOut());
+        other.setBytesOut(getBytesOut());
+        other.setOutput(getOutput());
+        other.setFlowFilesQueued(getFlowFilesQueued());
+        other.setBytesQueued(getBytesQueued());
+        other.setQueued(getQueued());
+        other.setQueuedCount(getQueuedCount());
+        other.setQueuedSize(getQueuedSize());
+
+        return other;
+    }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ControllerStatusDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ControllerStatusDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ControllerStatusDTO.java
index 5d5eddf..03e2124 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ControllerStatusDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ControllerStatusDTO.java
@@ -17,6 +17,8 @@
 package org.apache.nifi.web.api.dto.status;
 
 import com.wordnik.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
 import java.util.List;
 import javax.xml.bind.annotation.XmlType;
 import org.apache.nifi.web.api.dto.BulletinDTO;
@@ -25,19 +27,25 @@ import org.apache.nifi.web.api.dto.BulletinDTO;
  * The status of this NiFi controller.
  */
 @XmlType(name = "controllerStatus")
-public class ControllerStatusDTO {
+public class ControllerStatusDTO implements Cloneable {
 
-    private Integer activeThreadCount;
+    private Integer activeThreadCount = 0;
     private String queued;
+    private Integer flowFilesQueued = 0;
+    private Long bytesQueued = 0L;
+
     private String connectedNodes;
+    private Integer connectedNodeCount = 0;
+    private Integer totalNodeCount = 0;
+
     private Boolean hasPendingAccounts;
 
-    private Integer runningCount;
-    private Integer stoppedCount;
-    private Integer invalidCount;
-    private Integer disabledCount;
-    private Integer activeRemotePortCount;
-    private Integer inactiveRemotePortCount;
+    private Integer runningCount = 0;
+    private Integer stoppedCount = 0;
+    private Integer invalidCount = 0;
+    private Integer disabledCount = 0;
+    private Integer activeRemotePortCount = 0;
+    private Integer inactiveRemotePortCount = 0;
 
     private List<BulletinDTO> bulletins;
     private List<BulletinDTO> controllerServiceBulletins;
@@ -48,9 +56,7 @@ public class ControllerStatusDTO {
      *
      * @return The active thread count
      */
-    @ApiModelProperty(
-            value = "The number of active threads in the NiFi."
-    )
+    @ApiModelProperty("The number of active threads in the NiFi.")
     public Integer getActiveThreadCount() {
         return activeThreadCount;
     }
@@ -62,9 +68,7 @@ public class ControllerStatusDTO {
     /**
      * @return queue for the controller
      */
-    @ApiModelProperty(
-            value = "The number of flowfilew queued in the NiFi."
-    )
+    @ApiModelProperty("The number of flowfilew queued in the NiFi.")
     public String getQueued() {
         return queued;
     }
@@ -77,9 +81,7 @@ public class ControllerStatusDTO {
      * @return Used in clustering, will report the number of nodes connected vs
      * the number of nodes in the cluster
      */
-    @ApiModelProperty(
-            value = "When clustered, reports the number of nodes connected vs the number of nodes in the cluster."
-    )
+    @ApiModelProperty("When clustered, reports the number of nodes connected vs the number of nodes in the cluster.")
     public String getConnectedNodes() {
         return connectedNodes;
     }
@@ -91,9 +93,7 @@ public class ControllerStatusDTO {
     /**
      * @return System bulletins to be reported to the user
      */
-    @ApiModelProperty(
-            value = "System level bulletins to be reported to the user."
-    )
+    @ApiModelProperty("System level bulletins to be reported to the user.")
     public List<BulletinDTO> getBulletins() {
         return bulletins;
     }
@@ -105,9 +105,7 @@ public class ControllerStatusDTO {
     /**
      * @return Controller service bulletins to be reported to the user
      */
-    @ApiModelProperty(
-            value = "Controller service bulletins to be reported to the user."
-    )
+    @ApiModelProperty("Controller service bulletins to be reported to the user.")
     public List<BulletinDTO> getControllerServiceBulletins() {
         return controllerServiceBulletins;
     }
@@ -119,9 +117,7 @@ public class ControllerStatusDTO {
     /**
      * @return Reporting task bulletins to be reported to the user
      */
-    @ApiModelProperty(
-            value = "Reporting task bulletins to be reported to the user."
-    )
+    @ApiModelProperty("Reporting task bulletins to be reported to the user.")
     public List<BulletinDTO> getReportingTaskBulletins() {
         return reportingTaskBulletins;
     }
@@ -133,9 +129,7 @@ public class ControllerStatusDTO {
     /**
      * @return whether or not there are pending user requests
      */
-    @ApiModelProperty(
-            value = "Whether there are any pending user account requests."
-    )
+    @ApiModelProperty("Whether there are any pending user account requests.")
     public Boolean getHasPendingAccounts() {
         return hasPendingAccounts;
     }
@@ -147,9 +141,7 @@ public class ControllerStatusDTO {
     /**
      * @return number of running components in this controller
      */
-    @ApiModelProperty(
-            value = "The number of running components in the NiFi."
-    )
+    @ApiModelProperty("The number of running components in the NiFi.")
     public Integer getRunningCount() {
         return runningCount;
     }
@@ -161,9 +153,7 @@ public class ControllerStatusDTO {
     /**
      * @return number of stopped components in this controller
      */
-    @ApiModelProperty(
-            value = "The number of stopped components in the NiFi."
-    )
+    @ApiModelProperty("The number of stopped components in the NiFi.")
     public Integer getStoppedCount() {
         return stoppedCount;
     }
@@ -175,9 +165,7 @@ public class ControllerStatusDTO {
     /**
      * @return number of invalid components in this controller
      */
-    @ApiModelProperty(
-            value = "The number of invalid components in the NiFi."
-    )
+    @ApiModelProperty("The number of invalid components in the NiFi.")
     public Integer getInvalidCount() {
         return invalidCount;
     }
@@ -189,9 +177,7 @@ public class ControllerStatusDTO {
     /**
      * @return number of disabled components in this controller
      */
-    @ApiModelProperty(
-            value = "The number of disabled components in the NiFi."
-    )
+    @ApiModelProperty("The number of disabled components in the NiFi.")
     public Integer getDisabledCount() {
         return disabledCount;
     }
@@ -203,9 +189,7 @@ public class ControllerStatusDTO {
     /**
      * @return number of active remote ports in this controller
      */
-    @ApiModelProperty(
-            value = "The number of active remote ports in the NiFi."
-    )
+    @ApiModelProperty("The number of active remote ports in the NiFi.")
     public Integer getActiveRemotePortCount() {
         return activeRemotePortCount;
     }
@@ -217,9 +201,7 @@ public class ControllerStatusDTO {
     /**
      * @return number of inactive remote ports in this controller
      */
-    @ApiModelProperty(
-            value = "The number of inactive remote ports in the NiFi."
-    )
+    @ApiModelProperty("The number of inactive remote ports in the NiFi.")
     public Integer getInactiveRemotePortCount() {
         return inactiveRemotePortCount;
     }
@@ -228,4 +210,62 @@ public class ControllerStatusDTO {
         this.inactiveRemotePortCount = inactiveRemotePortCount;
     }
 
+    @ApiModelProperty("The number of FlowFiles queued across the entire flow")
+    public Integer getFlowFilesQueued() {
+        return flowFilesQueued;
+    }
+
+    public void setFlowFilesQueued(Integer flowFilesQueued) {
+        this.flowFilesQueued = flowFilesQueued;
+    }
+
+    @ApiModelProperty("The size of the FlowFiles queued across the entire flow")
+    public Long getBytesQueued() {
+        return bytesQueued;
+    }
+
+    public void setBytesQueued(Long bytesQueued) {
+        this.bytesQueued = bytesQueued;
+    }
+
+    @ApiModelProperty("The number of nodes that are currently connected to the cluster")
+    public Integer getConnectedNodeCount() {
+        return connectedNodeCount;
+    }
+
+    public void setConnectedNodeCount(Integer connectedNodeCount) {
+        this.connectedNodeCount = connectedNodeCount;
+    }
+
+    @ApiModelProperty("The number of nodes in the cluster, regardless of whether or not they are connected")
+    public Integer getTotalNodeCount() {
+        return totalNodeCount;
+    }
+
+    public void setTotalNodeCount(Integer totalNodeCount) {
+        this.totalNodeCount = totalNodeCount;
+    }
+
+    @Override
+    public ControllerStatusDTO clone() {
+        final ControllerStatusDTO other = new ControllerStatusDTO();
+        other.setActiveThreadCount(getActiveThreadCount());
+        other.setQueued(getQueued());
+        other.setFlowFilesQueued(getFlowFilesQueued());
+        other.setBytesQueued(getBytesQueued());
+        other.setConnectedNodes(getConnectedNodes());
+        other.setConnectedNodeCount(getConnectedNodeCount());
+        other.setTotalNodeCount(getTotalNodeCount());
+        other.setHasPendingAccounts(getHasPendingAccounts());
+        other.setRunningCount(getRunningCount());
+        other.setStoppedCount(getStoppedCount());
+        other.setInvalidCount(getInvalidCount());
+        other.setDisabledCount(getDisabledCount());
+        other.setActiveRemotePortCount(getActiveRemotePortCount());
+        other.setInactiveRemotePortCount(getInactiveRemotePortCount());
+        other.setBulletins(getBulletins() == null ? null : new ArrayList<>(getBulletins()));
+        other.setControllerServiceBulletins(getControllerServiceBulletins() == null ? null : new ArrayList<>(getControllerServiceBulletins()));
+        other.setReportingTaskBulletins(getReportingTaskBulletins() == null ? null : new ArrayList<>(getReportingTaskBulletins()));
+        return other;
+    }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/NodeStatusHistoryDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/NodeStatusHistoryDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/NodeStatusHistoryDTO.java
deleted file mode 100644
index 5cf9f41..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/NodeStatusHistoryDTO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.
- */
-package org.apache.nifi.web.api.dto.status;
-
-import com.wordnik.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlType;
-import org.apache.nifi.web.api.dto.NodeDTO;
-
-/**
- * DTO for serializing the status history for a particular node.
- */
-@XmlType(name = "nodeStatusHistory")
-public class NodeStatusHistoryDTO {
-
-    private NodeDTO node;
-    private StatusHistoryDTO statusHistory;
-
-    /**
-     * @return the node
-     */
-    @ApiModelProperty(
-            value = "The node."
-    )
-    public NodeDTO getNode() {
-        return node;
-    }
-
-    public void setNode(NodeDTO node) {
-        this.node = node;
-    }
-
-    /**
-     * @return processor status history
-     */
-    @ApiModelProperty(
-            value = "The processor status for each node."
-    )
-    public StatusHistoryDTO getStatusHistory() {
-        return statusHistory;
-    }
-
-    public void setStatusHistory(StatusHistoryDTO statusHistory) {
-        this.statusHistory = statusHistory;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/PortStatusDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/PortStatusDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/PortStatusDTO.java
index c1d95d0..6a2a972 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/PortStatusDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/PortStatusDTO.java
@@ -16,30 +16,35 @@
  */
 package org.apache.nifi.web.api.dto.status;
 
-import com.wordnik.swagger.annotations.ApiModelProperty;
 import javax.xml.bind.annotation.XmlType;
 
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
 /**
  * The status for a port in this NiFi.
  */
 @XmlType(name = "portStatus")
-public class PortStatusDTO extends StatusDTO {
+public class PortStatusDTO extends StatusDTO implements Cloneable {
 
     private String id;
     private String groupId;
     private String name;
-    private Integer activeThreadCount;
+
+    private Integer activeThreadCount = 0;
+    private Integer flowFilesIn = 0;
+    private Long bytesIn = 0L;
     private String input;
+    private Integer flowFilesOut = 0;
+    private Long bytesOut = 0L;
     private String output;
+
     private Boolean transmitting;
     private String runStatus;
 
     /**
      * @return whether this port has incoming or outgoing connections to a remote NiFi
      */
-    @ApiModelProperty(
-            value = "Whether the port has incoming or outgoing connections to a remote NiFi."
-    )
+    @ApiModelProperty("Whether the port has incoming or outgoing connections to a remote NiFi.")
     public Boolean isTransmitting() {
         return transmitting;
     }
@@ -51,9 +56,7 @@ public class PortStatusDTO extends StatusDTO {
     /**
      * @return the active thread count for this port
      */
-    @ApiModelProperty(
-            value = "The active thread count for the port."
-    )
+    @ApiModelProperty("The active thread count for the port.")
     public Integer getActiveThreadCount() {
         return activeThreadCount;
     }
@@ -65,9 +68,7 @@ public class PortStatusDTO extends StatusDTO {
     /**
      * @return id of this port
      */
-    @ApiModelProperty(
-            value = "The id of the port."
-    )
+    @ApiModelProperty("The id of the port.")
     public String getId() {
         return id;
     }
@@ -79,9 +80,7 @@ public class PortStatusDTO extends StatusDTO {
     /**
      * @return id of the group this port resides in
      */
-    @ApiModelProperty(
-            value = "The id of the parent process group of the port."
-    )
+    @ApiModelProperty("The id of the parent process group of the port.")
     public String getGroupId() {
         return groupId;
     }
@@ -93,9 +92,7 @@ public class PortStatusDTO extends StatusDTO {
     /**
      * @return name of this port
      */
-    @ApiModelProperty(
-            value = "The name of the port."
-    )
+    @ApiModelProperty("The name of the port.")
     public String getName() {
         return name;
     }
@@ -107,9 +104,7 @@ public class PortStatusDTO extends StatusDTO {
     /**
      * @return run status of this port
      */
-    @ApiModelProperty(
-            value = "The run status of the port."
-    )
+    @ApiModelProperty("The run status of the port.")
     public String getRunStatus() {
         return runStatus;
     }
@@ -121,9 +116,7 @@ public class PortStatusDTO extends StatusDTO {
     /**
      * @return The total count and size of flow files that have been accepted in the last five minutes
      */
-    @ApiModelProperty(
-            value = "The count/size of flowfiles that have been accepted in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size of flowfiles that have been accepted in the last 5 minutes.")
     public String getInput() {
         return input;
     }
@@ -135,9 +128,7 @@ public class PortStatusDTO extends StatusDTO {
     /**
      * @return The total count and size of flow files that have been processed in the last five minutes
      */
-    @ApiModelProperty(
-            value = "The count/size of flowfiles that have been processed in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size of flowfiles that have been processed in the last 5 minutes.")
     public String getOutput() {
         return output;
     }
@@ -146,4 +137,59 @@ public class PortStatusDTO extends StatusDTO {
         this.output = output;
     }
 
+    @ApiModelProperty("The number of FlowFiles that have been accepted in the last 5 minutes.")
+    public Integer getFlowFilesIn() {
+        return flowFilesIn;
+    }
+
+    public void setFlowFilesIn(Integer flowFilesIn) {
+        this.flowFilesIn = flowFilesIn;
+    }
+
+    @ApiModelProperty("The size of hte FlowFiles that have been accepted in the last 5 minutes.")
+    public Long getBytesIn() {
+        return bytesIn;
+    }
+
+    public void setBytesIn(Long bytesIn) {
+        this.bytesIn = bytesIn;
+    }
+
+    @ApiModelProperty("The number of FlowFiles that have been processed in the last 5 minutes.")
+    public Integer getFlowFilesOut() {
+        return flowFilesOut;
+    }
+
+    public void setFlowFilesOut(Integer flowFilesOut) {
+        this.flowFilesOut = flowFilesOut;
+    }
+
+    @ApiModelProperty("The number of bytes that have been processed in the last 5 minutes.")
+    public Long getBytesOut() {
+        return bytesOut;
+    }
+
+    public void setBytesOut(Long bytesOut) {
+        this.bytesOut = bytesOut;
+    }
+
+    @Override
+    public PortStatusDTO clone() {
+        final PortStatusDTO other = new PortStatusDTO();
+        other.setId(getId());
+        other.setGroupId(getGroupId());
+        other.setName(getName());
+        other.setActiveThreadCount(getActiveThreadCount());
+        other.setFlowFilesIn(getFlowFilesIn());
+        other.setBytesIn(getBytesIn());
+        other.setFlowFilesOut(getFlowFilesOut());
+        other.setBytesOut(getBytesOut());
+        other.setTransmitting(isTransmitting());
+        other.setRunStatus(getRunStatus());
+        other.setInput(getInput());
+        other.setOutput(getOutput());
+        other.setBulletins(cloneBulletins());
+
+        return other;
+    }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessGroupStatusDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessGroupStatusDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessGroupStatusDTO.java
index 3ebae8f..ff7eecc 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessGroupStatusDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessGroupStatusDTO.java
@@ -16,18 +16,23 @@
  */
 package org.apache.nifi.web.api.dto.status;
 
-import com.wordnik.swagger.annotations.ApiModelProperty;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
+import java.util.List;
+
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
 import org.apache.nifi.web.api.dto.util.TimeAdapter;
 
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
 /**
  * The status for a process group in this NiFi.
  */
 @XmlType(name = "processGroupStatus")
-public class ProcessGroupStatusDTO extends StatusDTO {
+public class ProcessGroupStatusDTO extends StatusDTO implements Cloneable {
 
     private String id;
     private String name;
@@ -38,17 +43,38 @@ public class ProcessGroupStatusDTO extends StatusDTO {
     private Collection<PortStatusDTO> inputPortStatus;
     private Collection<PortStatusDTO> outputPortStatus;
 
+    private Integer flowFilesIn = 0;
+    private Long bytesIn = 0L;
     private String input;
+
+    private Integer flowFilesQueued = 0;
+    private Long bytesQueued = 0L;
+    private String queued;
     private String queuedCount;
     private String queuedSize;
-    private String queued;
+
+    private Long bytesRead = 0L;
     private String read;
+    private Long bytesWritten = 0L;
     private String written;
+
+    private Integer flowFilesOut = 0;
+    private Long bytesOut = 0L;
     private String output;
+
+    private Integer flowFilesTransferred = 0;
+    private Long bytesTransferred = 0L;
     private String transferred;
+
+    private Long bytesReceived = 0L;
+    private Integer flowFilesReceived = 0;
     private String received;
+
+    private Long bytesSent = 0L;
+    private Integer flowFilesSent = 0;
     private String sent;
-    private Integer activeThreadCount;
+
+    private Integer activeThreadCount = 0;
     private Date statsLastRefreshed;
 
     /**
@@ -56,9 +82,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
      *
      * @return The id for the process group
      */
-    @ApiModelProperty(
-            value = "The id of the process group."
-    )
+    @ApiModelProperty("The id of the process group.")
     public String getId() {
         return id;
     }
@@ -70,9 +94,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return name of this process group
      */
-    @ApiModelProperty(
-            value = "The name of this process group."
-    )
+    @ApiModelProperty("The name of this process group.")
     public String getName() {
         return name;
     }
@@ -84,9 +106,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return active thread count for this process group
      */
-    @ApiModelProperty(
-            value = "The active thread count for this process group."
-    )
+    @ApiModelProperty("The active thread count for this process group.")
     public Integer getActiveThreadCount() {
         return activeThreadCount;
     }
@@ -100,9 +120,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
      *
      * @return The status of all connections
      */
-    @ApiModelProperty(
-            value = "The status of all conenctions in the process group."
-    )
+    @ApiModelProperty("The status of all conenctions in the process group.")
     public Collection<ConnectionStatusDTO> getConnectionStatus() {
         return connectionStatus;
     }
@@ -116,9 +134,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
      *
      * @return The status of all process groups
      */
-    @ApiModelProperty(
-            value = "The status of all process groups in the process group."
-    )
+    @ApiModelProperty("The status of all process groups in the process group.")
     public Collection<ProcessGroupStatusDTO> getProcessGroupStatus() {
         return processGroupStatus;
     }
@@ -132,9 +148,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
      *
      * @return The status of all remote process groups
      */
-    @ApiModelProperty(
-            value = "The status of all remote process groups in the process group.."
-    )
+    @ApiModelProperty("The status of all remote process groups in the process group.")
     public Collection<RemoteProcessGroupStatusDTO> getRemoteProcessGroupStatus() {
         return remoteProcessGroupStatus;
     }
@@ -148,9 +162,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
      *
      * @return The status of all processors
      */
-    @ApiModelProperty(
-            value = "The status of all processors in the process group."
-    )
+    @ApiModelProperty("The status of all processors in the process group.")
     public Collection<ProcessorStatusDTO> getProcessorStatus() {
         return processorStatus;
     }
@@ -164,9 +176,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
      *
      * @return The status of all input ports
      */
-    @ApiModelProperty(
-            value = "The status of all input ports in the process group."
-    )
+    @ApiModelProperty("The status of all input ports in the process group.")
     public Collection<PortStatusDTO> getInputPortStatus() {
         return inputPortStatus;
     }
@@ -180,9 +190,7 @@ public class ProcessGroupStatusDTO extends StatusDTO {
      *
      * @return The status of all output ports
      */
-    @ApiModelProperty(
-            value = "The status of all output ports in the process group."
-    )
+    @ApiModelProperty("The status of all output ports in the process group.")
     public Collection<PortStatusDTO> getOutputPortStatus() {
         return outputPortStatus;
     }
@@ -196,159 +204,233 @@ public class ProcessGroupStatusDTO extends StatusDTO {
      *
      * @return The output stats
      */
-    @ApiModelProperty(
-            value = "The output count/size for the process group in the last 5 minutes."
-    )
+    @ApiModelProperty("The output count/size for the process group in the last 5 minutes.")
     public String getOutput() {
         return output;
     }
 
-    public void setOutput(String output) {
-        this.output = output;
-    }
-
     /**
      * The transferred stats for this process group. This represents the count/size of flowfiles transferred to/from queues.
      *
      * @return The transferred status for this process group
      */
-    @ApiModelProperty(
-            value = "The count/size transferred to/frome queues in the process group in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size transferred to/frome queues in the process group in the last 5 minutes.")
     public String getTransferred() {
         return transferred;
     }
 
-    public void setTransferred(String transferred) {
-        this.transferred = transferred;
-    }
-
     /**
      * The received stats for this process group. This represents the count/size of flowfiles received.
      *
      * @return The received stats for this process group
      */
-    @ApiModelProperty(
-            value = "The count/size sent to the process group in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size sent to the process group in the last 5 minutes.")
     public String getReceived() {
         return received;
     }
 
-    public void setReceived(String received) {
-        this.received = received;
-    }
 
     /**
      * The sent stats for this process group. This represents the count/size of flowfiles sent.
      *
      * @return The sent stats for this process group
      */
-    @ApiModelProperty(
-            value = "The count/size sent from this process group in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size sent from this process group in the last 5 minutes.")
     public String getSent() {
         return sent;
     }
 
-    public void setSent(String sent) {
-        this.sent = sent;
-    }
 
     /**
      * The queued count for this process group.
      *
      * @return The queued count for this process group
      */
-    @ApiModelProperty(
-            value = "The count that is queued for the process group."
-    )
+    @ApiModelProperty("The count that is queued for the process group.")
     public String getQueuedCount() {
         return queuedCount;
     }
 
-    public void setQueuedCount(String queuedCount) {
-        this.queuedCount = queuedCount;
-    }
 
     /**
      * The queued size for this process group.
      *
      * @return The queued size for this process group
      */
-    @ApiModelProperty(
-            value = "The size that is queued for the process group."
-    )
+    @ApiModelProperty("The size that is queued for the process group.")
     public String getQueuedSize() {
         return queuedSize;
     }
 
-    public void setQueuedSize(String queuedSize) {
-        this.queuedSize = queuedSize;
-    }
 
     /**
      * The queued stats for this process group.
      *
      * @return The queued stats
      */
-    @ApiModelProperty(
-            value = "The count/size that is queued in the the process group."
-    )
+    @ApiModelProperty("The count/size that is queued in the the process group.")
     public String getQueued() {
         return queued;
     }
 
-    public void setQueued(String queued) {
-        this.queued = queued;
-    }
 
     /**
      * The read stats for this process group.
      *
      * @return The read stats
      */
-    @ApiModelProperty(
-            value = "The number of bytes read in the last 5 minutes."
-    )
+    @ApiModelProperty("The number of bytes read in the last 5 minutes.")
     public String getRead() {
         return read;
     }
 
-    public void setRead(String read) {
-        this.read = read;
-    }
 
     /**
      * The written stats for this process group.
      *
      * @return The written stats
      */
-    @ApiModelProperty(
-            value = "The number of bytes written in the last 5 minutes."
-    )
+    @ApiModelProperty("The number of bytes written in the last 5 minutes.")
     public String getWritten() {
         return written;
     }
 
-    public void setWritten(String written) {
-        this.written = written;
-    }
 
     /**
      * The input stats for this process group.
      *
      * @return The input stats
      */
-    @ApiModelProperty(
-            value = "The input count/size for the process group in the last 5 minutes."
-    )
+    @ApiModelProperty("The input count/size for the process group in the last 5 minutes (pretty printed).")
     public String getInput() {
         return input;
     }
 
-    public void setInput(String input) {
-        this.input = input;
+
+    @ApiModelProperty("The number of FlowFiles that have come into this ProcessGroup in the last 5 minutes")
+    public Integer getFlowFilesIn() {
+        return flowFilesIn;
+    }
+
+    public void setFlowFilesIn(Integer flowFilesIn) {
+        this.flowFilesIn = flowFilesIn;
+    }
+
+    @ApiModelProperty("The number of bytes that have come into this ProcessGroup in the last 5 minutes")
+    public Long getBytesIn() {
+        return bytesIn;
+    }
+
+    public void setBytesIn(Long bytesIn) {
+        this.bytesIn = bytesIn;
+    }
+
+    @ApiModelProperty("The number of FlowFiles that are queued up in this ProcessGroup right now")
+    public Integer getFlowFilesQueued() {
+        return flowFilesQueued;
+    }
+
+    public void setFlowFilesQueued(Integer flowFilesQueued) {
+        this.flowFilesQueued = flowFilesQueued;
+    }
+
+    @ApiModelProperty("The number of bytes that are queued up in this ProcessGroup right now")
+    public Long getBytesQueued() {
+        return bytesQueued;
+    }
+
+    public void setBytesQueued(Long bytesQueued) {
+        this.bytesQueued = bytesQueued;
+    }
+
+    @ApiModelProperty("The number of bytes read by components in this ProcessGroup in the last 5 minutes")
+    public Long getBytesRead() {
+        return bytesRead;
+    }
+
+    public void setBytesRead(Long bytesRead) {
+        this.bytesRead = bytesRead;
+    }
+
+    @ApiModelProperty("The number of bytes written by components in this ProcessGroup in the last 5 minutes")
+    public Long getBytesWritten() {
+        return bytesWritten;
+    }
+
+    public void setBytesWritten(Long bytesWritten) {
+        this.bytesWritten = bytesWritten;
+    }
+
+    @ApiModelProperty("The number of FlowFiles transferred out of this ProcessGroup in the last 5 minutes")
+    public Integer getFlowFilesOut() {
+        return flowFilesOut;
+    }
+
+    public void setFlowFilesOut(Integer flowFilesOut) {
+        this.flowFilesOut = flowFilesOut;
+    }
+
+    @ApiModelProperty("The number of bytes transferred out of this ProcessGroup in the last 5 minutes")
+    public Long getBytesOut() {
+        return bytesOut;
+    }
+
+    public void setBytesOut(Long bytesOut) {
+        this.bytesOut = bytesOut;
+    }
+
+    @ApiModelProperty("The number of FlowFiles transferred in this ProcessGroup in the last 5 minutes")
+    public Integer getFlowFilesTransferred() {
+        return flowFilesTransferred;
+    }
+
+    public void setFlowFilesTransferred(Integer flowFilesTransferred) {
+        this.flowFilesTransferred = flowFilesTransferred;
+    }
+
+    @ApiModelProperty("The number of bytes transferred in this ProcessGroup in the last 5 minutes")
+    public Long getBytesTransferred() {
+        return bytesTransferred;
+    }
+
+    public void setBytesTransferred(Long bytesTransferred) {
+        this.bytesTransferred = bytesTransferred;
+    }
+
+    @ApiModelProperty("The number of bytes received from external sources by components within this ProcessGroup in the last 5 minutes")
+    public Long getBytesReceived() {
+        return bytesReceived;
+    }
+
+    public void setBytesReceived(Long bytesReceived) {
+        this.bytesReceived = bytesReceived;
+    }
+
+    @ApiModelProperty("The number of bytes sent to an external sink by components within this ProcessGroup in the last 5 minutes")
+    public Long getBytesSent() {
+        return bytesSent;
+    }
+
+    public void setBytesSent(Long bytesSent) {
+        this.bytesSent = bytesSent;
+    }
+
+    @ApiModelProperty("The number of FlowFiles sent to an external sink by components within this ProcessGroup in the last 5 minutes")
+    public Integer getFlowFilesSent() {
+        return flowFilesSent;
+    }
+
+    public void setFlowFilesSent(Integer flowFilesSent) {
+        this.flowFilesSent = flowFilesSent;
+    }
+
+    @ApiModelProperty("The number of FlowFiles received from external sources by components within this ProcessGroup in the last 5 minutes")
+    public Integer getFlowFilesReceived() {
+        return flowFilesReceived;
+    }
+
+    public void setFlowFilesReceived(Integer flowFilesReceived) {
+        this.flowFilesReceived = flowFilesReceived;
     }
 
     /**
@@ -368,4 +450,110 @@ public class ProcessGroupStatusDTO extends StatusDTO {
         this.statsLastRefreshed = statsLastRefreshed;
     }
 
+
+    public void setInput(String input) {
+        this.input = input;
+    }
+
+    public void setQueued(String queued) {
+        this.queued = queued;
+    }
+
+    public void setQueuedCount(String queuedCount) {
+        this.queuedCount = queuedCount;
+    }
+
+    public void setQueuedSize(String queuedSize) {
+        this.queuedSize = queuedSize;
+    }
+
+    public void setRead(String read) {
+        this.read = read;
+    }
+
+    public void setWritten(String written) {
+        this.written = written;
+    }
+
+    public void setOutput(String output) {
+        this.output = output;
+    }
+
+    public void setTransferred(String transferred) {
+        this.transferred = transferred;
+    }
+
+    public void setReceived(String received) {
+        this.received = received;
+    }
+
+    public void setSent(String sent) {
+        this.sent = sent;
+    }
+
+    @Override
+    public ProcessGroupStatusDTO clone() {
+        final ProcessGroupStatusDTO other = new ProcessGroupStatusDTO();
+        other.setId(getId());
+        other.setName(getName());
+
+        other.setBytesIn(getBytesIn());
+        other.setFlowFilesIn(getFlowFilesIn());
+        other.setInput(getInput());
+
+        other.setBytesQueued(getBytesQueued());
+        other.setFlowFilesQueued(getFlowFilesQueued());
+        other.setQueued(getQueued());
+        other.setQueuedCount(getQueuedCount());
+        other.setQueuedSize(getQueuedSize());
+
+        other.setBytesRead(getBytesRead());
+        other.setRead(getRead());
+        other.setBytesWritten(getBytesWritten());
+        other.setWritten(getWritten());
+
+        other.setBytesOut(getBytesOut());
+        other.setFlowFilesOut(getFlowFilesOut());
+        other.setOutput(getOutput());
+
+        other.setBytesTransferred(getBytesTransferred());
+        other.setFlowFilesTransferred(getFlowFilesTransferred());
+        other.setTransferred(getTransferred());
+
+        other.setBytesReceived(getBytesReceived());
+        other.setFlowFilesReceived(getFlowFilesReceived());
+        other.setReceived(getReceived());
+        other.setBytesSent(getBytesSent());
+        other.setFlowFilesSent(getFlowFilesSent());
+        other.setSent(getSent());
+
+        other.setActiveThreadCount(getActiveThreadCount());
+        other.setStatsLastRefreshed(getStatsLastRefreshed());
+
+        other.setConnectionStatus(copy(getConnectionStatus()));
+        other.setProcessorStatus(copy(getProcessorStatus()));
+        other.setRemoteProcessGroupStatus(copy(getRemoteProcessGroupStatus()));
+        other.setInputPortStatus(copy(getInputPortStatus()));
+        other.setOutputPortStatus(copy(getOutputPortStatus()));
+
+        if (processGroupStatus != null) {
+            final List<ProcessGroupStatusDTO> childGroups = new ArrayList<>();
+            for (final ProcessGroupStatusDTO procGroupStatus : processGroupStatus) {
+                childGroups.add(procGroupStatus.clone());
+            }
+            other.setProcessGroupStatus(childGroups);
+        }
+
+        other.setBulletins(cloneBulletins());
+
+        return other;
+    }
+
+    private <T> Collection<T> copy(final Collection<T> original) {
+        if (original == null) {
+            return null;
+        }
+
+        return new ArrayList<T>(original);
+    }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessorStatusDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessorStatusDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessorStatusDTO.java
index 1899418..f1b26db 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessorStatusDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ProcessorStatusDTO.java
@@ -16,14 +16,15 @@
  */
 package org.apache.nifi.web.api.dto.status;
 
-import com.wordnik.swagger.annotations.ApiModelProperty;
 import javax.xml.bind.annotation.XmlType;
 
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
 /**
  * DTO for serializing the status of a processor.
  */
 @XmlType(name = "processorStatus")
-public class ProcessorStatusDTO extends StatusDTO {
+public class ProcessorStatusDTO extends StatusDTO implements Cloneable {
 
     private String id;
     private String groupId;
@@ -31,23 +32,30 @@ public class ProcessorStatusDTO extends StatusDTO {
     private String type;
     private String runStatus;
 
+    private Long bytesRead = 0L;
+    private Long bytesWritten = 0L;
     private String read;
     private String written;
 
+    private Integer flowFilesIn = 0;
+    private Long bytesIn = 0L;
     private String input;
+
+    private Integer flowFilesOut = 0;
+    private Long bytesOut = 0L;
     private String output;
 
+    private Integer taskCount = 0;
+    private Long taskDurationNanos = 0L;
     private String tasks;
     private String tasksDuration;
-    private Integer activeThreadCount;
+    private Integer activeThreadCount = 0;
 
     /* getters / setters */
     /**
      * @return The processor id
      */
-    @ApiModelProperty(
-            value = "The id of the processor."
-    )
+    @ApiModelProperty("The id of the processor.")
     public String getId() {
         return id;
     }
@@ -59,9 +67,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return The processor name
      */
-    @ApiModelProperty(
-            value = "The name of the prcessor."
-    )
+    @ApiModelProperty("The name of the prcessor.")
     public String getName() {
         return name;
     }
@@ -73,9 +79,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return The processor type
      */
-    @ApiModelProperty(
-            value = "The type of the processor."
-    )
+    @ApiModelProperty("The type of the processor.")
     public String getType() {
         return type;
     }
@@ -102,9 +106,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return The total count and size of flow files that have been accepted in the last five minutes
      */
-    @ApiModelProperty(
-            value = "The count/size of flowfiles that have been accepted in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size of flowfiles that have been accepted in the last 5 minutes.")
     public String getInput() {
         return input;
     }
@@ -116,9 +118,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return number of bytes read
      */
-    @ApiModelProperty(
-            value = "The number of bytes read in the last 5 minutes."
-    )
+    @ApiModelProperty("The number of bytes read in the last 5 minutes.")
     public String getRead() {
         return read;
     }
@@ -130,9 +130,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return number of bytes written
      */
-    @ApiModelProperty(
-            value = "The number of bytes written in the last 5 minutes."
-    )
+    @ApiModelProperty("The number of bytes written in the last 5 minutes.")
     public String getWritten() {
         return written;
     }
@@ -144,9 +142,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return the ID of the Process Group to which this processor belongs.
      */
-    @ApiModelProperty(
-            value = "The id of the parent process group to which the processor belongs."
-    )
+    @ApiModelProperty("The id of the parent process group to which the processor belongs.")
     public String getGroupId() {
         return groupId;
     }
@@ -158,9 +154,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return The total count and size of flow files that have been processed in the last five minutes
      */
-    @ApiModelProperty(
-            value = "The count/size of flowfiles that have been processed in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size of flowfiles that have been processed in the last 5 minutes.")
     public String getOutput() {
         return output;
     }
@@ -172,9 +166,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return number of threads currently running for this Processor
      */
-    @ApiModelProperty(
-            value = "The number of threads currently executing in the processor."
-    )
+    @ApiModelProperty("The number of threads currently executing in the processor.")
     public Integer getActiveThreadCount() {
         return activeThreadCount;
     }
@@ -186,9 +178,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return number of task this connectable has had over the last 5 minutes
      */
-    @ApiModelProperty(
-            value = "The total number of task this connectable has completed over the last 5 minutes."
-    )
+    @ApiModelProperty("The total number of task this connectable has completed over the last 5 minutes.")
     public String getTasks() {
         return tasks;
     }
@@ -200,9 +190,7 @@ public class ProcessorStatusDTO extends StatusDTO {
     /**
      * @return total duration of all tasks for this connectable over the last 5 minutes
      */
-    @ApiModelProperty(
-            value = "The total duration of all tasks for this connectable over the last 5 minutes."
-    )
+    @ApiModelProperty("The total duration of all tasks for this connectable over the last 5 minutes.")
     public String getTasksDuration() {
         return tasksDuration;
     }
@@ -211,4 +199,103 @@ public class ProcessorStatusDTO extends StatusDTO {
         this.tasksDuration = tasksDuration;
     }
 
+    @ApiModelProperty("The number of bytes read by this Processor in the last 5 mintues")
+    public Long getBytesRead() {
+        return bytesRead;
+    }
+
+    public void setBytesRead(Long bytesRead) {
+        this.bytesRead = bytesRead;
+    }
+
+    @ApiModelProperty("The number of bytes written by this Processor in the last 5 minutes")
+    public Long getBytesWritten() {
+        return bytesWritten;
+    }
+
+    public void setBytesWritten(Long bytesWritten) {
+        this.bytesWritten = bytesWritten;
+    }
+
+    @ApiModelProperty("The number of FlowFiles that have been accepted in the last 5 minutes")
+    public Integer getFlowFilesIn() {
+        return flowFilesIn;
+    }
+
+    public void setFlowFilesIn(Integer flowFilesIn) {
+        this.flowFilesIn = flowFilesIn;
+    }
+
+    @ApiModelProperty("The size of the FlowFiles that have been accepted in the last 5 minutes")
+    public Long getBytesIn() {
+        return bytesIn;
+    }
+
+    public void setBytesIn(Long bytesIn) {
+        this.bytesIn = bytesIn;
+    }
+
+    @ApiModelProperty("The number of FlowFiles transferred to a Connection in the last 5 minutes")
+    public Integer getFlowFilesOut() {
+        return flowFilesOut;
+    }
+
+    public void setFlowFilesOut(Integer flowFilesOut) {
+        this.flowFilesOut = flowFilesOut;
+    }
+
+    @ApiModelProperty("The size of the FlowFiles transferred to a Connection in the last 5 minutes")
+    public Long getBytesOut() {
+        return bytesOut;
+    }
+
+    public void setBytesOut(Long bytesOut) {
+        this.bytesOut = bytesOut;
+    }
+
+    @ApiModelProperty("The number of times this Processor has run in the last 5 minutes")
+    public Integer getTaskCount() {
+        return taskCount;
+    }
+
+    public void setTaskCount(Integer taskCount) {
+        this.taskCount = taskCount;
+    }
+
+    @ApiModelProperty("The number of nanoseconds that this Processor has spent running in the last 5 minutes")
+    public Long getTaskDuration() {
+        return taskDurationNanos;
+    }
+
+    public void setTaskDuration(Long taskNanos) {
+        this.taskDurationNanos = taskNanos;
+    }
+
+    @Override
+    public ProcessorStatusDTO clone() {
+        final ProcessorStatusDTO other = new ProcessorStatusDTO();
+        other.setId(getId());
+        other.setGroupId(getGroupId());
+        other.setName(getName());
+        other.setType(getType());
+
+        other.setRunStatus(getRunStatus());
+        other.setBytesRead(getBytesRead());
+        other.setBytesWritten(getBytesWritten());
+        other.setFlowFilesIn(getFlowFilesIn());
+        other.setBytesIn(getBytesIn());
+        other.setFlowFilesOut(getFlowFilesOut());
+        other.setBytesOut(getBytesOut());
+        other.setTaskCount(getTaskCount());
+        other.setTaskDuration(getTaskDuration());
+        other.setActiveThreadCount(getActiveThreadCount());
+        other.setInput(getInput());
+        other.setOutput(getOutput());
+        other.setRead(getRead());
+        other.setWritten(getWritten());
+        other.setTasks(getTasks());
+        other.setBulletins(cloneBulletins());
+
+        return other;
+    }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/RemoteProcessGroupStatusDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/RemoteProcessGroupStatusDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/RemoteProcessGroupStatusDTO.java
index f556deb..e1dad2a 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/RemoteProcessGroupStatusDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/RemoteProcessGroupStatusDTO.java
@@ -16,15 +16,18 @@
  */
 package org.apache.nifi.web.api.dto.status;
 
-import com.wordnik.swagger.annotations.ApiModelProperty;
+import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlType;
 
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
 /**
  * The status of a remote process group in this NiFi.
  */
 @XmlType(name = "remoteProcessGroupStatus")
-public class RemoteProcessGroupStatusDTO extends StatusDTO {
+public class RemoteProcessGroupStatusDTO extends StatusDTO implements Cloneable {
 
     private String id;
     private String groupId;
@@ -35,15 +38,18 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
 
     private List<String> authorizationIssues;
 
+    private Integer flowFilesSent = 0;
+    private Long bytesSent = 0L;
     private String sent;
+
+    private Integer flowFilesReceived = 0;
+    private Long bytesReceived = 0L;
     private String received;
 
     /**
      * @return The id for the remote process group
      */
-    @ApiModelProperty(
-            value = "The id of the remote process group."
-    )
+    @ApiModelProperty("The id of the remote process group.")
     public String getId() {
         return id;
     }
@@ -55,9 +61,7 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return id of the group this remote process group is in
      */
-    @ApiModelProperty(
-            value = "The id of the parent process group the remote process group resides in."
-    )
+    @ApiModelProperty("The id of the parent process group the remote process group resides in.")
     public String getGroupId() {
         return groupId;
     }
@@ -69,9 +73,7 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return URI of the target system
      */
-    @ApiModelProperty(
-            value = "The URI of the target system."
-    )
+    @ApiModelProperty("The URI of the target system.")
     public String getTargetUri() {
         return targetUri;
     }
@@ -83,9 +85,7 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return name of this remote process group
      */
-    @ApiModelProperty(
-            value = "The name of the remote process group."
-    )
+    @ApiModelProperty("The name of the remote process group.")
     public String getName() {
         return name;
     }
@@ -97,9 +97,7 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return transmission status of this remote process group
      */
-    @ApiModelProperty(
-            value = "The transmission status of the remote process group."
-    )
+    @ApiModelProperty("The transmission status of the remote process group.")
     public String getTransmissionStatus() {
         return transmissionStatus;
     }
@@ -111,9 +109,7 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return number of active threads
      */
-    @ApiModelProperty(
-            value = "The number of active threads for the remote process group."
-    )
+    @ApiModelProperty("The number of active threads for the remote process group.")
     public Integer getActiveThreadCount() {
         return activeThreadCount;
     }
@@ -125,9 +121,7 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return any remote authorization issues for this remote process group
      */
-    @ApiModelProperty(
-            value = "Any remote authorization issues for the remote process group."
-    )
+    @ApiModelProperty("Any remote authorization issues for the remote process group.")
     public List<String> getAuthorizationIssues() {
         return authorizationIssues;
     }
@@ -139,9 +133,7 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
     /**
      * @return Formatted description of the amount of data sent to this remote process group
      */
-    @ApiModelProperty(
-            value = "The count/size of the flowfiles sent to the remote process group in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size of the flowfiles sent to the remote process group in the last 5 minutes.")
     public String getSent() {
         return sent;
     }
@@ -150,12 +142,11 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
         this.sent = sent;
     }
 
+
     /**
      * @return Formatted description of the amount of data received from this remote process group
      */
-    @ApiModelProperty(
-            value = "The count/size of the flowfiles received from the remote process group in the last 5 minutes."
-    )
+    @ApiModelProperty("The count/size of the flowfiles received from the remote process group in the last 5 minutes.")
     public String getReceived() {
         return received;
     }
@@ -164,4 +155,62 @@ public class RemoteProcessGroupStatusDTO extends StatusDTO {
         this.received = received;
     }
 
+    @ApiModelProperty("The number of FlowFiles sent to the remote process group in the last 5 minutes.")
+    public Integer getFlowFilesSent() {
+        return flowFilesSent;
+    }
+
+    public void setFlowFilesSent(Integer flowFilesSent) {
+        this.flowFilesSent = flowFilesSent;
+    }
+
+    @ApiModelProperty("The size of the FlowFiles sent to the remote process group in the last 5 minutes.")
+    public Long getBytesSent() {
+        return bytesSent;
+    }
+
+    public void setBytesSent(Long bytesSent) {
+        this.bytesSent = bytesSent;
+    }
+
+    @ApiModelProperty("The number of FlowFiles received from the remote process group in the last 5 minutes.")
+    public Integer getFlowFilesReceived() {
+        return flowFilesReceived;
+    }
+
+    public void setFlowFilesReceived(Integer flowFilesReceived) {
+        this.flowFilesReceived = flowFilesReceived;
+    }
+
+    @ApiModelProperty("The size of the FlowFiles received from the remote process group in the last 5 minutes.")
+    public Long getBytesReceived() {
+        return bytesReceived;
+    }
+
+    public void setBytesReceived(Long bytesReceived) {
+        this.bytesReceived = bytesReceived;
+    }
+
+
+    @Override
+    public RemoteProcessGroupStatusDTO clone() {
+        final RemoteProcessGroupStatusDTO other = new RemoteProcessGroupStatusDTO();
+        other.setId(getId());
+        other.setGroupId(getGroupId());
+        other.setName(getName());
+        other.setTargetUri(getTargetUri());
+        other.setTransmissionStatus(getTransmissionStatus());
+        other.setActiveThreadCount(getActiveThreadCount());
+        other.setAuthorizationIssues(getAuthorizationIssues() == null ? null : new ArrayList<String>(getAuthorizationIssues()));
+        other.setFlowFilesSent(getFlowFilesSent());
+        other.setBytesSent(getBytesSent());
+        other.setFlowFilesReceived(getFlowFilesReceived());
+        other.setBytesReceived(getBytesReceived());
+        other.setReceived(getReceived());
+        other.setSent(getSent());
+        other.setBulletins(cloneBulletins());
+
+        return other;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusDTO.java
index 39b9c06..ad6d64f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusDTO.java
@@ -16,11 +16,15 @@
  */
 package org.apache.nifi.web.api.dto.status;
 
-import com.wordnik.swagger.annotations.ApiModelProperty;
+import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlType;
+
 import org.apache.nifi.web.api.dto.BulletinDTO;
 
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
 /**
  * The status of a component in this NiFi.
  */
@@ -42,4 +46,12 @@ public abstract class StatusDTO {
     public void setBulletins(List<BulletinDTO> bulletins) {
         this.bulletins = bulletins;
     }
+
+    public List<BulletinDTO> cloneBulletins() {
+        if (bulletins == null) {
+            return null;
+        }
+
+        return new ArrayList<>(bulletins);
+    }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDTO.java
index c0ef33b..4a9e1e3 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDTO.java
@@ -16,34 +16,37 @@
  */
 package org.apache.nifi.web.api.dto.status;
 
-import com.wordnik.swagger.annotations.ApiModelProperty;
 import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
 import org.apache.nifi.web.api.dto.util.TimeAdapter;
 
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
 /**
- * History status for a component in this NiFi.
+ * DTO for serializing the status history of a single component across the cluster.
  */
 @XmlType(name = "statusHistory")
 public class StatusHistoryDTO {
 
     private Date generated;
 
-    private LinkedHashMap<String, String> details;
-
+    private LinkedHashMap<String, String> componentDetails;
     private List<StatusDescriptorDTO> fieldDescriptors;
-    private List<StatusSnapshotDTO> statusSnapshots;
+    private List<StatusSnapshotDTO> aggregateStatusSnapshots;
+    private Map<String, List<StatusSnapshotDTO>> nodeStatusSnapshots;
+
 
     /**
      * @return when this status history was generated
      */
     @XmlJavaTypeAdapter(TimeAdapter.class)
-    @ApiModelProperty(
-            value = "The timestamp when the status history was generated."
-    )
+    @ApiModelProperty("When the status history was generated.")
     public Date getGenerated() {
         return generated;
     }
@@ -53,25 +56,18 @@ public class StatusHistoryDTO {
     }
 
     /**
-     * @return The component details for this status history
+     * @return key/value pairs that describe the component that the status history belongs to
      */
-    @ApiModelProperty(
-            value = "The component details for the status history."
-    )
-    public LinkedHashMap<String, String> getDetails() {
-        return details;
+    @ApiModelProperty("A Map of key/value pairs that describe the component that the status history belongs to")
+    public LinkedHashMap<String, String> getComponentDetails() {
+        return componentDetails;
     }
 
-    public void setDetails(LinkedHashMap<String, String> details) {
-        this.details = details;
+    public void setComponentDetails(LinkedHashMap<String, String> componentDetails) {
+        this.componentDetails = componentDetails;
     }
 
-    /**
-     * @return Descriptors for each supported status field
-     */
-    @ApiModelProperty(
-            value = "The descriptor for each support status field."
-    )
+    @ApiModelProperty("The Descriptors that provide information on each of the metrics provided in the status history")
     public List<StatusDescriptorDTO> getFieldDescriptors() {
         return fieldDescriptors;
     }
@@ -80,18 +76,24 @@ public class StatusHistoryDTO {
         this.fieldDescriptors = fieldDescriptors;
     }
 
-    /**
-     * @return The status snapshots
-     */
-    @ApiModelProperty(
-            value = "The status snapshots."
-    )
-    public List<StatusSnapshotDTO> getStatusSnapshots() {
-        return statusSnapshots;
+    @ApiModelProperty("A list of StatusSnapshotDTO objects that provide the actual metric values for the component. If the NiFi instance "
+        + "is clustered, this will represent the aggregate status across all nodes. If the NiFi instance is not clustered, this will represent "
+        + "the status of the entire NiFi instance.")
+    public List<StatusSnapshotDTO> getAggregateStatusSnapshots() {
+        return aggregateStatusSnapshots;
     }
 
-    public void setStatusSnapshots(List<StatusSnapshotDTO> statusSnapshots) {
-        this.statusSnapshots = statusSnapshots;
+    public void setAggregateStatusSnapshots(List<StatusSnapshotDTO> aggregateStatusSnapshots) {
+        this.aggregateStatusSnapshots = aggregateStatusSnapshots;
     }
 
+    @ApiModelProperty("A Map of Node Address to a list of StatusSnapshotDTO objects that provide the actual metric values for the component, for that node. "
+        + "If the NiFi instance is not clustered, this value will be null.")
+    public Map<String, List<StatusSnapshotDTO>> getNodeStatusSnapshots() {
+        return nodeStatusSnapshots;
+    }
+
+    public void setNodeStatusSnapshots(Map<String, List<StatusSnapshotDTO>> nodeStatusSnapshots) {
+        this.nodeStatusSnapshots = nodeStatusSnapshots;
+    }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ad32cb82/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDetailDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDetailDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDetailDTO.java
deleted file mode 100644
index e78641e..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/StatusHistoryDetailDTO.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.
- */
-package org.apache.nifi.web.api.dto.status;
-
-import com.wordnik.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlType;
-
-/**
- * Detail of a status history metric.
- */
-@XmlType(name = "statusHistoryDetail")
-public class StatusHistoryDetailDTO {
-
-    private String label;
-    private String value;
-
-    /**
-     * @return label for this status detail
-     */
-    @ApiModelProperty(
-            value = "The label for the status detail."
-    )
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    /**
-     * @return value for this status detail
-     */
-    @ApiModelProperty(
-            value = "The value for the status detail."
-    )
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-}


Mime
View raw message