You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by rf...@apache.org on 2024/04/12 16:06:05 UTC
(nifi) branch main updated: NIFI-13001: Allowing the user to acknowledge changes to the cluster connection state (#8606)
This is an automated email from the ASF dual-hosted git repository.
rfellows 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 36d95c5c3b NIFI-13001: Allowing the user to acknowledge changes to the cluster connection state (#8606)
36d95c5c3b is described below
commit 36d95c5c3bf7bc4871512433acdd2a0c8a05a347
Author: Matt Gilman <ma...@gmail.com>
AuthorDate: Fri Apr 12 12:05:59 2024 -0400
NIFI-13001: Allowing the user to acknowledge changes to the cluster connection state (#8606)
* NIFI-13001:
- Allowing the user to acknowledge changes to the cluster connection state.
* NIFI-13001:
- Addressing review feedback.
This closes #8606
---
.../feature/access-policies.component.ts | 8 +++
.../service/access-policy.service.ts | 17 ++++--
.../service/behavior/draggable-behavior.service.ts | 8 ++-
.../service/controller-service.service.ts | 16 +++--
.../pages/flow-designer/service/flow.service.ts | 57 +++++++++++++-----
.../manager/connection-manager.service.spec.ts | 9 ++-
.../service/manager/connection-manager.service.ts | 7 ++-
.../service/manager/label-manager.service.spec.ts | 9 ++-
.../service/manager/label-manager.service.ts | 3 +
.../service/parameter-helper.service.ts | 4 ++
.../flow-designer/service/parameter.service.ts | 13 +++-
...ntroller-service-advanced-ui-params.resolver.ts | 4 +-
.../processor-advanced-ui-params.resolver.ts | 4 +-
.../manage-remote-ports.effects.ts | 8 ++-
.../header/flow-status/flow-status.component.ts | 14 ++++-
.../create-connection.component.spec.ts | 12 +++-
.../create-connection.component.ts | 10 ++--
.../import-from-registry.component.spec.ts | 12 +++-
.../import-from-registry.component.ts | 6 +-
.../port/edit-port/edit-port.component.spec.ts | 12 +++-
.../items/port/edit-port/edit-port.component.ts | 5 +-
.../edit-process-group.component.spec.ts | 11 +++-
.../edit-process-group.component.ts | 5 +-
.../edit-processor.component.spec.ts | 9 ++-
.../edit-processor/edit-processor.component.ts | 3 +
.../edit-remote-port.component.spec.ts | 12 +++-
.../edit-remote-port/edit-remote-port.component.ts | 6 +-
.../feature/parameter-contexts.component.ts | 8 +++
.../service/parameter-contexts.service.ts | 22 +++++--
.../edit-parameter-context.component.spec.ts | 12 +++-
.../edit-parameter-context.component.ts | 6 +-
.../pages/settings/feature/settings.component.ts | 8 +++
.../settings/service/flow-analysis-rule.service.ts | 17 ++++--
.../management-controller-service.service.ts | 16 +++--
.../settings/service/parameter-provider.service.ts | 30 ++++++----
.../settings/service/registry-client.service.ts | 15 +++--
.../settings/service/reporting-task.service.ts | 18 ++++--
...ntroller-service-advanced-ui-params.resolver.ts | 4 +-
...rameter-provider-advanced-ui-params.resolver.ts | 4 +-
.../reporting-task-advanced-ui-params.resolver.ts | 4 +-
.../src/app/pages/settings/state/general/index.ts | 1 +
.../pages/settings/state/registry-clients/index.ts | 1 +
.../edit-flow-analysis-rule.component.spec.ts | 9 ++-
.../edit-flow-analysis-rule.component.ts | 5 +-
.../general-form/general-form.component.spec.ts | 9 ++-
.../general/general-form/general-form.component.ts | 3 +
.../edit-parameter-provider.component.ts | 5 +-
...parameter-provider-parameters.component.spec.ts | 9 ++-
...etch-parameter-provider-parameters.component.ts | 6 +-
.../create-registry-client.component.spec.ts | 11 +++-
.../create-registry-client.component.ts | 5 +-
.../edit-registry-client.component.spec.ts | 9 ++-
.../edit-registry-client.component.ts | 5 +-
.../edit-reporting-task.component.spec.ts | 9 ++-
.../edit-reporting-task.component.ts | 5 +-
.../src/app/pages/users/feature/users.component.ts | 8 +++
.../src/app/pages/users/service/users.service.ts | 28 +++++++--
.../cluster-connection.service.ts} | 26 ++++----
.../service/controller-service-state.service.ts | 9 ++-
.../cluster-summary/cluster-summary.actions.ts | 10 ++++
.../cluster-summary/cluster-summary.effects.ts | 70 +++++++++++++++++++---
.../cluster-summary/cluster-summary.reducer.ts | 8 ++-
.../cluster-summary/cluster-summary.selectors.ts | 5 ++
.../nifi/src/app/state/cluster-summary/index.ts | 9 +--
.../ui/common/advanced-ui/advanced-ui.component.ts | 41 ++++++++++++-
.../edit-controller-service.component.spec.ts | 9 ++-
.../edit-controller-service.component.ts | 5 +-
.../ui/common/ok-dialog/ok-dialog.component.html | 2 +-
.../app/ui/common/ok-dialog/ok-dialog.component.ts | 8 ++-
69 files changed, 630 insertions(+), 148 deletions(-)
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/feature/access-policies.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/feature/access-policies.component.ts
index 1e0a2a4315..150899f686 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/feature/access-policies.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/feature/access-policies.component.ts
@@ -19,6 +19,11 @@ import { Component, OnDestroy, OnInit } from '@angular/core';
import { Store } from '@ngrx/store';
import { NiFiState } from '../../../state';
import { startCurrentUserPolling, stopCurrentUserPolling } from '../../../state/current-user/current-user.actions';
+import {
+ loadClusterSummary,
+ startClusterSummaryPolling,
+ stopClusterSummaryPolling
+} from '../../../state/cluster-summary/cluster-summary.actions';
@Component({
selector: 'access-policies',
@@ -29,10 +34,13 @@ export class AccessPolicies implements OnInit, OnDestroy {
constructor(private store: Store<NiFiState>) {}
ngOnInit(): void {
+ this.store.dispatch(loadClusterSummary());
this.store.dispatch(startCurrentUserPolling());
+ this.store.dispatch(startClusterSummaryPolling());
}
ngOnDestroy(): void {
+ this.store.dispatch(stopClusterSummaryPolling());
this.store.dispatch(stopCurrentUserPolling());
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/service/access-policy.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/service/access-policy.service.ts
index dfd87351bc..fe8f95ec6f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/service/access-policy.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/service/access-policy.service.ts
@@ -16,12 +16,13 @@
*/
import { Injectable } from '@angular/core';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { Client } from '../../../service/client.service';
import { Observable } from 'rxjs';
import { AccessPolicyEntity, ComponentResourceAction, ResourceAction } from '../state/shared';
import { NiFiCommon } from '../../../service/nifi-common.service';
import { TenantEntity } from '../../../state/shared';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class AccessPolicyService {
@@ -30,7 +31,8 @@ export class AccessPolicyService {
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
createAccessPolicy(
@@ -53,6 +55,7 @@ export class AccessPolicyService {
version: 0,
clientId: this.client.getClientId()
},
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
action: resourceAction.action,
resource,
@@ -81,6 +84,7 @@ export class AccessPolicyService {
updateAccessPolicy(accessPolicy: AccessPolicyEntity, users: TenantEntity[], userGroups: TenantEntity[]) {
const payload: unknown = {
revision: this.client.getRevision(accessPolicy),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: accessPolicy.id,
userGroups,
@@ -92,8 +96,13 @@ export class AccessPolicyService {
}
deleteAccessPolicy(accessPolicy: AccessPolicyEntity): Observable<any> {
- const revision: any = this.client.getRevision(accessPolicy);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(accessPolicy.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(accessPolicy),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(accessPolicy.uri), { params });
}
getUsers(): Observable<any> {
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/behavior/draggable-behavior.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/behavior/draggable-behavior.service.ts
index 3160a762a0..8dc3082b45 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/behavior/draggable-behavior.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/behavior/draggable-behavior.service.ts
@@ -28,6 +28,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { MoveComponentRequest, UpdateComponentRequest } from '../../state/flow';
import { Position } from '../../state/shared';
import { ComponentType } from '../../../../state/shared';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
@Injectable({
providedIn: 'root'
@@ -44,7 +45,8 @@ export class DraggableBehavior {
constructor(
private store: Store<CanvasState>,
private client: Client,
- private canvasUtils: CanvasUtils
+ private canvasUtils: CanvasUtils,
+ private clusterConnectionService: ClusterConnectionService
) {
const self: DraggableBehavior = this;
@@ -247,7 +249,7 @@ export class DraggableBehavior {
*
* @param {selection} the destination group
*/
- private updateComponentsGroup(group: any) {
+ private updateComponentsGroup(group: any): void {
// get the selection and deselect the components being moved
const selection: any = d3.selectAll('g.component.selected, g.connection.selected').classed('selected', false);
@@ -308,6 +310,7 @@ export class DraggableBehavior {
uri: d.uri,
payload: {
revision: this.client.getRevision(d),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: d.id,
position: newPosition
@@ -346,6 +349,7 @@ export class DraggableBehavior {
uri: connection.uri,
payload: {
revision: this.client.getRevision(connection),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: connection.id,
bends: newBends
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/controller-service.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/controller-service.service.ts
index d1f547c992..a533cc2360 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/controller-service.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/controller-service.service.ts
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { EMPTY, Observable } from 'rxjs';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { Client } from '../../../service/client.service';
import { NiFiCommon } from '../../../service/nifi-common.service';
import {
@@ -27,6 +27,7 @@ import {
PropertyDescriptorRetriever
} from '../../../state/shared';
import { ConfigureControllerServiceRequest, DeleteControllerServiceRequest } from '../state/controller-services';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class ControllerServiceService implements ControllerServiceCreator, PropertyDescriptorRetriever {
@@ -35,7 +36,8 @@ export class ControllerServiceService implements ControllerServiceCreator, Prope
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getControllerServices(processGroupId: string): Observable<any> {
@@ -66,6 +68,7 @@ export class ControllerServiceService implements ControllerServiceCreator, Prope
`${ControllerServiceService.API}/process-groups/${processGroupId}/controller-services`,
{
revision: createControllerService.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
bundle: createControllerService.controllerServiceBundle,
type: createControllerService.controllerServiceType
@@ -95,7 +98,12 @@ export class ControllerServiceService implements ControllerServiceCreator, Prope
deleteControllerService(deleteControllerService: DeleteControllerServiceRequest): Observable<any> {
const entity: ControllerServiceEntity = deleteControllerService.controllerService;
- const revision: any = this.client.getRevision(entity);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params });
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/flow.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/flow.service.ts
index 9133eee2ad..30c305b173 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/flow.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/flow.service.ts
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import {
ComponentRunStatusRequest,
CreateComponentRequest,
@@ -47,6 +47,7 @@ import {
import { ComponentType, PropertyDescriptorRetriever } from '../../../state/shared';
import { Client } from '../../../service/client.service';
import { NiFiCommon } from '../../../service/nifi-common.service';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class FlowService implements PropertyDescriptorRetriever {
@@ -55,7 +56,8 @@ export class FlowService implements PropertyDescriptorRetriever {
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getFlow(processGroupId = 'root'): Observable<any> {
@@ -112,6 +114,7 @@ export class FlowService implements PropertyDescriptorRetriever {
createFunnel(processGroupId = 'root', createFunnel: CreateComponentRequest): Observable<any> {
return this.httpClient.post(`${FlowService.API}/process-groups/${processGroupId}/funnels`, {
revision: createFunnel.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
position: createFunnel.position
}
@@ -121,6 +124,7 @@ export class FlowService implements PropertyDescriptorRetriever {
createLabel(processGroupId = 'root', createLabel: CreateComponentRequest): Observable<any> {
return this.httpClient.post(`${FlowService.API}/process-groups/${processGroupId}/labels`, {
revision: createLabel.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
position: createLabel.position
}
@@ -134,6 +138,7 @@ export class FlowService implements PropertyDescriptorRetriever {
createProcessor(processGroupId = 'root', createProcessor: CreateProcessorRequest): Observable<any> {
return this.httpClient.post(`${FlowService.API}/process-groups/${processGroupId}/processors`, {
revision: createProcessor.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
position: createProcessor.position,
type: createProcessor.processorType,
@@ -152,6 +157,7 @@ export class FlowService implements PropertyDescriptorRetriever {
createProcessGroup(processGroupId = 'root', createProcessGroup: CreateProcessGroupRequest): Observable<any> {
const payload: any = {
revision: createProcessGroup.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
position: createProcessGroup.position,
name: createProcessGroup.name
@@ -173,6 +179,7 @@ export class FlowService implements PropertyDescriptorRetriever {
): Observable<any> {
const payload: any = {
revision: createRemoteProcessGroup.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
position: createRemoteProcessGroup.position,
targetUris: createRemoteProcessGroup.targetUris,
@@ -200,6 +207,10 @@ export class FlowService implements PropertyDescriptorRetriever {
payload.append('positionX', uploadProcessGroup.position.x.toString());
payload.append('positionY', uploadProcessGroup.position.y.toString());
payload.append('clientId', uploadProcessGroup.revision.clientId);
+ payload.append(
+ 'disconnectedNodeAcknowledged',
+ String(this.clusterConnectionService.isDisconnectionAcknowledged())
+ );
payload.append('file', uploadProcessGroup.flowDefinition);
return this.httpClient.post(
@@ -222,6 +233,7 @@ export class FlowService implements PropertyDescriptorRetriever {
const portType: string = ComponentType.InputPort == createPort.type ? 'input-ports' : 'output-ports';
return this.httpClient.post(`${FlowService.API}/process-groups/${processGroupId}/${portType}`, {
revision: createPort.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
position: createPort.position,
name: createPort.name,
@@ -235,17 +247,25 @@ export class FlowService implements PropertyDescriptorRetriever {
}
deleteComponent(deleteComponent: DeleteComponentRequest): Observable<any> {
- const revision: any = this.client.getRevision(deleteComponent.entity);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(deleteComponent.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(deleteComponent.entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(deleteComponent.uri), { params });
}
createSnippet(snippet: Snippet): Observable<any> {
- return this.httpClient.post(`${FlowService.API}/snippets`, { snippet });
+ return this.httpClient.post(`${FlowService.API}/snippets`, {
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
+ snippet
+ });
}
moveSnippet(snippetId: string, groupId: string): Observable<any> {
const payload: any = {
- // 'disconnectedNodeAcknowledged': nfStorage.isDisconnectionAcknowledged(),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
snippet: {
id: snippetId,
parentGroupId: groupId
@@ -255,7 +275,12 @@ export class FlowService implements PropertyDescriptorRetriever {
}
deleteSnippet(snippetId: string): Observable<any> {
- return this.httpClient.delete(`${FlowService.API}/snippets/${snippetId}`);
+ const params = new HttpParams({
+ fromObject: {
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(`${FlowService.API}/snippets/${snippetId}`, { params });
}
replayLastProvenanceEvent(request: ReplayLastProvenanceEventRequest): Observable<any> {
@@ -265,7 +290,7 @@ export class FlowService implements PropertyDescriptorRetriever {
runOnce(request: RunOnceRequest): Observable<any> {
const startRequest: ComponentRunStatusRequest = {
revision: request.revision,
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: 'RUN_ONCE'
};
return this.httpClient.put(`${this.nifiCommon.stripProtocol(request.uri)}/run-status`, startRequest);
@@ -274,7 +299,7 @@ export class FlowService implements PropertyDescriptorRetriever {
startComponent(request: StartComponentRequest): Observable<any> {
const startRequest: ComponentRunStatusRequest = {
revision: request.revision,
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: request.type === ComponentType.RemoteProcessGroup ? 'TRANSMITTING' : 'RUNNING'
};
return this.httpClient.put(`${this.nifiCommon.stripProtocol(request.uri)}/run-status`, startRequest);
@@ -283,7 +308,7 @@ export class FlowService implements PropertyDescriptorRetriever {
stopComponent(request: StopComponentRequest): Observable<any> {
const stopRequest: ComponentRunStatusRequest = {
revision: request.revision,
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: 'STOPPED'
};
return this.httpClient.put(`${this.nifiCommon.stripProtocol(request.uri)}/run-status`, stopRequest);
@@ -292,7 +317,7 @@ export class FlowService implements PropertyDescriptorRetriever {
startProcessGroup(request: StartProcessGroupRequest): Observable<any> {
const startRequest: ProcessGroupRunStatusRequest = {
id: request.id,
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: 'RUNNING'
};
return this.httpClient.put(`${FlowService.API}/flow/process-groups/${request.id}`, startRequest);
@@ -300,7 +325,7 @@ export class FlowService implements PropertyDescriptorRetriever {
startRemoteProcessGroupsInProcessGroup(request: StartProcessGroupRequest): Observable<any> {
const startRequest = {
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: 'TRANSMITTING'
};
return this.httpClient.put(
@@ -312,7 +337,7 @@ export class FlowService implements PropertyDescriptorRetriever {
stopProcessGroup(request: StopProcessGroupRequest): Observable<any> {
const stopRequest: ProcessGroupRunStatusRequest = {
id: request.id,
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: 'STOPPED'
};
return this.httpClient.put(`${FlowService.API}/flow/process-groups/${request.id}`, stopRequest);
@@ -320,7 +345,7 @@ export class FlowService implements PropertyDescriptorRetriever {
stopRemoteProcessGroupsInProcessGroup(request: StopProcessGroupRequest): Observable<any> {
const stopRequest = {
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: 'STOPPED'
};
return this.httpClient.put(
@@ -338,7 +363,7 @@ export class FlowService implements PropertyDescriptorRetriever {
saveToFlowRegistry(request: SaveToVersionControlRequest): Observable<VersionControlInformationEntity> {
const saveRequest = {
...request,
- disconnectedNodeAcknowledged: false
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
};
return this.httpClient.post(
@@ -351,7 +376,7 @@ export class FlowService implements PropertyDescriptorRetriever {
const params: any = {
version: request.revision.version,
clientId: request.revision.clientId,
- disconnectedNodeAcknowledged: false
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
};
return this.httpClient.delete(`${FlowService.API}/versions/process-groups/${request.processGroupId}`, {
params
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/connection-manager.service.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/connection-manager.service.spec.ts
index f369a961d4..c334a35f86 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/connection-manager.service.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/connection-manager.service.spec.ts
@@ -36,6 +36,7 @@ import { selectFlowConfiguration } from '../../../../state/flow-configuration/fl
import * as fromFlowConfiguration from '../../../../state/flow-configuration/flow-configuration.reducer';
import { queueFeatureKey } from '../../../queue/state';
import * as fromQueue from '../../state/queue/queue.reducer';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
describe('ConnectionManager', () => {
let service: ConnectionManager;
@@ -71,7 +72,13 @@ describe('ConnectionManager', () => {
value: fromFlowConfiguration.initialState.flowConfiguration
}
]
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
service = TestBed.inject(ConnectionManager);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/connection-manager.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/connection-manager.service.ts
index d73de8a2d8..5debbbc881 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/connection-manager.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/connection-manager.service.ts
@@ -47,6 +47,7 @@ import { loadBalanceStrategies, UpdateComponentRequest } from '../../state/flow'
import { filter, switchMap } from 'rxjs';
import { NiFiCommon } from '../../../../service/nifi-common.service';
import { QuickSelectBehavior } from '../behavior/quick-select-behavior.service';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
export class ConnectionRenderOptions {
updatePath?: boolean;
@@ -98,7 +99,8 @@ export class ConnectionManager {
private client: Client,
private selectableBehavior: SelectableBehavior,
private transitionBehavior: TransitionBehavior,
- private quickSelectBehavior: QuickSelectBehavior
+ private quickSelectBehavior: QuickSelectBehavior,
+ private clusterConnectionService: ClusterConnectionService
) {}
/**
@@ -350,6 +352,7 @@ export class ConnectionManager {
uri: d.uri,
payload: {
revision: this.client.getRevision(d),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: connection
},
restoreOnFailure: restoreOnFailure
@@ -1974,7 +1977,7 @@ export class ConnectionManager {
const payload: any = {
revision: self.client.getRevision(connectionData),
- // TODO - 'disconnectedNodeAcknowledged': nfStorage.isDisconnectionAcknowledged(),
+ disconnectedNodeAcknowledged: self.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: connectionData.id,
destination: {
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/label-manager.service.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/label-manager.service.spec.ts
index 94d58725ef..517ae0dc3f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/label-manager.service.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/label-manager.service.spec.ts
@@ -36,6 +36,7 @@ import { selectFlowConfiguration } from '../../../../state/flow-configuration/fl
import * as fromFlowConfiguration from '../../../../state/flow-configuration/flow-configuration.reducer';
import { queueFeatureKey } from '../../../queue/state';
import * as fromQueue from '../../state/queue/queue.reducer';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
describe('LabelManager', () => {
let service: LabelManager;
@@ -71,7 +72,13 @@ describe('LabelManager', () => {
value: fromFlowConfiguration.initialState.flowConfiguration
}
]
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
service = TestBed.inject(LabelManager);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/label-manager.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/label-manager.service.ts
index 973eb5802b..2aa98d4f85 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/label-manager.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/manager/label-manager.service.ts
@@ -37,6 +37,7 @@ import { ComponentType } from '../../../../state/shared';
import { UpdateComponentRequest } from '../../state/flow';
import { filter, switchMap } from 'rxjs';
import { NiFiCommon } from '../../../../service/nifi-common.service';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
@Injectable({
providedIn: 'root'
@@ -62,6 +63,7 @@ export class LabelManager {
private canvasUtils: CanvasUtils,
private nifiCommon: NiFiCommon,
private client: Client,
+ private clusterConnectionService: ClusterConnectionService,
private positionBehavior: PositionBehavior,
private selectableBehavior: SelectableBehavior,
private quickSelectBehavior: QuickSelectBehavior,
@@ -343,6 +345,7 @@ export class LabelManager {
uri: labelData.uri,
payload: {
revision: self.client.getRevision(labelData),
+ disconnectedNodeAcknowledged: self.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: labelData.id,
width: labelData.dimensions.width,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/parameter-helper.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/parameter-helper.service.ts
index 881a59e608..08dc0af1c7 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/parameter-helper.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/parameter-helper.service.ts
@@ -31,6 +31,7 @@ import * as ErrorActions from '../../../state/error/error.actions';
import * as ParameterActions from '../state/parameter/parameter.actions';
import { FlowService } from './flow.service';
import { MEDIUM_DIALOG } from '../../../index';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({
providedIn: 'root'
@@ -41,6 +42,7 @@ export class ParameterHelperService {
private store: Store<NiFiState>,
private flowService: FlowService,
private parameterService: ParameterService,
+ private clusterConnectionService: ClusterConnectionService,
private client: Client
) {}
@@ -120,6 +122,8 @@ export class ParameterHelperService {
id: parameterContextId,
payload: {
revision: this.client.getRevision(parameterContextEntity),
+ disconnectedNodeAcknowledged:
+ this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: parameterContextEntity.id,
parameters: [{ parameter: dialogResponse.parameter }]
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/parameter.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/parameter.service.ts
index 9bdf082039..7572550a21 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/parameter.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/parameter.service.ts
@@ -17,9 +17,10 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { NiFiCommon } from '../../../service/nifi-common.service';
import { ParameterContextUpdateRequest, SubmitParameterContextUpdate } from '../../../state/shared';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class ParameterService {
@@ -27,7 +28,8 @@ export class ParameterService {
constructor(
private httpClient: HttpClient,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getParameterContext(id: string, includeInheritedParameters: boolean): Observable<any> {
@@ -50,6 +52,11 @@ export class ParameterService {
}
deleteParameterContextUpdate(updateRequest: ParameterContextUpdateRequest): Observable<any> {
- return this.httpClient.delete(this.nifiCommon.stripProtocol(updateRequest.uri));
+ const params = new HttpParams({
+ fromObject: {
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(updateRequest.uri), { params });
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/resolver/controller-service-advanced-ui-params.resolver.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/resolver/controller-service-advanced-ui-params.resolver.ts
index 7db25d3f98..9abc02c9af 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/resolver/controller-service-advanced-ui-params.resolver.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/resolver/controller-service-advanced-ui-params.resolver.ts
@@ -26,6 +26,7 @@ import { selectService } from '../../state/controller-services/controller-servic
import { ControllerServiceService } from '../controller-service.service';
import { HttpErrorResponse } from '@angular/common/http';
import { fullScreenError } from '../../../../state/error/error.actions';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
export const controllerServiceAdvancedUiParamsResolver: ResolveFn<AdvancedUiParams> = (
route: ActivatedRouteSnapshot
@@ -33,6 +34,7 @@ export const controllerServiceAdvancedUiParamsResolver: ResolveFn<AdvancedUiPara
const store: Store<NiFiState> = inject(Store);
const controllerServiceService: ControllerServiceService = inject(ControllerServiceService);
const client: Client = inject(Client);
+ const clusterConnectionService: ClusterConnectionService = inject(ClusterConnectionService);
// getting id parameter from activated route because ngrx router store
// is not initialized when this resolver executes
@@ -72,7 +74,7 @@ export const controllerServiceAdvancedUiParamsResolver: ResolveFn<AdvancedUiPara
clientId: revision.clientId,
revision: revision.version,
editable,
- disconnectedNodeAcknowledged: false // TODO
+ disconnectedNodeAcknowledged: clusterConnectionService.isDisconnectionAcknowledged()
} as AdvancedUiParams;
}),
take(1)
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/resolver/processor-advanced-ui-params.resolver.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/resolver/processor-advanced-ui-params.resolver.ts
index 5e7c382957..4df9a73f57 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/resolver/processor-advanced-ui-params.resolver.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/resolver/processor-advanced-ui-params.resolver.ts
@@ -26,11 +26,13 @@ import { AdvancedUiParams } from '../../../../state/shared';
import { Client } from '../../../../service/client.service';
import { fullScreenError } from '../../../../state/error/error.actions';
import { HttpErrorResponse } from '@angular/common/http';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
export const processorAdvancedUiParamsResolver: ResolveFn<AdvancedUiParams> = (route: ActivatedRouteSnapshot) => {
const store: Store<NiFiState> = inject(Store);
const flowService: FlowService = inject(FlowService);
const client: Client = inject(Client);
+ const clusterConnectionService: ClusterConnectionService = inject(ClusterConnectionService);
// getting id parameter from activated route because ngrx router store
// is not initialized when this resolver executes
@@ -73,7 +75,7 @@ export const processorAdvancedUiParamsResolver: ResolveFn<AdvancedUiParams> = (r
clientId: revision.clientId,
revision: revision.version,
editable,
- disconnectedNodeAcknowledged: false // TODO
+ disconnectedNodeAcknowledged: clusterConnectionService.isDisconnectionAcknowledged()
} as AdvancedUiParams;
}),
take(1)
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/manage-remote-ports/manage-remote-ports.effects.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/manage-remote-ports/manage-remote-ports.effects.ts
index c792b255eb..eb5c3e3479 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/manage-remote-ports/manage-remote-ports.effects.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/manage-remote-ports/manage-remote-ports.effects.ts
@@ -35,6 +35,7 @@ import { ComponentType, isDefinedAndNotNull } from '../../../../state/shared';
import { selectTimeOffset } from '../../../../state/flow-configuration/flow-configuration.selectors';
import { selectAbout } from '../../../../state/about/about.selectors';
import { MEDIUM_DIALOG } from '../../../../index';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
@Injectable()
export class ManageRemotePortsEffects {
@@ -44,7 +45,8 @@ export class ManageRemotePortsEffects {
private manageRemotePortService: ManageRemotePortService,
private errorHelper: ErrorHelper,
private dialog: MatDialog,
- private router: Router
+ private router: Router,
+ private clusterConnectionService: ClusterConnectionService
) {}
loadRemotePorts$ = createEffect(() =>
@@ -136,7 +138,7 @@ export class ManageRemotePortsEffects {
.updateRemotePortTransmission({
portId: request.port.id,
rpg: request.rpg,
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
type: request.port.type,
state: 'TRANSMITTING'
})
@@ -165,7 +167,7 @@ export class ManageRemotePortsEffects {
.updateRemotePortTransmission({
portId: request.port.id,
rpg: request.rpg,
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
type: request.port.type,
state: 'STOPPED'
})
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/header/flow-status/flow-status.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/header/flow-status/flow-status.component.ts
index 2105d8cf21..f6b7c11b20 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/header/flow-status/flow-status.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/header/flow-status/flow-status.component.ts
@@ -36,9 +36,17 @@ export class FlowStatus {
@Input() controllerStatus: ControllerStatus = initialState.flowStatus.controllerStatus;
@Input() lastRefreshed: string = initialState.flow.processGroupFlow.lastRefreshed;
@Input() clusterSummary: ClusterSummary | null = null;
- @Input() bulletins: BulletinEntity[] = initialState.controllerBulletins.bulletins;
@Input() currentProcessGroupId: string = initialState.id;
@Input() loadingStatus = false;
+ @Input() set bulletins(bulletins: BulletinEntity[]) {
+ if (bulletins) {
+ this.filteredBulletins = bulletins.filter((bulletin) => bulletin.canRead);
+ } else {
+ this.filteredBulletins = [];
+ }
+ }
+
+ private filteredBulletins: BulletinEntity[] = initialState.controllerBulletins.bulletins;
protected readonly BulletinsTip = BulletinsTip;
@@ -112,12 +120,12 @@ export class FlowStatus {
}
hasBulletins(): boolean {
- return this.bulletins.length > 0;
+ return this.filteredBulletins.length > 0;
}
getBulletins(): BulletinsTipInput {
return {
- bulletins: this.bulletins
+ bulletins: this.filteredBulletins
};
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/connection/create-connection/create-connection.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/connection/create-connection/create-connection.component.spec.ts
index 3497a880e8..49c6307e95 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/connection/create-connection/create-connection.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/connection/create-connection/create-connection.component.spec.ts
@@ -25,6 +25,7 @@ import { CreateConnectionDialogRequest } from '../../../../../state/flow';
import { ComponentType, DocumentedType } from '../../../../../../../state/shared';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of } from 'rxjs';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
describe('CreateConnection', () => {
let component: CreateConnection;
@@ -367,7 +368,16 @@ describe('CreateConnection', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CreateConnection, NoopAnimationsModule],
- providers: [{ provide: MAT_DIALOG_DATA, useValue: data }, provideMockStore({ initialState })]
+ providers: [
+ { provide: MAT_DIALOG_DATA, useValue: data },
+ provideMockStore({ initialState }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
+ ]
});
fixture = TestBed.createComponent(CreateConnection);
component = fixture.componentInstance;
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/connection/create-connection/create-connection.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/connection/create-connection/create-connection.component.ts
index 1e34bf267f..669d8c5be8 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/connection/create-connection/create-connection.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/connection/create-connection/create-connection.component.ts
@@ -45,7 +45,6 @@ import { SourceProcessor } from '../source/source-processor/source-processor.com
import { DestinationFunnel } from '../destination/destination-funnel/destination-funnel.component';
import { createConnection } from '../../../../../state/flow/flow.actions';
import { Client } from '../../../../../../../service/client.service';
-import { CanvasUtils } from '../../../../../service/canvas-utils.service';
import { SourceFunnel } from '../source/source-funnel/source-funnel.component';
import { DestinationProcessor } from '../destination/destination-processor/destination-processor.component';
import { DestinationOutputPort } from '../destination/destination-output-port/destination-output-port.component';
@@ -56,6 +55,8 @@ import { DestinationProcessGroup } from '../destination/destination-process-grou
import { SourceRemoteProcessGroup } from '../source/source-remote-process-group/source-remote-process-group.component';
import { DestinationRemoteProcessGroup } from '../destination/destination-remote-process-group/destination-remote-process-group.component';
import { BreadcrumbEntity } from '../../../../../state/shared';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
+import { CanvasUtils } from '../../../../../service/canvas-utils.service';
@Component({
selector: 'create-connection',
@@ -114,6 +115,8 @@ export class CreateConnection {
}
}
+ protected readonly loadBalanceStrategies = loadBalanceStrategies;
+ protected readonly loadBalanceCompressionStrategies = loadBalanceCompressionStrategies;
protected readonly ComponentType = ComponentType;
protected readonly TextTip = TextTip;
@@ -136,6 +139,7 @@ export class CreateConnection {
private formBuilder: FormBuilder,
private store: Store<NiFiState>,
private canvasUtils: CanvasUtils,
+ private clusterConnectionService: ClusterConnectionService,
private client: Client
) {
this.source = dialogRequest.request.source;
@@ -230,6 +234,7 @@ export class CreateConnection {
version: 0,
clientId: this.client.getClientId()
},
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
backPressureDataSizeThreshold: this.createConnectionForm.get('backPressureDataSizeThreshold')?.value,
backPressureObjectThreshold: this.createConnectionForm.get('backPressureObjectThreshold')?.value,
@@ -299,7 +304,4 @@ export class CreateConnection {
})
);
}
-
- protected readonly loadBalanceStrategies = loadBalanceStrategies;
- protected readonly loadBalanceCompressionStrategies = loadBalanceCompressionStrategies;
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/flow/import-from-registry/import-from-registry.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/flow/import-from-registry/import-from-registry.component.spec.ts
index 29dddef2f1..1808624122 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/flow/import-from-registry/import-from-registry.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/flow/import-from-registry/import-from-registry.component.spec.ts
@@ -25,6 +25,7 @@ import { provideMockStore } from '@ngrx/store/testing';
import { initialState } from '../../../../../state/flow/flow.reducer';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { EMPTY } from 'rxjs';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
describe('ImportFromRegistry', () => {
let component: ImportFromRegistry;
@@ -112,7 +113,16 @@ describe('ImportFromRegistry', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [ImportFromRegistry, NoopAnimationsModule],
- providers: [{ provide: MAT_DIALOG_DATA, useValue: data }, provideMockStore({ initialState })]
+ providers: [
+ { provide: MAT_DIALOG_DATA, useValue: data },
+ provideMockStore({ initialState }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
+ ]
});
fixture = TestBed.createComponent(ImportFromRegistry);
component = fixture.componentInstance;
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/flow/import-from-registry/import-from-registry.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/flow/import-from-registry/import-from-registry.component.ts
index f6935b4306..8dd2a3d14a 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/flow/import-from-registry/import-from-registry.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/flow/import-from-registry/import-from-registry.component.ts
@@ -53,6 +53,7 @@ import { selectTimeOffset } from '../../../../../../../state/flow-configuration/
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { Client } from '../../../../../../../service/client.service';
import { importFromRegistry } from '../../../../../state/flow/flow.actions';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
@Component({
selector: 'import-from-registry',
@@ -117,7 +118,8 @@ export class ImportFromRegistry implements OnInit {
private formBuilder: FormBuilder,
private store: Store<CanvasState>,
private nifiCommon: NiFiCommon,
- private client: Client
+ private client: Client,
+ private clusterConnectionService: ClusterConnectionService
) {
this.store
.select(selectTimeOffset)
@@ -309,7 +311,7 @@ export class ImportFromRegistry implements OnInit {
version: 0
}
}),
- // disconnectedNodeAcknowledged: nfStorage.isDisconnectionAcknowledged(),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
position: {
x: this.dialogRequest.request.position.x,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/port/edit-port/edit-port.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/port/edit-port/edit-port.component.spec.ts
index bff4f6b464..b77298bf16 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/port/edit-port/edit-port.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/port/edit-port/edit-port.component.spec.ts
@@ -24,6 +24,7 @@ import { ComponentType } from '../../../../../../../state/shared';
import { provideMockStore } from '@ngrx/store/testing';
import { initialState } from '../../../../../state/flow/flow.reducer';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
describe('EditPort', () => {
let component: EditPort;
@@ -96,7 +97,16 @@ describe('EditPort', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [EditPort, NoopAnimationsModule],
- providers: [{ provide: MAT_DIALOG_DATA, useValue: data }, provideMockStore({ initialState })]
+ providers: [
+ { provide: MAT_DIALOG_DATA, useValue: data },
+ provideMockStore({ initialState }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
+ ]
});
fixture = TestBed.createComponent(EditPort);
component = fixture.componentInstance;
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/port/edit-port/edit-port.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/port/edit-port/edit-port.component.ts
index 8b3247f265..b1a5e5a9ab 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/port/edit-port/edit-port.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/port/edit-port/edit-port.component.ts
@@ -31,6 +31,7 @@ import { MatButtonModule } from '@angular/material/button';
import { AsyncPipe } from '@angular/common';
import { selectSaving } from '../../../../../state/flow/flow.selectors';
import { NifiSpinnerDirective } from '../../../../../../../ui/common/spinner/nifi-spinner.directive';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
@Component({
selector: 'edit-port',
@@ -58,7 +59,8 @@ export class EditPort {
@Inject(MAT_DIALOG_DATA) public request: EditComponentDialogRequest,
private formBuilder: FormBuilder,
private store: Store<CanvasState>,
- private client: Client
+ private client: Client,
+ private clusterConnectionService: ClusterConnectionService
) {
// set the port type name
if (ComponentType.InputPort == this.request.type) {
@@ -82,6 +84,7 @@ export class EditPort {
editPort() {
const payload: any = {
revision: this.client.getRevision(this.request.entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: this.request.entity.id,
name: this.editPortForm.get('name')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.spec.ts
index 7365b89420..2d4086c000 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.spec.ts
@@ -20,6 +20,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { EditProcessGroup } from './edit-process-group.component';
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
describe('EditProcessGroup', () => {
let component: EditProcessGroup;
@@ -107,7 +108,15 @@ describe('EditProcessGroup', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [EditProcessGroup, NoopAnimationsModule],
- providers: [{ provide: MAT_DIALOG_DATA, useValue: data }]
+ providers: [
+ { provide: MAT_DIALOG_DATA, useValue: data },
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
+ ]
});
fixture = TestBed.createComponent(EditProcessGroup);
component = fixture.componentInstance;
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.ts
index 9fbec0c927..c152c279bd 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.ts
@@ -35,6 +35,7 @@ import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-t
import { ParameterContextEntity } from '../../../../../../parameter-contexts/state/parameter-context-listing';
import { ControllerServiceTable } from '../../../../../../../ui/common/controller-service/controller-service-table/controller-service-table.component';
import { EditComponentDialogRequest } from '../../../../../state/flow';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
@Component({
selector: 'edit-process-group',
@@ -151,7 +152,8 @@ export class EditProcessGroup {
constructor(
@Inject(MAT_DIALOG_DATA) public request: EditComponentDialogRequest,
private formBuilder: FormBuilder,
- private client: Client
+ private client: Client,
+ private clusterConnectionService: ClusterConnectionService
) {
this.parameterContextsOptions.push({
text: 'No parameter context',
@@ -199,6 +201,7 @@ export class EditProcessGroup {
const payload: any = {
revision: this.client.getRevision(this.request.entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
processGroupUpdateStrategy: updateStrategy,
component: {
id: this.request.entity.id,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/processor/edit-processor/edit-processor.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/processor/edit-processor/edit-processor.component.spec.ts
index c811960007..1ba82720c0 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/processor/edit-processor/edit-processor.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/processor/edit-processor/edit-processor.component.spec.ts
@@ -25,6 +25,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { Component } from '@angular/core';
import { provideMockStore } from '@ngrx/store/testing';
import { initialState } from '../../../../../../../state/error/error.reducer';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
describe('EditProcessor', () => {
let component: EditProcessor;
@@ -736,7 +737,13 @@ describe('EditProcessor', () => {
{ provide: MAT_DIALOG_DATA, useValue: data },
provideMockStore({
initialState
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
fixture = TestBed.createComponent(EditProcessor);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/processor/edit-processor/edit-processor.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/processor/edit-processor/edit-processor.component.ts
index 878b3e6d5c..09bee2d8e8 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/processor/edit-processor/edit-processor.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/items/processor/edit-processor/edit-processor.component.ts
@@ -48,6 +48,7 @@ import {
RelationshipSettings
} from './relationship-settings/relationship-settings.component';
import { ErrorBanner } from '../../../../../../../ui/common/error-banner/error-banner.component';
+import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
@Component({
selector: 'edit-processor',
@@ -147,6 +148,7 @@ export class EditProcessor {
@Inject(MAT_DIALOG_DATA) public request: EditComponentDialogRequest,
private formBuilder: FormBuilder,
private client: Client,
+ private clusterConnectionService: ClusterConnectionService,
private nifiCommon: NiFiCommon
) {
const processorProperties: any = request.entity.component.config.properties;
@@ -291,6 +293,7 @@ export class EditProcessor {
const payload: any = {
revision: this.client.getRevision(this.request.entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: this.request.entity.id,
name: this.editProcessorForm.get('name')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/manage-remote-ports/edit-remote-port/edit-remote-port.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/manage-remote-ports/edit-remote-port/edit-remote-port.component.spec.ts
index 078fb0e334..9f8476be66 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/manage-remote-ports/edit-remote-port/edit-remote-port.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/manage-remote-ports/edit-remote-port/edit-remote-port.component.spec.ts
@@ -24,6 +24,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { EditComponentDialogRequest } from '../../../state/flow';
import { ComponentType } from '../../../../../state/shared';
import { initialState } from '../../../state/manage-remote-ports/manage-remote-ports.reducer';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
describe('EditRemotePortComponent', () => {
let component: EditRemotePortComponent;
@@ -50,7 +51,16 @@ describe('EditRemotePortComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [EditRemotePortComponent, NoopAnimationsModule],
- providers: [{ provide: MAT_DIALOG_DATA, useValue: data }, provideMockStore({ initialState })]
+ providers: [
+ { provide: MAT_DIALOG_DATA, useValue: data },
+ provideMockStore({ initialState }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
+ ]
});
fixture = TestBed.createComponent(EditRemotePortComponent);
component = fixture.componentInstance;
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/manage-remote-ports/edit-remote-port/edit-remote-port.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/manage-remote-ports/edit-remote-port/edit-remote-port.component.ts
index d07f664d0d..82d4b11b61 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/manage-remote-ports/edit-remote-port/edit-remote-port.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/manage-remote-ports/edit-remote-port/edit-remote-port.component.ts
@@ -31,6 +31,7 @@ import { Client } from '../../../../../service/client.service';
import { ComponentType } from '../../../../../state/shared';
import { PortSummary } from '../../../state/manage-remote-ports';
import { configureRemotePort } from '../../../state/manage-remote-ports/manage-remote-ports.actions';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
standalone: true,
@@ -57,7 +58,8 @@ export class EditRemotePortComponent {
@Inject(MAT_DIALOG_DATA) public request: EditRemotePortDialogRequest,
private formBuilder: FormBuilder,
private store: Store<CanvasState>,
- private client: Client
+ private client: Client,
+ private clusterConnectionService: ClusterConnectionService
) {
// set the port type name
if (ComponentType.InputPort == this.request.type) {
@@ -79,7 +81,7 @@ export class EditRemotePortComponent {
editRemotePort() {
const payload: any = {
revision: this.client.getRevision(this.request.rpg),
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
type: this.request.type,
remoteProcessGroupPort: {
concurrentlySchedulableTaskCount: this.editPortForm.get('concurrentTasks')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/feature/parameter-contexts.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/feature/parameter-contexts.component.ts
index 4afc041cd3..b5c62fe996 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/feature/parameter-contexts.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/feature/parameter-contexts.component.ts
@@ -19,6 +19,11 @@ import { Component, OnDestroy, OnInit } from '@angular/core';
import { Store } from '@ngrx/store';
import { NiFiState } from '../../../state';
import { startCurrentUserPolling, stopCurrentUserPolling } from '../../../state/current-user/current-user.actions';
+import {
+ loadClusterSummary,
+ startClusterSummaryPolling,
+ stopClusterSummaryPolling
+} from '../../../state/cluster-summary/cluster-summary.actions';
@Component({
selector: 'parameter-contexts',
@@ -29,10 +34,13 @@ export class ParameterContexts implements OnInit, OnDestroy {
constructor(private store: Store<NiFiState>) {}
ngOnInit(): void {
+ this.store.dispatch(loadClusterSummary());
this.store.dispatch(startCurrentUserPolling());
+ this.store.dispatch(startClusterSummaryPolling());
}
ngOnDestroy(): void {
+ this.store.dispatch(stopClusterSummaryPolling());
this.store.dispatch(stopCurrentUserPolling());
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/service/parameter-contexts.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/service/parameter-contexts.service.ts
index b71a28752d..cc2dd0b567 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/service/parameter-contexts.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/service/parameter-contexts.service.ts
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { Client } from '../../../service/client.service';
import { NiFiCommon } from '../../../service/nifi-common.service';
import {
@@ -26,6 +26,7 @@ import {
ParameterContextEntity
} from '../state/parameter-context-listing';
import { ParameterContextUpdateRequest, SubmitParameterContextUpdate } from '../../../state/shared';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class ParameterContextService {
@@ -34,7 +35,8 @@ export class ParameterContextService {
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getParameterContexts(): Observable<any> {
@@ -68,14 +70,22 @@ export class ParameterContextService {
}
deleteParameterContextUpdate(updateRequest: ParameterContextUpdateRequest): Observable<any> {
- return this.httpClient.delete(this.nifiCommon.stripProtocol(updateRequest.uri));
+ const params = new HttpParams({
+ fromObject: {
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(updateRequest.uri), { params });
}
deleteParameterContext(deleteParameterContext: DeleteParameterContextRequest): Observable<any> {
const entity: ParameterContextEntity = deleteParameterContext.parameterContext;
- const revision: any = this.client.getRevision(entity);
- return this.httpClient.delete(`${ParameterContextService.API}/parameter-contexts/${entity.id}`, {
- params: revision
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
});
+ return this.httpClient.delete(`${ParameterContextService.API}/parameter-contexts/${entity.id}`, { params });
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.spec.ts
index f0c8107822..6358da10e9 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.spec.ts
@@ -24,6 +24,7 @@ import { of } from 'rxjs';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { provideMockStore } from '@ngrx/store/testing';
import { initialState } from '../../../state/parameter-context-listing/parameter-context-listing.reducer';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
describe('EditParameterContext', () => {
let component: EditParameterContext;
@@ -235,7 +236,16 @@ describe('EditParameterContext', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [EditParameterContext, NoopAnimationsModule],
- providers: [{ provide: MAT_DIALOG_DATA, useValue: data }, provideMockStore({ initialState })]
+ providers: [
+ { provide: MAT_DIALOG_DATA, useValue: data },
+ provideMockStore({ initialState }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
+ ]
});
fixture = TestBed.createComponent(EditParameterContext);
component = fixture.componentInstance;
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts
index 123c703a87..068c91992f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts
@@ -41,6 +41,7 @@ import { ParameterContextInheritance } from '../parameter-context-inheritance/pa
import { ParameterReferences } from '../../../../../ui/common/parameter-references/parameter-references.component';
import { RouterLink } from '@angular/router';
import { ErrorBanner } from '../../../../../ui/common/error-banner/error-banner.component';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
selector: 'edit-parameter-context',
@@ -86,7 +87,8 @@ export class EditParameterContext {
constructor(
@Inject(MAT_DIALOG_DATA) public request: EditParameterContextRequest,
private formBuilder: FormBuilder,
- private client: Client
+ private client: Client,
+ private clusterConnectionService: ClusterConnectionService
) {
if (request.parameterContext) {
this.isNew = false;
@@ -131,6 +133,7 @@ export class EditParameterContext {
version: 0,
clientId: this.client.getClientId()
},
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
name: this.editParameterContextForm.get('name')?.value,
description: this.editParameterContextForm.get('description')?.value,
@@ -152,6 +155,7 @@ export class EditParameterContext {
const payload: any = {
revision: this.client.getRevision(pc),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: pc.id,
name: this.editParameterContextForm.get('name')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/feature/settings.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/feature/settings.component.ts
index ecacf6f38b..813bb1445e 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/feature/settings.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/feature/settings.component.ts
@@ -20,6 +20,11 @@ import { Store } from '@ngrx/store';
import { NiFiState } from '../../../state';
import { startCurrentUserPolling, stopCurrentUserPolling } from '../../../state/current-user/current-user.actions';
import { loadExtensionTypesForSettings } from '../../../state/extension-types/extension-types.actions';
+import {
+ loadClusterSummary,
+ startClusterSummaryPolling,
+ stopClusterSummaryPolling
+} from '../../../state/cluster-summary/cluster-summary.actions';
@Component({
selector: 'settings',
@@ -57,11 +62,14 @@ export class Settings implements OnInit, OnDestroy {
constructor(private store: Store<NiFiState>) {}
ngOnInit(): void {
+ this.store.dispatch(loadClusterSummary());
this.store.dispatch(startCurrentUserPolling());
+ this.store.dispatch(startClusterSummaryPolling());
this.store.dispatch(loadExtensionTypesForSettings());
}
ngOnDestroy(): void {
+ this.store.dispatch(stopClusterSummaryPolling());
this.store.dispatch(stopCurrentUserPolling());
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/flow-analysis-rule.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/flow-analysis-rule.service.ts
index c15ae5072c..3f3dc78df6 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/flow-analysis-rule.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/flow-analysis-rule.service.ts
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { Client } from '../../../service/client.service';
import { NiFiCommon } from '../../../service/nifi-common.service';
import {
@@ -28,6 +28,7 @@ import {
FlowAnalysisRuleEntity
} from '../state/flow-analysis-rules';
import { PropertyDescriptorRetriever } from '../../../state/shared';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class FlowAnalysisRuleService implements PropertyDescriptorRetriever {
@@ -36,7 +37,8 @@ export class FlowAnalysisRuleService implements PropertyDescriptorRetriever {
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getFlowAnalysisRule(): Observable<any> {
@@ -46,6 +48,7 @@ export class FlowAnalysisRuleService implements PropertyDescriptorRetriever {
createFlowAnalysisRule(createFlowAnalysisRule: CreateFlowAnalysisRuleRequest): Observable<any> {
return this.httpClient.post(`${FlowAnalysisRuleService.API}/controller/flow-analysis-rules`, {
revision: createFlowAnalysisRule.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
bundle: createFlowAnalysisRule.flowAnalysisRuleBundle,
type: createFlowAnalysisRule.flowAnalysisRuleType
@@ -55,8 +58,13 @@ export class FlowAnalysisRuleService implements PropertyDescriptorRetriever {
deleteFlowAnalysisRule(deleteFlowAnalysisRule: DeleteFlowAnalysisRuleRequest): Observable<any> {
const entity: FlowAnalysisRuleEntity = deleteFlowAnalysisRule.flowAnalysisRule;
- const revision: any = this.client.getRevision(entity);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params });
}
getPropertyDescriptor(id: string, propertyName: string, sensitive: boolean): Observable<any> {
@@ -80,6 +88,7 @@ export class FlowAnalysisRuleService implements PropertyDescriptorRetriever {
const entity: FlowAnalysisRuleEntity = flowAnalysisRule.flowAnalysisRule;
return this.httpClient.put(`${this.nifiCommon.stripProtocol(entity.uri)}/run-status`, {
revision: this.client.getRevision(entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: enabled ? 'ENABLED' : 'DISABLED',
uiOnly: true
});
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/management-controller-service.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/management-controller-service.service.ts
index 9c0f3f968e..88bf49927f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/management-controller-service.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/management-controller-service.service.ts
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import {
ConfigureControllerServiceRequest,
DeleteControllerServiceRequest
@@ -30,6 +30,7 @@ import {
CreateControllerServiceRequest,
PropertyDescriptorRetriever
} from '../../../state/shared';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class ManagementControllerServiceService implements ControllerServiceCreator, PropertyDescriptorRetriever {
@@ -38,7 +39,8 @@ export class ManagementControllerServiceService implements ControllerServiceCrea
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getControllerServices(): Observable<any> {
@@ -51,6 +53,7 @@ export class ManagementControllerServiceService implements ControllerServiceCrea
createControllerService(createControllerService: CreateControllerServiceRequest): Observable<any> {
return this.httpClient.post(`${ManagementControllerServiceService.API}/controller/controller-services`, {
revision: createControllerService.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
bundle: createControllerService.controllerServiceBundle,
type: createControllerService.controllerServiceType
@@ -84,7 +87,12 @@ export class ManagementControllerServiceService implements ControllerServiceCrea
deleteControllerService(deleteControllerService: DeleteControllerServiceRequest): Observable<any> {
const entity: ControllerServiceEntity = deleteControllerService.controllerService;
- const revision: any = this.client.getRevision(entity);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params });
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/parameter-provider.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/parameter-provider.service.ts
index 1aeba9a907..a3ab72e6a4 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/parameter-provider.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/parameter-provider.service.ts
@@ -16,7 +16,7 @@
*/
import { Injectable } from '@angular/core';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { Client } from '../../../service/client.service';
import { NiFiCommon } from '../../../service/nifi-common.service';
import { Observable } from 'rxjs';
@@ -30,6 +30,7 @@ import {
ParameterProviderParameterApplicationEntity
} from '../state/parameter-providers';
import { PropertyDescriptorRetriever } from '../../../state/shared';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class ParameterProviderService implements PropertyDescriptorRetriever {
@@ -38,7 +39,8 @@ export class ParameterProviderService implements PropertyDescriptorRetriever {
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getParameterProviders(): Observable<any> {
@@ -52,6 +54,7 @@ export class ParameterProviderService implements PropertyDescriptorRetriever {
createParameterProvider(request: CreateParameterProviderRequest) {
return this.httpClient.post(`${ParameterProviderService.API}/controller/parameter-providers`, {
revision: request.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
bundle: request.parameterProviderBundle,
type: request.parameterProviderType
@@ -61,11 +64,12 @@ export class ParameterProviderService implements PropertyDescriptorRetriever {
deleteParameterProvider(request: DeleteParameterProviderRequest) {
const entity: ParameterProviderEntity = request.parameterProvider;
- const revision: any = this.client.getRevision(entity);
- const params: any = {
- ...revision,
- disconnectedNodeAcknowledged: false
- };
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params });
}
@@ -88,9 +92,10 @@ export class ParameterProviderService implements PropertyDescriptorRetriever {
`${ParameterProviderService.API}/parameter-providers/${request.id}/parameters/fetch-requests`,
{
id: request.id,
- revision: request.revision
+ revision: request.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
},
- { params: { disconnectedNodeAcknowledged: false } }
+ { params: { disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged() } }
);
}
@@ -110,6 +115,11 @@ export class ParameterProviderService implements PropertyDescriptorRetriever {
deleteParameterProviderParametersUpdateRequest(
updateRequest: ParameterProviderApplyParametersRequest
): Observable<any> {
- return this.httpClient.delete(this.nifiCommon.stripProtocol(updateRequest.uri));
+ const params = new HttpParams({
+ fromObject: {
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(updateRequest.uri), { params });
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/registry-client.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/registry-client.service.ts
index 514043c7a7..20aae30f10 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/registry-client.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/registry-client.service.ts
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { Client } from '../../../service/client.service';
import { NiFiCommon } from '../../../service/nifi-common.service';
import {
@@ -26,6 +26,7 @@ import {
EditRegistryClientRequest
} from '../state/registry-clients';
import { PropertyDescriptorRetriever, RegistryClientEntity } from '../../../state/shared';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class RegistryClientService implements PropertyDescriptorRetriever {
@@ -34,7 +35,8 @@ export class RegistryClientService implements PropertyDescriptorRetriever {
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getRegistryClients(): Observable<any> {
@@ -61,7 +63,12 @@ export class RegistryClientService implements PropertyDescriptorRetriever {
deleteRegistryClient(deleteRegistryClient: DeleteRegistryClientRequest): Observable<any> {
const entity: RegistryClientEntity = deleteRegistryClient.registryClient;
- const revision: any = this.client.getRevision(entity);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params });
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/reporting-task.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/reporting-task.service.ts
index 4a5d963e60..ccf32d9bd4 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/reporting-task.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/reporting-task.service.ts
@@ -17,7 +17,7 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { Client } from '../../../service/client.service';
import { NiFiCommon } from '../../../service/nifi-common.service';
import {
@@ -29,6 +29,7 @@ import {
StopReportingTaskRequest
} from '../state/reporting-tasks';
import { PropertyDescriptorRetriever } from '../../../state/shared';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class ReportingTaskService implements PropertyDescriptorRetriever {
@@ -37,7 +38,8 @@ export class ReportingTaskService implements PropertyDescriptorRetriever {
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getReportingTasks(): Observable<any> {
@@ -51,6 +53,7 @@ export class ReportingTaskService implements PropertyDescriptorRetriever {
createReportingTask(createReportingTask: CreateReportingTaskRequest): Observable<any> {
return this.httpClient.post(`${ReportingTaskService.API}/controller/reporting-tasks`, {
revision: createReportingTask.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
bundle: createReportingTask.reportingTaskBundle,
type: createReportingTask.reportingTaskType
@@ -60,8 +63,13 @@ export class ReportingTaskService implements PropertyDescriptorRetriever {
deleteReportingTask(deleteReportingTask: DeleteReportingTaskRequest): Observable<any> {
const entity: ReportingTaskEntity = deleteReportingTask.reportingTask;
- const revision: any = this.client.getRevision(entity);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(entity),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(entity.uri), { params });
}
startReportingTask(startReportingTask: StartReportingTaskRequest): Observable<any> {
@@ -69,6 +77,7 @@ export class ReportingTaskService implements PropertyDescriptorRetriever {
const revision: any = this.client.getRevision(entity);
const payload: any = {
revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: 'RUNNING'
};
return this.httpClient.put(`${this.nifiCommon.stripProtocol(entity.uri)}/run-status`, payload);
@@ -79,6 +88,7 @@ export class ReportingTaskService implements PropertyDescriptorRetriever {
const revision: any = this.client.getRevision(entity);
const payload: any = {
revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: 'STOPPED'
};
return this.httpClient.put(`${this.nifiCommon.stripProtocol(entity.uri)}/run-status`, payload);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/controller-service-advanced-ui-params.resolver.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/controller-service-advanced-ui-params.resolver.ts
index 3f738432c2..2d97fb6913 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/controller-service-advanced-ui-params.resolver.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/controller-service-advanced-ui-params.resolver.ts
@@ -26,6 +26,7 @@ import { HttpErrorResponse } from '@angular/common/http';
import { fullScreenError } from '../../../../state/error/error.actions';
import { ManagementControllerServiceService } from '../management-controller-service.service';
import { selectService } from '../../state/management-controller-services/management-controller-services.selectors';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
export const controllerServiceAdvancedUiParamsResolver: ResolveFn<AdvancedUiParams> = (
route: ActivatedRouteSnapshot
@@ -35,6 +36,7 @@ export const controllerServiceAdvancedUiParamsResolver: ResolveFn<AdvancedUiPara
ManagementControllerServiceService
);
const client: Client = inject(Client);
+ const clusterConnectionService: ClusterConnectionService = inject(ClusterConnectionService);
// getting id parameter from activated route because ngrx router store
// is not initialized when this resolver executes
@@ -74,7 +76,7 @@ export const controllerServiceAdvancedUiParamsResolver: ResolveFn<AdvancedUiPara
clientId: revision.clientId,
revision: revision.version,
editable,
- disconnectedNodeAcknowledged: false // TODO
+ disconnectedNodeAcknowledged: clusterConnectionService.isDisconnectionAcknowledged()
} as AdvancedUiParams;
}),
take(1)
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/parameter-provider-advanced-ui-params.resolver.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/parameter-provider-advanced-ui-params.resolver.ts
index 78ff4aba8a..3c4e6db912 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/parameter-provider-advanced-ui-params.resolver.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/parameter-provider-advanced-ui-params.resolver.ts
@@ -26,6 +26,7 @@ import { HttpErrorResponse } from '@angular/common/http';
import { fullScreenError } from '../../../../state/error/error.actions';
import { ParameterProviderService } from '../parameter-provider.service';
import { selectParameterProvider } from '../../state/parameter-providers/parameter-providers.selectors';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
export const parameterProviderAdvancedUiParamsResolver: ResolveFn<AdvancedUiParams> = (
route: ActivatedRouteSnapshot
@@ -33,6 +34,7 @@ export const parameterProviderAdvancedUiParamsResolver: ResolveFn<AdvancedUiPara
const store: Store<NiFiState> = inject(Store);
const parameterProviderService: ParameterProviderService = inject(ParameterProviderService);
const client: Client = inject(Client);
+ const clusterConnectionService: ClusterConnectionService = inject(ClusterConnectionService);
// getting id parameter from activated route because ngrx router store
// is not initialized when this resolver executes
@@ -70,7 +72,7 @@ export const parameterProviderAdvancedUiParamsResolver: ResolveFn<AdvancedUiPara
clientId: revision.clientId,
revision: revision.version,
editable: true,
- disconnectedNodeAcknowledged: false // TODO
+ disconnectedNodeAcknowledged: clusterConnectionService.isDisconnectionAcknowledged()
} as AdvancedUiParams;
}),
take(1)
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/reporting-task-advanced-ui-params.resolver.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/reporting-task-advanced-ui-params.resolver.ts
index e62b08d03d..00d722f2e8 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/reporting-task-advanced-ui-params.resolver.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/service/resolver/reporting-task-advanced-ui-params.resolver.ts
@@ -26,11 +26,13 @@ import { HttpErrorResponse } from '@angular/common/http';
import { fullScreenError } from '../../../../state/error/error.actions';
import { ReportingTaskService } from '../reporting-task.service';
import { selectTask } from '../../state/reporting-tasks/reporting-tasks.selectors';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
export const reportingTaskAdvancedUiParamsResolver: ResolveFn<AdvancedUiParams> = (route: ActivatedRouteSnapshot) => {
const store: Store<NiFiState> = inject(Store);
const reportingTaskService: ReportingTaskService = inject(ReportingTaskService);
const client: Client = inject(Client);
+ const clusterConnectionService: ClusterConnectionService = inject(ClusterConnectionService);
// getting id parameter from activated route because ngrx router store
// is not initialized when this resolver executes
@@ -70,7 +72,7 @@ export const reportingTaskAdvancedUiParamsResolver: ResolveFn<AdvancedUiParams>
clientId: revision.clientId,
revision: revision.version,
editable,
- disconnectedNodeAcknowledged: false // TODO
+ disconnectedNodeAcknowledged: clusterConnectionService.isDisconnectionAcknowledged()
} as AdvancedUiParams;
}),
take(1)
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/state/general/index.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/state/general/index.ts
index d66bb154be..e10364ef0c 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/state/general/index.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/state/general/index.ts
@@ -33,6 +33,7 @@ export interface Controller {
export interface ControllerEntity {
revision: Revision;
+ disconnectedNodeAcknowledged?: boolean;
component: Controller;
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/state/registry-clients/index.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/state/registry-clients/index.ts
index 7d8ff8bdae..d4d7473855 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/state/registry-clients/index.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/state/registry-clients/index.ts
@@ -30,6 +30,7 @@ export interface LoadRegistryClientsResponse {
export interface CreateRegistryClientRequest {
revision: Revision;
+ disconnectedNodeAcknowledged: boolean;
component: {
name: string;
type: string;
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/flow-analysis-rules/edit-flow-analysis-rule/edit-flow-analysis-rule.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/flow-analysis-rules/edit-flow-analysis-rule/edit-flow-analysis-rule.component.spec.ts
index 231748eeb7..8eb895678d 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/flow-analysis-rules/edit-flow-analysis-rule/edit-flow-analysis-rule.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/flow-analysis-rules/edit-flow-analysis-rule/edit-flow-analysis-rule.component.spec.ts
@@ -24,6 +24,7 @@ import { EditFlowAnalysisRuleDialogRequest } from '../../../state/flow-analysis-
import { Component } from '@angular/core';
import { provideMockStore } from '@ngrx/store/testing';
import { initialState } from '../../../../../state/error/error.reducer';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
describe('EditFlowAnalysisRule', () => {
let component: EditFlowAnalysisRule;
@@ -106,7 +107,13 @@ describe('EditFlowAnalysisRule', () => {
{ provide: MAT_DIALOG_DATA, useValue: data },
provideMockStore({
initialState
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
fixture = TestBed.createComponent(EditFlowAnalysisRule);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/flow-analysis-rules/edit-flow-analysis-rule/edit-flow-analysis-rule.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/flow-analysis-rules/edit-flow-analysis-rule/edit-flow-analysis-rule.component.ts
index 73ac3282b4..00d76b485b 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/flow-analysis-rules/edit-flow-analysis-rule/edit-flow-analysis-rule.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/flow-analysis-rules/edit-flow-analysis-rule/edit-flow-analysis-rule.component.ts
@@ -46,6 +46,7 @@ import {
} from '../../../state/flow-analysis-rules';
import { FlowAnalysisRuleTable } from '../flow-analysis-rule-table/flow-analysis-rule-table.component';
import { ErrorBanner } from '../../../../../ui/common/error-banner/error-banner.component';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
selector: 'edit-flow-analysis-rule',
@@ -91,7 +92,8 @@ export class EditFlowAnalysisRule {
@Inject(MAT_DIALOG_DATA) public request: EditFlowAnalysisRuleDialogRequest,
private formBuilder: FormBuilder,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {
const serviceProperties: any = request.flowAnalysisRule.component.properties;
const properties: Property[] = Object.entries(serviceProperties).map((entry: any) => {
@@ -124,6 +126,7 @@ export class EditFlowAnalysisRule {
submitForm(postUpdateNavigation?: string[]) {
const payload: any = {
revision: this.client.getRevision(this.request.flowAnalysisRule),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: this.request.flowAnalysisRule.id,
name: this.editFlowAnalysisRuleForm.get('name')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/general/general-form/general-form.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/general/general-form/general-form.component.spec.ts
index 82f05774ac..0c7a20b60c 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/general/general-form/general-form.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/general/general-form/general-form.component.spec.ts
@@ -24,6 +24,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatInputModule } from '@angular/material/input';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
describe('GeneralForm', () => {
let component: GeneralForm;
@@ -36,7 +37,13 @@ describe('GeneralForm', () => {
providers: [
provideMockStore({
initialState
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
fixture = TestBed.createComponent(GeneralForm);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/general/general-form/general-form.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/general/general-form/general-form.component.ts
index 47c169c8bc..190700e966 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/general/general-form/general-form.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/general/general-form/general-form.component.ts
@@ -23,6 +23,7 @@ import { updateControllerConfig } from '../../../state/general/general.actions';
import { Client } from '../../../../../service/client.service';
import { selectCurrentUser } from '../../../../../state/current-user/current-user.selectors';
import { selectSaving } from '../../../state/general/general.selectors';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
selector: 'general-form',
@@ -44,6 +45,7 @@ export class GeneralForm {
constructor(
private formBuilder: FormBuilder,
private client: Client,
+ private clusterConnectionService: ClusterConnectionService,
private store: Store<GeneralState>
) {
// build the form
@@ -56,6 +58,7 @@ export class GeneralForm {
const payload: UpdateControllerConfigRequest = {
controller: {
revision: this.client.getRevision(this._controller),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
maxTimerDrivenThreadCount: this.controllerForm.get('timerDrivenThreadCount')?.value
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/edit-parameter-provider/edit-parameter-provider.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/edit-parameter-provider/edit-parameter-provider.component.ts
index 4142246a49..2c3a3588c9 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/edit-parameter-provider/edit-parameter-provider.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/edit-parameter-provider/edit-parameter-provider.component.ts
@@ -43,6 +43,7 @@ import { ParameterProviderReferences } from '../parameter-context-references/par
import { PropertyTable } from '../../../../../ui/common/property-table/property-table.component';
import { ErrorBanner } from '../../../../../ui/common/error-banner/error-banner.component';
import { CommonModule } from '@angular/common';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
selector: 'edit-parameter-provider',
@@ -80,7 +81,8 @@ export class EditParameterProvider {
@Inject(MAT_DIALOG_DATA) public request: EditParameterProviderRequest,
private formBuilder: FormBuilder,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {
const providerProperties = request.parameterProvider.component.properties;
const properties: Property[] = Object.entries(providerProperties).map((entry: any) => {
@@ -111,6 +113,7 @@ export class EditParameterProvider {
submitForm(postUpdateNavigation?: string[]) {
const payload: any = {
revision: this.client.getRevision(this.request.parameterProvider),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: this.request.parameterProvider.id,
name: this.editParameterProviderForm.get('name')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/fetch-parameter-provider-parameters/fetch-parameter-provider-parameters.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/fetch-parameter-provider-parameters/fetch-parameter-provider-parameters.component.spec.ts
index 275f2a5b0c..330f08eddd 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/fetch-parameter-provider-parameters/fetch-parameter-provider-parameters.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/fetch-parameter-provider-parameters/fetch-parameter-provider-parameters.component.spec.ts
@@ -23,6 +23,7 @@ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
import { provideMockStore } from '@ngrx/store/testing';
import { initialParameterProvidersState } from '../../../state/parameter-providers/parameter-providers.reducer';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
describe('FetchParameterProviderParameters', () => {
let component: FetchParameterProviderParameters;
@@ -163,7 +164,13 @@ describe('FetchParameterProviderParameters', () => {
},
provideMockStore({
initialState: initialParameterProvidersState
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
fixture = TestBed.createComponent(FetchParameterProviderParameters);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/fetch-parameter-provider-parameters/fetch-parameter-provider-parameters.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/fetch-parameter-provider-parameters/fetch-parameter-provider-parameters.component.ts
index ee7388d315..cc844aa423 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/fetch-parameter-provider-parameters/fetch-parameter-provider-parameters.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/parameter-providers/fetch-parameter-provider-parameters/fetch-parameter-provider-parameters.component.ts
@@ -22,7 +22,6 @@ import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators }
import { ErrorBanner } from '../../../../../ui/common/error-banner/error-banner.component';
import { MatButtonModule } from '@angular/material/button';
import { NifiSpinnerDirective } from '../../../../../ui/common/spinner/nifi-spinner.directive';
-import { Client } from '../../../../../service/client.service';
import { NiFiCommon } from '../../../../../service/nifi-common.service';
import {
FetchedParameterMapping,
@@ -49,6 +48,7 @@ import * as ParameterProviderActions from '../../../state/parameter-providers/pa
import { Store } from '@ngrx/store';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { PipesModule } from '../../../../../pipes/pipes.module';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
selector: 'fetch-parameter-provider-parameters',
@@ -107,7 +107,7 @@ export class FetchParameterProviderParameters implements OnInit {
constructor(
private formBuilder: FormBuilder,
- private client: Client,
+ private clusterConnectionService: ClusterConnectionService,
private nifiCommon: NiFiCommon,
private store: Store<ParameterProvidersState>,
@Inject(MAT_DIALOG_DATA) public request: FetchParameterProviderDialogRequest
@@ -596,7 +596,7 @@ export class FetchParameterProviderParameters implements OnInit {
return {
id: this.parameterProvider.id,
revision: this.parameterProvider.revision,
- disconnectedNodeAcknowledged: false,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
parameterGroupConfigurations: groupConfigs
};
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/create-registry-client/create-registry-client.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/create-registry-client/create-registry-client.component.spec.ts
index 42ac7739f6..6933635462 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/create-registry-client/create-registry-client.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/create-registry-client/create-registry-client.component.spec.ts
@@ -21,6 +21,7 @@ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { CreateRegistryClient } from './create-registry-client.component';
import { CreateRegistryClientDialogRequest } from '../../../state/registry-clients';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
describe('CreateRegistryClient', () => {
let component: CreateRegistryClient;
@@ -44,7 +45,15 @@ describe('CreateRegistryClient', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CreateRegistryClient, NoopAnimationsModule],
- providers: [{ provide: MAT_DIALOG_DATA, useValue: data }]
+ providers: [
+ { provide: MAT_DIALOG_DATA, useValue: data },
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
+ ]
});
fixture = TestBed.createComponent(CreateRegistryClient);
component = fixture.componentInstance;
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/create-registry-client/create-registry-client.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/create-registry-client/create-registry-client.component.ts
index 1046f8bfa5..373c0e0252 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/create-registry-client/create-registry-client.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/create-registry-client/create-registry-client.component.ts
@@ -31,6 +31,7 @@ import { MatSelectModule } from '@angular/material/select';
import { NifiTooltipDirective } from '../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { NiFiCommon } from '../../../../../service/nifi-common.service';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
selector: 'create-registry-client',
@@ -62,7 +63,8 @@ export class CreateRegistryClient {
@Inject(MAT_DIALOG_DATA) public request: CreateRegistryClientDialogRequest,
private formBuilder: FormBuilder,
private nifiCommon: NiFiCommon,
- private client: Client
+ private client: Client,
+ private clusterConnectionService: ClusterConnectionService
) {
let type: string | null = null;
if (request.registryClientTypes.length > 0) {
@@ -94,6 +96,7 @@ export class CreateRegistryClient {
clientId: this.client.getClientId(),
version: 0
},
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
name: this.createRegistryClientForm.get('name')?.value,
type: this.createRegistryClientForm.get('type')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/edit-registry-client/edit-registry-client.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/edit-registry-client/edit-registry-client.component.spec.ts
index 42bb502fae..7eaeb44662 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/edit-registry-client/edit-registry-client.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/edit-registry-client/edit-registry-client.component.spec.ts
@@ -24,6 +24,7 @@ import { EditRegistryClientDialogRequest } from '../../../state/registry-clients
import { Component } from '@angular/core';
import { provideMockStore } from '@ngrx/store/testing';
import { initialState } from '../../../../../state/error/error.reducer';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
describe('EditRegistryClient', () => {
let component: EditRegistryClient;
@@ -119,7 +120,13 @@ describe('EditRegistryClient', () => {
{ provide: MAT_DIALOG_DATA, useValue: data },
provideMockStore({
initialState
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
fixture = TestBed.createComponent(EditRegistryClient);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/edit-registry-client/edit-registry-client.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/edit-registry-client/edit-registry-client.component.ts
index 10d302a62b..0711e907e5 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/edit-registry-client/edit-registry-client.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/registry-clients/edit-registry-client/edit-registry-client.component.ts
@@ -41,6 +41,7 @@ import { NiFiCommon } from '../../../../../service/nifi-common.service';
import { MatTabsModule } from '@angular/material/tabs';
import { PropertyTable } from '../../../../../ui/common/property-table/property-table.component';
import { ErrorBanner } from '../../../../../ui/common/error-banner/error-banner.component';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
selector: 'edit-registry-client',
@@ -79,7 +80,8 @@ export class EditRegistryClient {
@Inject(MAT_DIALOG_DATA) public request: EditRegistryClientDialogRequest,
private formBuilder: FormBuilder,
private nifiCommon: NiFiCommon,
- private client: Client
+ private client: Client,
+ private clusterConnectionService: ClusterConnectionService
) {
const serviceProperties: any = request.registryClient.component.properties;
const properties: Property[] = Object.entries(serviceProperties).map((entry: any) => {
@@ -113,6 +115,7 @@ export class EditRegistryClient {
submitForm(postUpdateNavigation?: string[]) {
const payload: any = {
revision: this.client.getRevision(this.request.registryClient),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: this.request.registryClient.id,
name: this.editRegistryClientForm.get('name')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/reporting-tasks/edit-reporting-task/edit-reporting-task.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/reporting-tasks/edit-reporting-task/edit-reporting-task.component.spec.ts
index 4c9121135b..095096b8a9 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/reporting-tasks/edit-reporting-task/edit-reporting-task.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/reporting-tasks/edit-reporting-task/edit-reporting-task.component.spec.ts
@@ -24,6 +24,7 @@ import { EditReportingTaskDialogRequest } from '../../../state/reporting-tasks';
import { Component } from '@angular/core';
import { provideMockStore } from '@ngrx/store/testing';
import { initialState } from '../../../../../state/error/error.reducer';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
describe('EditReportingTask', () => {
let component: EditReportingTask;
@@ -399,7 +400,13 @@ describe('EditReportingTask', () => {
{ provide: MAT_DIALOG_DATA, useValue: data },
provideMockStore({
initialState
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
fixture = TestBed.createComponent(EditReportingTask);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/reporting-tasks/edit-reporting-task/edit-reporting-task.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/reporting-tasks/edit-reporting-task/edit-reporting-task.component.ts
index dd014742ae..7ca02cd592 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/reporting-tasks/edit-reporting-task/edit-reporting-task.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/settings/ui/reporting-tasks/edit-reporting-task/edit-reporting-task.component.ts
@@ -48,6 +48,7 @@ import { ControllerServiceApi } from '../../../../../ui/common/controller-servic
import { NifiTooltipDirective } from '../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { ErrorBanner } from '../../../../../ui/common/error-banner/error-banner.component';
+import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
@Component({
selector: 'edit-reporting-task',
@@ -104,7 +105,8 @@ export class EditReportingTask {
@Inject(MAT_DIALOG_DATA) public request: EditReportingTaskDialogRequest,
private formBuilder: FormBuilder,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {
const serviceProperties: any = request.reportingTask.component.properties;
const properties: Property[] = Object.entries(serviceProperties).map((entry: any) => {
@@ -157,6 +159,7 @@ export class EditReportingTask {
submitForm(postUpdateNavigation?: string[]) {
const payload: any = {
revision: this.client.getRevision(this.request.reportingTask),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: this.request.reportingTask.id,
name: this.editReportingTaskForm.get('name')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/users/feature/users.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/users/feature/users.component.ts
index d9c6568f08..90e10f52ca 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/users/feature/users.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/users/feature/users.component.ts
@@ -20,6 +20,11 @@ import { Store } from '@ngrx/store';
import { NiFiState } from '../../../state';
import { startCurrentUserPolling, stopCurrentUserPolling } from '../../../state/current-user/current-user.actions';
import { resetUsersState } from '../state/user-listing/user-listing.actions';
+import {
+ loadClusterSummary,
+ startClusterSummaryPolling,
+ stopClusterSummaryPolling
+} from '../../../state/cluster-summary/cluster-summary.actions';
@Component({
selector: 'users',
@@ -30,11 +35,14 @@ export class Users implements OnInit, OnDestroy {
constructor(private store: Store<NiFiState>) {}
ngOnInit(): void {
+ this.store.dispatch(loadClusterSummary());
this.store.dispatch(startCurrentUserPolling());
+ this.store.dispatch(startClusterSummaryPolling());
}
ngOnDestroy(): void {
this.store.dispatch(resetUsersState());
+ this.store.dispatch(stopClusterSummaryPolling());
this.store.dispatch(stopCurrentUserPolling());
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/users/service/users.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/users/service/users.service.ts
index 950d05f2ac..b5f03b078b 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/users/service/users.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/users/service/users.service.ts
@@ -16,7 +16,7 @@
*/
import { Injectable } from '@angular/core';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
import { Client } from '../../../service/client.service';
import { Observable } from 'rxjs';
import { NiFiCommon } from '../../../service/nifi-common.service';
@@ -27,6 +27,7 @@ import {
UpdateUserGroupRequest,
UpdateUserRequest
} from '../state/user-listing';
+import { ClusterConnectionService } from '../../../service/cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class UsersService {
@@ -35,7 +36,8 @@ export class UsersService {
constructor(
private httpClient: HttpClient,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {}
getUsers(): Observable<any> {
@@ -49,6 +51,7 @@ export class UsersService {
createUser(request: CreateUserRequest): Observable<any> {
const payload: any = {
revision: request.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: request.userPayload
};
return this.httpClient.post(`${UsersService.API}/tenants/users`, payload);
@@ -57,6 +60,7 @@ export class UsersService {
createUserGroup(request: CreateUserGroupRequest): Observable<any> {
const payload: any = {
revision: request.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: request.userGroupPayload
};
return this.httpClient.post(`${UsersService.API}/tenants/user-groups`, payload);
@@ -65,6 +69,7 @@ export class UsersService {
updateUser(request: UpdateUserRequest): Observable<any> {
const payload: any = {
revision: request.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: request.id,
...request.userPayload
@@ -76,6 +81,7 @@ export class UsersService {
updateUserGroup(request: UpdateUserGroupRequest): Observable<any> {
const payload: any = {
revision: request.revision,
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: request.id,
...request.userGroupPayload
@@ -85,12 +91,22 @@ export class UsersService {
}
deleteUser(user: UserEntity): Observable<any> {
- const revision: any = this.client.getRevision(user);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(user.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(user),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(user.uri), { params });
}
deleteUserGroup(userGroup: UserGroupEntity): Observable<any> {
- const revision: any = this.client.getRevision(userGroup);
- return this.httpClient.delete(this.nifiCommon.stripProtocol(userGroup.uri), { params: revision });
+ const params = new HttpParams({
+ fromObject: {
+ ...this.client.getRevision(userGroup),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged()
+ }
+ });
+ return this.httpClient.delete(this.nifiCommon.stripProtocol(userGroup.uri), { params });
}
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/cluster-connection.service.ts
similarity index 57%
copy from nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.ts
copy to nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/cluster-connection.service.ts
index 273142a8df..da4e4f2419 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/cluster-connection.service.ts
@@ -15,18 +15,20 @@
* limitations under the License.
*/
-import { Component, Inject } from '@angular/core';
-import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
-import { OkDialogRequest } from '../../../state/shared';
-import { MatButtonModule } from '@angular/material/button';
+import { Injectable } from '@angular/core';
+import { Store } from '@ngrx/store';
+import { ClusterSummaryState } from '../state/cluster-summary';
+import { selectDisconnectionAcknowledged } from '../state/cluster-summary/cluster-summary.selectors';
-@Component({
- selector: 'ok-dialog',
- standalone: true,
- imports: [MatDialogModule, MatButtonModule],
- templateUrl: './ok-dialog.component.html',
- styleUrls: ['./ok-dialog.component.scss']
+@Injectable({
+ providedIn: 'root'
})
-export class OkDialog {
- constructor(@Inject(MAT_DIALOG_DATA) public request: OkDialogRequest) {}
+export class ClusterConnectionService {
+ private disconnectionAcknowledged = this.store.selectSignal(selectDisconnectionAcknowledged);
+
+ constructor(private store: Store<ClusterSummaryState>) {}
+
+ isDisconnectionAcknowledged(): boolean {
+ return this.disconnectionAcknowledged();
+ }
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/controller-service-state.service.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/controller-service-state.service.ts
index 6e82893494..c86554d096 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/controller-service-state.service.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/service/controller-service-state.service.ts
@@ -25,6 +25,7 @@ import {
} from '../state/shared';
import { Client } from './client.service';
import { NiFiCommon } from './nifi-common.service';
+import { ClusterConnectionService } from './cluster-connection.service';
@Injectable({ providedIn: 'root' })
export class ControllerServiceStateService {
@@ -33,7 +34,8 @@ export class ControllerServiceStateService {
constructor(
private httpClient: HttpClient,
private nifiCommon: NiFiCommon,
- private client: Client
+ private client: Client,
+ private clusterConnectionService: ClusterConnectionService
) {}
getControllerService(id: string): Observable<any> {
@@ -46,6 +48,7 @@ export class ControllerServiceStateService {
setEnable(controllerService: ControllerServiceEntity, enabled: boolean): Observable<any> {
return this.httpClient.put(`${this.nifiCommon.stripProtocol(controllerService.uri)}/run-status`, {
revision: this.client.getRevision(controllerService),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
state: enabled ? 'ENABLED' : 'DISABLED',
uiOnly: true
});
@@ -63,7 +66,7 @@ export class ControllerServiceStateService {
id: controllerService.id,
state: enabled ? 'ENABLED' : 'DISABLED',
referencingComponentRevisions: referencingComponentRevisions,
- // 'disconnectedNodeAcknowledged': nfStorage.isDisconnectionAcknowledged(),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
uiOnly: true
});
}
@@ -83,7 +86,7 @@ export class ControllerServiceStateService {
id: controllerService.id,
state: running ? 'RUNNING' : 'STOPPED',
referencingComponentRevisions: referencingComponentRevisions,
- // 'disconnectedNodeAcknowledged': nfStorage.isDisconnectionAcknowledged(),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
uiOnly: true
});
}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.actions.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.actions.ts
index 92256d16b7..1d0e6ffcb6 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.actions.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.actions.ts
@@ -31,6 +31,16 @@ export const loadClusterSummarySuccess = createAction(
props<{ response: LoadClusterSummaryResponse }>()
);
+export const acknowledgeClusterConnectionChange = createAction(
+ `${CLUSTER_SUMMARY_STATE_PREFIX} Acknowledge Cluster Connection Change`,
+ props<{ connectedToCluster: boolean }>()
+);
+
+export const setDisconnectionAcknowledged = createAction(
+ `${CLUSTER_SUMMARY_STATE_PREFIX} Set Disconnection Acknowledged`,
+ props<{ disconnectionAcknowledged: boolean }>()
+);
+
export const clusterSummaryApiError = createAction(
`${CLUSTER_SUMMARY_STATE_PREFIX} Cluster Summary Api Error`,
props<{ error: string }>()
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.effects.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.effects.ts
index 4256ca868b..ac36cbd577 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.effects.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.effects.ts
@@ -18,34 +18,53 @@
import { Injectable } from '@angular/core';
import { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects';
import * as ClusterSummaryActions from './cluster-summary.actions';
-import { asyncScheduler, catchError, filter, from, interval, map, of, switchMap, takeUntil } from 'rxjs';
+import { asyncScheduler, catchError, delay, filter, from, interval, map, of, switchMap, takeUntil, tap } from 'rxjs';
import { ClusterService } from '../../service/cluster.service';
import { selectClusterSummary } from './cluster-summary.selectors';
import { isDefinedAndNotNull } from '../shared';
import { Store } from '@ngrx/store';
-import { ClusterSummaryState } from './index';
+import { ClusterSummary, ClusterSummaryState } from './index';
import { HttpErrorResponse } from '@angular/common/http';
import * as ErrorActions from '../error/error.actions';
+import { acknowledgeClusterConnectionChange, setDisconnectionAcknowledged } from './cluster-summary.actions';
+import { OkDialog } from '../../ui/common/ok-dialog/ok-dialog.component';
+import { MEDIUM_DIALOG } from '../../index';
+import { MatDialog } from '@angular/material/dialog';
@Injectable()
export class ClusterSummaryEffects {
constructor(
private actions$: Actions,
private clusterService: ClusterService,
- private store: Store<ClusterSummaryState>
+ private store: Store<ClusterSummaryState>,
+ private dialog: MatDialog
) {}
loadClusterSummary$ = createEffect(() =>
this.actions$.pipe(
ofType(ClusterSummaryActions.loadClusterSummary),
- switchMap(() => {
+ concatLatestFrom(() => this.store.select(selectClusterSummary)),
+ switchMap(([, currentClusterSummary]) => {
return from(
this.clusterService.getClusterSummary().pipe(
- map((response) =>
- ClusterSummaryActions.loadClusterSummarySuccess({
+ map((response) => {
+ const clusterSummary: ClusterSummary = response.clusterSummary;
+ const connectedToCluster = clusterSummary.connectedToCluster;
+
+ if (currentClusterSummary) {
+ if (currentClusterSummary.connectedToCluster !== clusterSummary.connectedToCluster) {
+ this.store.dispatch(acknowledgeClusterConnectionChange({ connectedToCluster }));
+ }
+ } else {
+ if (clusterSummary.clustered && !clusterSummary.connectedToCluster) {
+ this.store.dispatch(acknowledgeClusterConnectionChange({ connectedToCluster }));
+ }
+ }
+
+ return ClusterSummaryActions.loadClusterSummarySuccess({
response
- })
- ),
+ });
+ }),
catchError((error) => of(ClusterSummaryActions.clusterSummaryApiError({ error: error.error })))
)
);
@@ -65,6 +84,41 @@ export class ClusterSummaryEffects {
)
);
+ acknowledgeClusterConnectionChange$ = createEffect(
+ () =>
+ this.actions$.pipe(
+ ofType(ClusterSummaryActions.acknowledgeClusterConnectionChange),
+ delay(2000), // minor delay to allow component at the desired route to act first
+ tap(({ connectedToCluster }) => {
+ const message = connectedToCluster
+ ? 'This node just joined the cluster. Any modifications to the data flow made here will replicate across the cluster.'
+ : 'This node is currently not connected to the cluster. Any modifications to the data flow made here will not replicate across the cluster.';
+
+ const dialogReference = this.dialog.open(OkDialog, {
+ ...MEDIUM_DIALOG,
+ disableClose: true,
+ data: {
+ title: 'Cluster Connection',
+ message
+ }
+ });
+
+ dialogReference.componentInstance.ok
+ .pipe(takeUntil(dialogReference.afterClosed()))
+ .subscribe(() => {
+ if (connectedToCluster) {
+ // this node has rejoined the cluster and any previous acknowledged disconnection can be reset
+ this.store.dispatch(setDisconnectionAcknowledged({ disconnectionAcknowledged: false }));
+ } else {
+ // this node is not currently connected so the user has acknowledged the disconnection
+ this.store.dispatch(setDisconnectionAcknowledged({ disconnectionAcknowledged: true }));
+ }
+ });
+ })
+ ),
+ { dispatch: false }
+ );
+
searchCluster$ = createEffect(() =>
this.actions$.pipe(
ofType(ClusterSummaryActions.searchCluster),
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.reducer.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.reducer.ts
index d6fa003f09..926ee842e8 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.reducer.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.reducer.ts
@@ -22,10 +22,12 @@ import {
clusterSummaryApiError,
loadClusterSummary,
loadClusterSummarySuccess,
- searchClusterSuccess
+ searchClusterSuccess,
+ setDisconnectionAcknowledged
} from './cluster-summary.actions';
export const initialState: ClusterSummaryState = {
+ disconnectionAcknowledged: false,
clusterSummary: null,
searchResults: null,
error: null,
@@ -57,5 +59,9 @@ export const clusterSummaryReducer = createReducer(
on(searchClusterSuccess, (state, { response }) => ({
...state,
searchResults: response
+ })),
+ on(setDisconnectionAcknowledged, (state, { disconnectionAcknowledged }) => ({
+ ...state,
+ disconnectionAcknowledged
}))
);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.selectors.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.selectors.ts
index 58afb3a3d7..fc52da67fe 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.selectors.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/cluster-summary.selectors.ts
@@ -20,6 +20,11 @@ import { clusterSummaryFeatureKey, ClusterSummaryState } from './index';
export const selectClusterSummaryState = createFeatureSelector<ClusterSummaryState>(clusterSummaryFeatureKey);
+export const selectDisconnectionAcknowledged = createSelector(
+ selectClusterSummaryState,
+ (state: ClusterSummaryState) => state.disconnectionAcknowledged
+);
+
export const selectClusterSummary = createSelector(
selectClusterSummaryState,
(state: ClusterSummaryState) => state.clusterSummary
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/index.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/index.ts
index 7e90e99ae2..2d314c0eac 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/index.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/state/cluster-summary/index.ts
@@ -34,17 +34,18 @@ export interface NodeSearchResult {
address: string;
}
+export interface ClusterSearchRequest {
+ q?: string;
+}
+
export interface ClusterSearchResults {
nodeResults: NodeSearchResult[];
}
export interface ClusterSummaryState {
+ disconnectionAcknowledged: boolean;
clusterSummary: ClusterSummary | null;
searchResults: ClusterSearchResults | null;
error: string | null;
status: 'pending' | 'loading' | 'error' | 'success';
}
-
-export interface ClusterSearchRequest {
- q?: string;
-}
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/advanced-ui/advanced-ui.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/advanced-ui/advanced-ui.component.ts
index 0899343b78..eb59bdadae 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/advanced-ui/advanced-ui.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/advanced-ui/advanced-ui.component.ts
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-import { Component, SecurityContext } from '@angular/core';
+import { Component, OnDestroy, OnInit, SecurityContext } from '@angular/core';
import { NiFiState } from '../../../state';
import { Store } from '@ngrx/store';
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
@@ -24,6 +24,12 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { Navigation } from '../navigation/navigation.component';
import { selectRouteData } from '../../../state/router/router.selectors';
import { AdvancedUiParams, isDefinedAndNotNull } from '../../../state/shared';
+import {
+ loadClusterSummary,
+ startClusterSummaryPolling,
+ stopClusterSummaryPolling
+} from '../../../state/cluster-summary/cluster-summary.actions';
+import { selectDisconnectionAcknowledged } from '../../../state/cluster-summary/cluster-summary.selectors';
@Component({
selector: 'advanced-ui',
@@ -32,9 +38,11 @@ import { AdvancedUiParams, isDefinedAndNotNull } from '../../../state/shared';
imports: [Navigation],
styleUrls: ['./advanced-ui.component.scss']
})
-export class AdvancedUi {
+export class AdvancedUi implements OnInit, OnDestroy {
frameSource!: SafeResourceUrl | null;
+ private params: AdvancedUiParams | null = null;
+
constructor(
private store: Store<NiFiState>,
private domSanitizer: DomSanitizer
@@ -44,9 +52,38 @@ export class AdvancedUi {
.pipe(takeUntilDestroyed(), isDefinedAndNotNull())
.subscribe((data) => {
if (data['advancedUiParams']) {
+ // clone the params to handle reloading based on cluster connection state changes
+ this.params = {
+ ...data['advancedUiParams']
+ };
this.frameSource = this.getFrameSource(data['advancedUiParams']);
}
});
+
+ this.store
+ .select(selectDisconnectionAcknowledged)
+ .pipe(takeUntilDestroyed())
+ .subscribe((disconnectionAcknowledged) => {
+ if (this.params) {
+ // limit reloading advanced ui to only when necessary (when the user has acknowledged disconnection)
+ if (
+ disconnectionAcknowledged &&
+ this.params.disconnectedNodeAcknowledged != disconnectionAcknowledged
+ ) {
+ this.params.disconnectedNodeAcknowledged = disconnectionAcknowledged;
+ this.frameSource = this.getFrameSource(this.params);
+ }
+ }
+ });
+ }
+
+ ngOnInit(): void {
+ this.store.dispatch(loadClusterSummary());
+ this.store.dispatch(startClusterSummaryPolling());
+ }
+
+ ngOnDestroy(): void {
+ this.store.dispatch(stopClusterSummaryPolling());
}
private getFrameSource(params: AdvancedUiParams): SafeResourceUrl | null {
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/controller-service/edit-controller-service/edit-controller-service.component.spec.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/controller-service/edit-controller-service/edit-controller-service.component.spec.ts
index 08ed04ffad..004be53f3a 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/controller-service/edit-controller-service/edit-controller-service.component.spec.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/controller-service/edit-controller-service/edit-controller-service.component.spec.ts
@@ -24,6 +24,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { Component } from '@angular/core';
import { provideMockStore } from '@ngrx/store/testing';
import { initialState } from '../../../../state/error/error.reducer';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
describe('EditControllerService', () => {
let component: EditControllerService;
@@ -558,7 +559,13 @@ describe('EditControllerService', () => {
{ provide: MAT_DIALOG_DATA, useValue: data },
provideMockStore({
initialState
- })
+ }),
+ {
+ provide: ClusterConnectionService,
+ useValue: {
+ isDisconnectionAcknowledged: jest.fn()
+ }
+ }
]
});
fixture = TestBed.createComponent(EditControllerService);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/controller-service/edit-controller-service/edit-controller-service.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/controller-service/edit-controller-service/edit-controller-service.component.ts
index e2960048d3..d523067267 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/controller-service/edit-controller-service/edit-controller-service.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/controller-service/edit-controller-service/edit-controller-service.component.ts
@@ -44,6 +44,7 @@ import { Observable } from 'rxjs';
import { ControllerServiceReferences } from '../controller-service-references/controller-service-references.component';
import { NifiSpinnerDirective } from '../../spinner/nifi-spinner.directive';
import { ErrorBanner } from '../../error-banner/error-banner.component';
+import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
@Component({
selector: 'edit-controller-service',
@@ -109,7 +110,8 @@ export class EditControllerService {
@Inject(MAT_DIALOG_DATA) public request: EditControllerServiceDialogRequest,
private formBuilder: FormBuilder,
private client: Client,
- private nifiCommon: NiFiCommon
+ private nifiCommon: NiFiCommon,
+ private clusterConnectionService: ClusterConnectionService
) {
const serviceProperties: any = request.controllerService.component.properties;
const properties: Property[] = Object.entries(serviceProperties).map((entry: any) => {
@@ -141,6 +143,7 @@ export class EditControllerService {
submitForm(postUpdateNavigation?: string[]) {
const payload: any = {
revision: this.client.getRevision(this.request.controllerService),
+ disconnectedNodeAcknowledged: this.clusterConnectionService.isDisconnectionAcknowledged(),
component: {
id: this.request.controllerService.id,
name: this.editControllerServiceForm.get('name')?.value,
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.html b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.html
index 6d89b13a19..1c920b9320 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.html
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.html
@@ -20,5 +20,5 @@
<div class="text-sm">{{ request.message }}</div>
</mat-dialog-content>
<mat-dialog-actions align="end">
- <button mat-button mat-dialog-close cdkFocusInitial>Ok</button>
+ <button mat-button mat-dialog-close cdkFocusInitial (click)="okClicked()">Ok</button>
</mat-dialog-actions>
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.ts b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.ts
index 273142a8df..79dbd25b9d 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.ts
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/ui/common/ok-dialog/ok-dialog.component.ts
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-import { Component, Inject } from '@angular/core';
+import { Component, EventEmitter, Inject, Output } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
import { OkDialogRequest } from '../../../state/shared';
import { MatButtonModule } from '@angular/material/button';
@@ -28,5 +28,11 @@ import { MatButtonModule } from '@angular/material/button';
styleUrls: ['./ok-dialog.component.scss']
})
export class OkDialog {
+ @Output() ok: EventEmitter<void> = new EventEmitter<void>();
+
constructor(@Inject(MAT_DIALOG_DATA) public request: OkDialogRequest) {}
+
+ okClicked(): void {
+ this.ok.next();
+ }
}