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

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new fda013ce02 NIFI-14243 Added Load Balance Status to Connections Summary 
Page (#10097)
fda013ce02 is described below

commit fda013ce02cb3d8237a0dcd27b264905a7fb3b96
Author: markobean <[email protected]>
AuthorDate: Sat Aug 9 16:00:16 2025 -0400

    NIFI-14243 Added Load Balance Status to Connections Summary Page (#10097)
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../dto/status/ConnectionStatusSnapshotDTO.java    | 17 ++++++++++-
 .../apache/nifi/cluster/manager/StatusMerger.java  |  1 +
 .../org/apache/nifi/web/api/dto/DtoFactory.java    |  2 ++
 .../apps/nifi/src/app/pages/summary/state/index.ts |  1 +
 .../connection-status-table.component.html         | 10 +++++++
 .../connection-status-table.component.ts           | 34 ++++++++++++++++++++--
 6 files changed, 61 insertions(+), 4 deletions(-)

diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusSnapshotDTO.java
 
b/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusSnapshotDTO.java
index fc186adb46..c3d3937cd7 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusSnapshotDTO.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ConnectionStatusSnapshotDTO.java
@@ -19,6 +19,7 @@ package org.apache.nifi.web.api.dto.status;
 import io.swagger.v3.oas.annotations.media.Schema;
 
 import jakarta.xml.bind.annotation.XmlType;
+import org.apache.nifi.controller.status.LoadBalanceStatus;
 
 /**
  * DTO for serializing the status of a connection.
@@ -49,6 +50,7 @@ public class ConnectionStatusSnapshotDTO implements Cloneable 
{
     private Integer percentUseCount;
     private Integer percentUseBytes;
     private String flowFileAvailability;
+    private LoadBalanceStatus loadBalanceStatus;
 
     /* getters / setters */
     /**
@@ -206,7 +208,7 @@ public class ConnectionStatusSnapshotDTO implements 
Cloneable {
     /**
      * @return output for this connection
      */
-    @Schema(description = "The output count/sie for the connection in the last 
5 minutes, pretty printed.")
+    @Schema(description = "The output count/size for the connection in the 
last 5 minutes, pretty printed.")
     public String getOutput() {
         return output;
     }
@@ -293,6 +295,18 @@ public class ConnectionStatusSnapshotDTO implements 
Cloneable {
         this.flowFileAvailability = availability;
     }
 
+    /**
+     * @return load balance status of the connection
+     */
+    @Schema(description = "The load balance status of the connection")
+    public LoadBalanceStatus getLoadBalanceStatus() {
+        return loadBalanceStatus;
+    }
+
+    public void setLoadBalanceStatus(LoadBalanceStatus loadBalanceStatus) {
+        this.loadBalanceStatus = loadBalanceStatus;
+    }
+
     @Override
     public ConnectionStatusSnapshotDTO clone() {
         final ConnectionStatusSnapshotDTO other = new 
ConnectionStatusSnapshotDTO();
@@ -322,6 +336,7 @@ public class ConnectionStatusSnapshotDTO implements 
Cloneable {
         other.setPercentUseBytes(getPercentUseBytes());
         other.setPercentUseCount(getPercentUseCount());
         other.setFlowFileAvailability(getFlowFileAvailability());
+        other.setLoadBalanceStatus(getLoadBalanceStatus());
 
         return other;
     }
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
 
b/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
index 221ab41600..f238dc1049 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
@@ -498,6 +498,7 @@ public class StatusMerger {
             target.setSourceName(toMerge.getSourceName());
             target.setDestinationId(toMerge.getDestinationId());
             target.setDestinationName(toMerge.getDestinationName());
+            target.setLoadBalanceStatus(toMerge.getLoadBalanceStatus());
         }
 
         target.setFlowFilesIn(target.getFlowFilesIn() + 
toMerge.getFlowFilesIn());
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
index b761a8dca6..920180b208 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
@@ -1182,6 +1182,8 @@ public final class DtoFactory {
        snapshot.setFlowFilesOut(connectionStatus.getOutputCount());
        snapshot.setBytesOut(connectionStatus.getOutputBytes());
 
+       snapshot.setLoadBalanceStatus(connectionStatus.getLoadBalanceStatus());
+
        ConnectionStatusPredictions predictions = 
connectionStatus.getPredictions();
        ConnectionStatusPredictionsSnapshotDTO predictionsDTO = null;
        if (predictions != null) {
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/state/index.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/state/index.ts
index af717fccd3..cb5a74e558 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/state/index.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/state/index.ts
@@ -65,6 +65,7 @@ export interface ConnectionStatusSnapshot extends 
BaseSnapshot {
     queuedCount: string;
     queuedSize: string;
     sourceName: string;
+    loadBalanceStatus: string;
 }
 
 export interface RemoteProcessGroupStatusSnapshot {
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/connection-status-listing/connection-status-table/connection-status-table.component.html
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/connection-status-listing/connection-status-table/connection-status-table.component.html
index d11e371b44..b9c2e202d3 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/connection-status-listing/connection-status-table/connection-status-table.component.html
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/connection-status-listing/connection-status-table/connection-status-table.component.html
@@ -193,6 +193,16 @@
                                 </td>
                             </ng-container>
 
+                            <!-- Load Balance Status Column -->
+                            <ng-container matColumnDef="loadBalanceStatus">
+                                <th mat-header-cell *matHeaderCellDef 
mat-sort-header>
+                                    <div class="overflow-ellipsis 
overflow-hidden whitespace-nowrap">Load Balancing</div>
+                                </th>
+                                <td mat-cell *matCellDef="let item" 
[title]="formatLoadBalanceStatus(item)">
+                                    {{ formatLoadBalanceStatus(item) }}
+                                </td>
+                            </ng-container>
+
                             <ng-container matColumnDef="actions">
                                 <th mat-header-cell *matHeaderCellDef></th>
                                 <td mat-cell *matCellDef="let item">
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/connection-status-listing/connection-status-table/connection-status-table.component.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/connection-status-listing/connection-status-table/connection-status-table.component.ts
index 543d2fa271..30e099ea08 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/connection-status-listing/connection-status-table/connection-status-table.component.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/connection-status-listing/connection-status-table/connection-status-table.component.ts
@@ -31,7 +31,7 @@ import { ComponentStatusTable } from 
'../../common/component-status-table/compon
 import { MatButtonModule } from '@angular/material/button';
 import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
 
-export type SupportedColumns = 'name' | 'queue' | 'in' | 'out' | 'threshold' | 
'sourceName' | 'destinationName';
+export type SupportedColumns = 'name' | 'queue' | 'in' | 'out' | 'threshold' | 
'sourceName' | 'destinationName' | 'loadBalanceStatus';
 
 @Component({
     selector: 'connection-status-table',
@@ -54,7 +54,8 @@ export class ConnectionStatusTable extends 
ComponentStatusTable<ConnectionStatus
     filterableColumns: SummaryTableFilterColumn[] = [
         { key: 'sourceName', label: 'source' },
         { key: 'name', label: 'name' },
-        { key: 'destinationName', label: 'destination' }
+        { key: 'destinationName', label: 'destination' },
+        { key: 'loadBalanceStatus', label: 'loadBalanceStatus' }
     ];
 
     displayedColumns: string[] = [
@@ -65,6 +66,7 @@ export class ConnectionStatusTable extends 
ComponentStatusTable<ConnectionStatus
         'sourceName',
         'out',
         'destinationName',
+        'loadBalanceStatus',
         'actions'
     ];
 
@@ -79,8 +81,13 @@ export class ConnectionStatusTable extends 
ComponentStatusTable<ConnectionStatus
             return true;
         }
 
+        // Apply underscore substitution only for loadBalanceStatus column; 
trim whitespace so extraneous underscores are not introduced
+        const trimmedTerm: string = (filterTerm as string).trim();
+        const normalizedTerm: string =
+            filterColumn === 'loadBalanceStatus' ? trimmedTerm.replace(/\s+/g, 
'_') : trimmedTerm;
+
         const field: string = data.connectionStatusSnapshot[filterColumn as 
keyof ConnectionStatusSnapshot] as string;
-        return this.nifiCommon.stringContains(field, filterTerm, true);
+        return this.nifiCommon.stringContains(field, normalizedTerm, true);
     }
 
     getConnectionLink(connection: ConnectionStatusSnapshotEntity): string[] {
@@ -124,12 +131,27 @@ export class ConnectionStatusTable extends 
ComponentStatusTable<ConnectionStatus
         return `${connection.connectionStatusSnapshot.percentUseCount}% | 
${connection.connectionStatusSnapshot.percentUseBytes}%`;
     }
 
+    formatLoadBalanceStatus(connection: ConnectionStatusSnapshotEntity): 
string {
+        switch (connection.connectionStatusSnapshot.loadBalanceStatus) {
+            case 'LOAD_BALANCE_NOT_CONFIGURED':
+                return 'Not Configured';
+            case 'LOAD_BALANCE_ACTIVE':
+                return 'Active';
+            case 'LOAD_BALANCE_INACTIVE':
+                return 'Inactive';
+            default:
+                return connection.connectionStatusSnapshot.loadBalanceStatus;
+
+            }
+    }
+
     override supportsMultiValuedSort(sort: Sort): boolean {
         switch (sort.active) {
             case 'in':
             case 'out':
             case 'threshold':
             case 'queue':
+            case 'loadBalanceStatus':
                 return true;
             default:
                 return false;
@@ -214,6 +236,12 @@ export class ConnectionStatusTable extends 
ComponentStatusTable<ConnectionStatus
                         );
                     }
                     break;
+                case 'loadBalanceStatus':
+                    retVal = this.nifiCommon.compareString(
+                        a.connectionStatusSnapshot.loadBalanceStatus,
+                        b.connectionStatusSnapshot.loadBalanceStatus
+                    );
+                    break;
                 default:
                     retVal = 0;
             }

Reply via email to