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;
}