mirror of https://github.com/apache/nifi.git
NIFI-4436:
- Code clean up. - Improved error handling. - Minor UX improvements. - Always showing Process Group state to complement the aggregation counts. - Adding the Process Group state to the top status bar.
This commit is contained in:
parent
fe8b30bf26
commit
1266235c00
|
@ -38,6 +38,12 @@ public class ControllerStatusDTO implements Cloneable {
|
||||||
private Integer activeRemotePortCount = 0;
|
private Integer activeRemotePortCount = 0;
|
||||||
private Integer inactiveRemotePortCount = 0;
|
private Integer inactiveRemotePortCount = 0;
|
||||||
|
|
||||||
|
private Integer upToDateCount;
|
||||||
|
private Integer locallyModifiedCount;
|
||||||
|
private Integer staleCount;
|
||||||
|
private Integer locallyModifiedAndStaleCount;
|
||||||
|
private Integer syncFailureCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The active thread count.
|
* The active thread count.
|
||||||
*
|
*
|
||||||
|
@ -154,6 +160,51 @@ public class ControllerStatusDTO implements Cloneable {
|
||||||
this.bytesQueued = bytesQueued;
|
this.bytesQueued = bytesQueued;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of up to date versioned process groups in the NiFi.")
|
||||||
|
public Integer getUpToDateCount() {
|
||||||
|
return upToDateCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpToDateCount(Integer upToDateCount) {
|
||||||
|
this.upToDateCount = upToDateCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of locally modified versioned process groups in the NiFi.")
|
||||||
|
public Integer getLocallyModifiedCount() {
|
||||||
|
return locallyModifiedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocallyModifiedCount(Integer locallyModifiedCount) {
|
||||||
|
this.locallyModifiedCount = locallyModifiedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of stale versioned process groups in the NiFi.")
|
||||||
|
public Integer getStaleCount() {
|
||||||
|
return staleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStaleCount(Integer staleCount) {
|
||||||
|
this.staleCount = staleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of locally modified and stale versioned process groups in the NiFi.")
|
||||||
|
public Integer getLocallyModifiedAndStaleCount() {
|
||||||
|
return locallyModifiedAndStaleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocallyModifiedAndStaleCount(Integer locallyModifiedAndStaleCount) {
|
||||||
|
this.locallyModifiedAndStaleCount = locallyModifiedAndStaleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of versioned process groups in the NiFi that are unable to sync to a registry.")
|
||||||
|
public Integer getSyncFailureCount() {
|
||||||
|
return syncFailureCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSyncFailureCount(Integer syncFailureCount) {
|
||||||
|
this.syncFailureCount = syncFailureCount;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ControllerStatusDTO clone() {
|
public ControllerStatusDTO clone() {
|
||||||
final ControllerStatusDTO other = new ControllerStatusDTO();
|
final ControllerStatusDTO other = new ControllerStatusDTO();
|
||||||
|
@ -167,6 +218,11 @@ public class ControllerStatusDTO implements Cloneable {
|
||||||
other.setDisabledCount(getDisabledCount());
|
other.setDisabledCount(getDisabledCount());
|
||||||
other.setActiveRemotePortCount(getActiveRemotePortCount());
|
other.setActiveRemotePortCount(getActiveRemotePortCount());
|
||||||
other.setInactiveRemotePortCount(getInactiveRemotePortCount());
|
other.setInactiveRemotePortCount(getInactiveRemotePortCount());
|
||||||
|
other.setUpToDateCount(getUpToDateCount());
|
||||||
|
other.setLocallyModifiedCount(getLocallyModifiedCount());
|
||||||
|
other.setStaleCount(getStaleCount());
|
||||||
|
other.setLocallyModifiedAndStaleCount(getLocallyModifiedAndStaleCount());
|
||||||
|
other.setStaleCount(getStaleCount());
|
||||||
return other;
|
return other;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ public class FlowBreadcrumbEntity extends Entity {
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
private PermissionsDTO permissions;
|
private PermissionsDTO permissions;
|
||||||
|
private String state;
|
||||||
private FlowBreadcrumbDTO breadcrumb;
|
private FlowBreadcrumbDTO breadcrumb;
|
||||||
private FlowBreadcrumbEntity parentBreadcrumb;
|
private FlowBreadcrumbEntity parentBreadcrumb;
|
||||||
|
|
||||||
|
@ -96,4 +97,15 @@ public class FlowBreadcrumbEntity extends Entity {
|
||||||
public void setParentBreadcrumb(FlowBreadcrumbEntity parentBreadcrumb) {
|
public void setParentBreadcrumb(FlowBreadcrumbEntity parentBreadcrumb) {
|
||||||
this.parentBreadcrumb = parentBreadcrumb;
|
this.parentBreadcrumb = parentBreadcrumb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty(readOnly = true,
|
||||||
|
value = "The current state of the Process Group, as it relates to the Versioned Flow",
|
||||||
|
allowableValues = "LOCALLY_MODIFIED_DESCENDANT, LOCALLY_MODIFIED, STALE, LOCALLY_MODIFIED_AND_STALE, UP_TO_DATE")
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,13 +16,12 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.nifi.web.api.entity;
|
package org.apache.nifi.web.api.entity;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
import org.apache.nifi.registry.flow.VersionedFlowSnapshot;
|
import org.apache.nifi.registry.flow.VersionedFlowSnapshot;
|
||||||
import org.apache.nifi.web.api.dto.ProcessGroupDTO;
|
import org.apache.nifi.web.api.dto.ProcessGroupDTO;
|
||||||
import org.apache.nifi.web.api.dto.status.ProcessGroupStatusDTO;
|
import org.apache.nifi.web.api.dto.status.ProcessGroupStatusDTO;
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A serialized representation of this class can be placed in the entity body of a request or response to or from the API. This particular entity holds a reference to a ProcessGroupDTO.
|
* A serialized representation of this class can be placed in the entity body of a request or response to or from the API. This particular entity holds a reference to a ProcessGroupDTO.
|
||||||
|
@ -41,6 +40,14 @@ public class ProcessGroupEntity extends ComponentEntity implements Permissible<P
|
||||||
private Integer activeRemotePortCount;
|
private Integer activeRemotePortCount;
|
||||||
private Integer inactiveRemotePortCount;
|
private Integer inactiveRemotePortCount;
|
||||||
|
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
private Integer upToDateCount;
|
||||||
|
private Integer locallyModifiedCount;
|
||||||
|
private Integer staleCount;
|
||||||
|
private Integer locallyModifiedAndStaleCount;
|
||||||
|
private Integer syncFailureCount;
|
||||||
|
|
||||||
private Integer inputPortCount;
|
private Integer inputPortCount;
|
||||||
private Integer outputPortCount;
|
private Integer outputPortCount;
|
||||||
|
|
||||||
|
@ -193,4 +200,60 @@ public class ProcessGroupEntity extends ComponentEntity implements Permissible<P
|
||||||
public void setVersionedFlowSnapshot(VersionedFlowSnapshot versionedFlowSnapshot) {
|
public void setVersionedFlowSnapshot(VersionedFlowSnapshot versionedFlowSnapshot) {
|
||||||
this.versionedFlowSnapshot = versionedFlowSnapshot;
|
this.versionedFlowSnapshot = versionedFlowSnapshot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty(readOnly = true,
|
||||||
|
value = "The current state of the Process Group, as it relates to the Versioned Flow",
|
||||||
|
allowableValues = "LOCALLY_MODIFIED_DESCENDANT, LOCALLY_MODIFIED, STALE, LOCALLY_MODIFIED_AND_STALE, UP_TO_DATE")
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of up to date versioned process groups in the process group.")
|
||||||
|
public Integer getUpToDateCount() {
|
||||||
|
return upToDateCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpToDateCount(Integer upToDateCount) {
|
||||||
|
this.upToDateCount = upToDateCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of locally modified versioned process groups in the process group.")
|
||||||
|
public Integer getLocallyModifiedCount() {
|
||||||
|
return locallyModifiedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocallyModifiedCount(Integer locallyModifiedCount) {
|
||||||
|
this.locallyModifiedCount = locallyModifiedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of stale versioned process groups in the process group.")
|
||||||
|
public Integer getStaleCount() {
|
||||||
|
return staleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStaleCount(Integer staleCount) {
|
||||||
|
this.staleCount = staleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of locally modified and stale versioned process groups in the process group.")
|
||||||
|
public Integer getLocallyModifiedAndStaleCount() {
|
||||||
|
return locallyModifiedAndStaleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocallyModifiedAndStaleCount(Integer locallyModifiedAndStaleCount) {
|
||||||
|
this.locallyModifiedAndStaleCount = locallyModifiedAndStaleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("The number of versioned process groups in the process group that are unable to sync to a registry.")
|
||||||
|
public Integer getSyncFailureCount() {
|
||||||
|
return syncFailureCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSyncFailureCount(Integer syncFailureCount) {
|
||||||
|
this.syncFailureCount = syncFailureCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,7 +238,6 @@ public class ControllerResource extends ApplicationResource {
|
||||||
@ApiResponse(code = 409, message = "The request was valid but NiFi was not in the appropriate state to process it. Retrying the same request later may be successful.")
|
@ApiResponse(code = 409, message = "The request was valid but NiFi was not in the appropriate state to process it. Retrying the same request later may be successful.")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
public Response createReportingTask(
|
public Response createReportingTask(
|
||||||
@Context final HttpServletRequest httpServletRequest,
|
@Context final HttpServletRequest httpServletRequest,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
|
@ -383,11 +382,19 @@ public class ControllerResource extends ApplicationResource {
|
||||||
throw new IllegalArgumentException("A revision of 0 must be specified when creating a new Registry.");
|
throw new IllegalArgumentException("A revision of 0 must be specified when creating a new Registry.");
|
||||||
}
|
}
|
||||||
|
|
||||||
final RegistryDTO requestReportingTask = requestRegistryClientEntity.getComponent();
|
final RegistryDTO requestRegistryClient = requestRegistryClientEntity.getComponent();
|
||||||
if (requestReportingTask.getId() != null) {
|
if (requestRegistryClient.getId() != null) {
|
||||||
throw new IllegalArgumentException("Registry ID cannot be specified.");
|
throw new IllegalArgumentException("Registry ID cannot be specified.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(requestRegistryClient.getName())) {
|
||||||
|
throw new IllegalArgumentException("Registry name must be specified.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(requestRegistryClient.getUri())) {
|
||||||
|
throw new IllegalArgumentException("Registry URL must be specified.");
|
||||||
|
}
|
||||||
|
|
||||||
if (isReplicateRequest()) {
|
if (isReplicateRequest()) {
|
||||||
return replicate(HttpMethod.POST, requestRegistryClientEntity);
|
return replicate(HttpMethod.POST, requestRegistryClientEntity);
|
||||||
}
|
}
|
||||||
|
@ -468,7 +475,7 @@ public class ControllerResource extends ApplicationResource {
|
||||||
*
|
*
|
||||||
* @param httpServletRequest request
|
* @param httpServletRequest request
|
||||||
* @param id The id of the controller service to update.
|
* @param id The id of the controller service to update.
|
||||||
* @param requestRegsitryEntity A controllerServiceEntity.
|
* @param requestRegistryEntity A controllerServiceEntity.
|
||||||
* @return A controllerServiceEntity.
|
* @return A controllerServiceEntity.
|
||||||
*/
|
*/
|
||||||
@PUT
|
@PUT
|
||||||
|
@ -501,32 +508,40 @@ public class ControllerResource extends ApplicationResource {
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
value = "The registry configuration details.",
|
value = "The registry configuration details.",
|
||||||
required = true
|
required = true
|
||||||
) final RegistryClientEntity requestRegsitryEntity) {
|
) final RegistryClientEntity requestRegistryEntity) {
|
||||||
|
|
||||||
if (requestRegsitryEntity == null || requestRegsitryEntity.getComponent() == null) {
|
if (requestRegistryEntity == null || requestRegistryEntity.getComponent() == null) {
|
||||||
throw new IllegalArgumentException("Registry details must be specified.");
|
throw new IllegalArgumentException("Registry details must be specified.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requestRegsitryEntity.getRevision() == null) {
|
if (requestRegistryEntity.getRevision() == null) {
|
||||||
throw new IllegalArgumentException("Revision must be specified.");
|
throw new IllegalArgumentException("Revision must be specified.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure the ids are the same
|
// ensure the ids are the same
|
||||||
final RegistryDTO requestRegistryDTO = requestRegsitryEntity.getComponent();
|
final RegistryDTO requestRegistryClient = requestRegistryEntity.getComponent();
|
||||||
if (!id.equals(requestRegistryDTO.getId())) {
|
if (!id.equals(requestRegistryClient.getId())) {
|
||||||
throw new IllegalArgumentException(String.format("The registry id (%s) in the request body does not equal the "
|
throw new IllegalArgumentException(String.format("The registry id (%s) in the request body does not equal the "
|
||||||
+ "registry id of the requested resource (%s).", requestRegistryDTO.getId(), id));
|
+ "registry id of the requested resource (%s).", requestRegistryClient.getId(), id));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isReplicateRequest()) {
|
if (isReplicateRequest()) {
|
||||||
return replicate(HttpMethod.PUT, requestRegsitryEntity);
|
return replicate(HttpMethod.PUT, requestRegistryEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestRegistryClient.getName() != null && StringUtils.isBlank(requestRegistryClient.getName())) {
|
||||||
|
throw new IllegalArgumentException("Registry name must be specified.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestRegistryClient.getUri() != null && StringUtils.isBlank(requestRegistryClient.getUri())) {
|
||||||
|
throw new IllegalArgumentException("Registry URL must be specified.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle expects request (usually from the cluster manager)
|
// handle expects request (usually from the cluster manager)
|
||||||
final Revision requestRevision = getRevision(requestRegsitryEntity, id);
|
final Revision requestRevision = getRevision(requestRegistryEntity, id);
|
||||||
return withWriteLock(
|
return withWriteLock(
|
||||||
serviceFacade,
|
serviceFacade,
|
||||||
requestRegsitryEntity,
|
requestRegistryEntity,
|
||||||
requestRevision,
|
requestRevision,
|
||||||
lookup -> {
|
lookup -> {
|
||||||
authorizeController(RequestAction.WRITE);
|
authorizeController(RequestAction.WRITE);
|
||||||
|
|
|
@ -175,7 +175,10 @@ public class VersionsResource extends ApplicationResource {
|
||||||
+ "prevent any other threads from simultaneously saving local changes to Version Control. It will not, however, actually save the local flow to the Flow Registry. A "
|
+ "prevent any other threads from simultaneously saving local changes to Version Control. It will not, however, actually save the local flow to the Flow Registry. A "
|
||||||
+ "POST to /versions/process-groups/{id} should be used to initiate saving of the local flow to the Flow Registry.",
|
+ "POST to /versions/process-groups/{id} should be used to initiate saving of the local flow to the Flow Registry.",
|
||||||
response = String.class,
|
response = String.class,
|
||||||
notes = NON_GUARANTEED_ENDPOINT)
|
notes = NON_GUARANTEED_ENDPOINT,
|
||||||
|
authorizations = {
|
||||||
|
@Authorization(value = "Write - /process-groups/{uuid}")
|
||||||
|
})
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
||||||
@ApiResponse(code = 401, message = "Client could not be authenticated."),
|
@ApiResponse(code = 401, message = "Client could not be authenticated."),
|
||||||
|
@ -186,14 +189,14 @@ public class VersionsResource extends ApplicationResource {
|
||||||
public Response createVersionControlRequest(
|
public Response createVersionControlRequest(
|
||||||
@ApiParam(value = "The versioned flow details.", required = true) final CreateActiveRequestEntity requestEntity) {
|
@ApiParam(value = "The versioned flow details.", required = true) final CreateActiveRequestEntity requestEntity) {
|
||||||
|
|
||||||
if (isReplicateRequest()) {
|
|
||||||
return replicate(HttpMethod.POST, requestEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requestEntity.getProcessGroupId() == null) {
|
if (requestEntity.getProcessGroupId() == null) {
|
||||||
throw new IllegalArgumentException("The id of the process group that will be updated must be specified.");
|
throw new IllegalArgumentException("The id of the process group that will be updated must be specified.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isReplicateRequest()) {
|
||||||
|
return replicate(HttpMethod.POST, requestEntity);
|
||||||
|
}
|
||||||
|
|
||||||
final NiFiUser user = NiFiUserUtils.getNiFiUser();
|
final NiFiUser user = NiFiUserUtils.getNiFiUser();
|
||||||
|
|
||||||
return withWriteLock(
|
return withWriteLock(
|
||||||
|
@ -234,7 +237,7 @@ public class VersionsResource extends ApplicationResource {
|
||||||
response = VersionControlInformationEntity.class,
|
response = VersionControlInformationEntity.class,
|
||||||
notes = NON_GUARANTEED_ENDPOINT,
|
notes = NON_GUARANTEED_ENDPOINT,
|
||||||
authorizations = {
|
authorizations = {
|
||||||
@Authorization(value = "Write - /process-groups/{uuid}")
|
@Authorization(value = "Only the user that submitted the request can update it")
|
||||||
})
|
})
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
||||||
|
@ -343,7 +346,10 @@ public class VersionsResource extends ApplicationResource {
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
value = "Deletes the Version Control Request with the given ID. This will allow other threads to save flows to the Flow Registry. See also the documentation "
|
value = "Deletes the Version Control Request with the given ID. This will allow other threads to save flows to the Flow Registry. See also the documentation "
|
||||||
+ "for POSTing to /versions/active-requests for information regarding why this is done.",
|
+ "for POSTing to /versions/active-requests for information regarding why this is done.",
|
||||||
notes = NON_GUARANTEED_ENDPOINT)
|
notes = NON_GUARANTEED_ENDPOINT,
|
||||||
|
authorizations = {
|
||||||
|
@Authorization(value = "Only the user that submitted the request can remove it")
|
||||||
|
})
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
||||||
@ApiResponse(code = 401, message = "Client could not be authenticated."),
|
@ApiResponse(code = 401, message = "Client could not be authenticated."),
|
||||||
|
@ -801,6 +807,7 @@ public class VersionsResource extends ApplicationResource {
|
||||||
response = VersionedFlowUpdateRequestEntity.class,
|
response = VersionedFlowUpdateRequestEntity.class,
|
||||||
notes = NON_GUARANTEED_ENDPOINT,
|
notes = NON_GUARANTEED_ENDPOINT,
|
||||||
authorizations = {
|
authorizations = {
|
||||||
|
@Authorization(value = "Only the user that submitted the request can get it")
|
||||||
})
|
})
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
||||||
|
@ -824,6 +831,7 @@ public class VersionsResource extends ApplicationResource {
|
||||||
response = VersionedFlowUpdateRequestEntity.class,
|
response = VersionedFlowUpdateRequestEntity.class,
|
||||||
notes = NON_GUARANTEED_ENDPOINT,
|
notes = NON_GUARANTEED_ENDPOINT,
|
||||||
authorizations = {
|
authorizations = {
|
||||||
|
@Authorization(value = "Only the user that submitted the request can get it")
|
||||||
})
|
})
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
||||||
|
@ -881,6 +889,7 @@ public class VersionsResource extends ApplicationResource {
|
||||||
response = VersionedFlowUpdateRequestEntity.class,
|
response = VersionedFlowUpdateRequestEntity.class,
|
||||||
notes = NON_GUARANTEED_ENDPOINT,
|
notes = NON_GUARANTEED_ENDPOINT,
|
||||||
authorizations = {
|
authorizations = {
|
||||||
|
@Authorization(value = "Only the user that submitted the request can remove it")
|
||||||
})
|
})
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
||||||
|
@ -904,6 +913,7 @@ public class VersionsResource extends ApplicationResource {
|
||||||
response = VersionedFlowUpdateRequestEntity.class,
|
response = VersionedFlowUpdateRequestEntity.class,
|
||||||
notes = NON_GUARANTEED_ENDPOINT,
|
notes = NON_GUARANTEED_ENDPOINT,
|
||||||
authorizations = {
|
authorizations = {
|
||||||
|
@Authorization(value = "Only the user that submitted the request can remove it")
|
||||||
})
|
})
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
@ApiResponse(code = 400, message = "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."),
|
||||||
|
|
|
@ -224,6 +224,7 @@ public final class EntityFactory {
|
||||||
entity.setStatus(status);
|
entity.setStatus(status);
|
||||||
entity.setId(dto.getId());
|
entity.setId(dto.getId());
|
||||||
entity.setPosition(dto.getPosition());
|
entity.setPosition(dto.getPosition());
|
||||||
|
|
||||||
entity.setInputPortCount(dto.getInputPortCount());
|
entity.setInputPortCount(dto.getInputPortCount());
|
||||||
entity.setOutputPortCount(dto.getOutputPortCount());
|
entity.setOutputPortCount(dto.getOutputPortCount());
|
||||||
entity.setRunningCount(dto.getRunningCount());
|
entity.setRunningCount(dto.getRunningCount());
|
||||||
|
@ -232,6 +233,17 @@ public final class EntityFactory {
|
||||||
entity.setDisabledCount(dto.getDisabledCount());
|
entity.setDisabledCount(dto.getDisabledCount());
|
||||||
entity.setActiveRemotePortCount(dto.getActiveRemotePortCount());
|
entity.setActiveRemotePortCount(dto.getActiveRemotePortCount());
|
||||||
entity.setInactiveRemotePortCount(dto.getInactiveRemotePortCount());
|
entity.setInactiveRemotePortCount(dto.getInactiveRemotePortCount());
|
||||||
|
|
||||||
|
entity.setUpToDateCount(dto.getUpToDateCount());
|
||||||
|
entity.setLocallyModifiedCount(dto.getLocallyModifiedCount());
|
||||||
|
entity.setStaleCount(dto.getStaleCount());
|
||||||
|
entity.setLocallyModifiedAndStaleCount(dto.getLocallyModifiedAndStaleCount());
|
||||||
|
entity.setSyncFailureCount(dto.getSyncFailureCount());
|
||||||
|
|
||||||
|
if (dto.getVersionControlInformation() != null) {
|
||||||
|
entity.setState(dto.getVersionControlInformation().getState());
|
||||||
|
}
|
||||||
|
|
||||||
entity.setBulletins(bulletins); // include bulletins as authorized descendant component bulletins should be available
|
entity.setBulletins(bulletins); // include bulletins as authorized descendant component bulletins should be available
|
||||||
if (permissions != null && permissions.getCanRead()) {
|
if (permissions != null && permissions.getCanRead()) {
|
||||||
entity.setComponent(dto);
|
entity.setComponent(dto);
|
||||||
|
@ -499,6 +511,11 @@ public final class EntityFactory {
|
||||||
if (dto != null) {
|
if (dto != null) {
|
||||||
entity.setPermissions(permissions);
|
entity.setPermissions(permissions);
|
||||||
entity.setId(dto.getId());
|
entity.setId(dto.getId());
|
||||||
|
|
||||||
|
if (dto.getVersionControlInformation() != null) {
|
||||||
|
entity.setState(dto.getVersionControlInformation().getState());
|
||||||
|
}
|
||||||
|
|
||||||
if (permissions != null && permissions.getCanRead()) {
|
if (permissions != null && permissions.getCanRead()) {
|
||||||
entity.setBreadcrumb(dto);
|
entity.setBreadcrumb(dto);
|
||||||
}
|
}
|
||||||
|
|
|
@ -593,6 +593,11 @@ public class ControllerFacade implements Authorizable {
|
||||||
controllerStatus.setDisabledCount(counts.getDisabledCount());
|
controllerStatus.setDisabledCount(counts.getDisabledCount());
|
||||||
controllerStatus.setActiveRemotePortCount(counts.getActiveRemotePortCount());
|
controllerStatus.setActiveRemotePortCount(counts.getActiveRemotePortCount());
|
||||||
controllerStatus.setInactiveRemotePortCount(counts.getInactiveRemotePortCount());
|
controllerStatus.setInactiveRemotePortCount(counts.getInactiveRemotePortCount());
|
||||||
|
controllerStatus.setUpToDateCount(counts.getUpToDateCount());
|
||||||
|
controllerStatus.setLocallyModifiedCount(counts.getLocallyModifiedCount());
|
||||||
|
controllerStatus.setStaleCount(counts.getStaleCount());
|
||||||
|
controllerStatus.setLocallyModifiedAndStaleCount(counts.getLocallyModifiedAndStaleCount());
|
||||||
|
controllerStatus.setSyncFailureCount(counts.getSyncFailureCount());
|
||||||
|
|
||||||
return controllerStatus;
|
return controllerStatus;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,13 @@
|
||||||
<div class="fa fa-stop"><span id="controller-stopped-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerStoppedCount}}</span></div>
|
<div class="fa fa-stop"><span id="controller-stopped-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerStoppedCount}}</span></div>
|
||||||
<div class="fa fa-warning"><span id="controller-invalid-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerInvalidCount}}</span></div>
|
<div class="fa fa-warning"><span id="controller-invalid-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerInvalidCount}}</span></div>
|
||||||
<div class="icon icon-enable-false"><span id="controller-disabled-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerDisabledCount}}</span></div>
|
<div class="icon icon-enable-false"><span id="controller-disabled-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerDisabledCount}}</span></div>
|
||||||
|
<div class="fa fa-check"><span id="controller-up-to-date-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerUpToDateCount}}</span></div>
|
||||||
|
<div class="fa fa-asterisk"><span id="controller-locally-modified-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerLocallyModifiedCount}}</span></div>
|
||||||
|
<div class="fa fa-arrow-circle-up"><span id="controller-stale-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerStaleCount}}</span></div>
|
||||||
|
<div class="fa fa-exclamation-circle">
|
||||||
|
<span id="controller-locally-modified-and-stale-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerLocallyModifiedAndStaleCount}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="fa fa-question"><span id="controller-sync-failure-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerSyncFailureCount}}</span></div>
|
||||||
<div class="fa fa-refresh"><span id="stats-last-refreshed">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.statsLastRefreshed}}</span></div>
|
<div class="fa fa-refresh"><span id="stats-last-refreshed">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.statsLastRefreshed}}</span></div>
|
||||||
<div id="canvas-loading-container" class="loading-container"></div>
|
<div id="canvas-loading-container" class="loading-container"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -24,7 +24,10 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting">
|
<div class="setting">
|
||||||
<span id="import-process-group-link" class="link"><i class="fa fa-cloud-download" aria-hidden="true" style="margin-left: 5px; margin-right: 5px;"></i>Import version...</span>
|
<span id="import-process-group-link" class="link" title="Import a flow from a registry">
|
||||||
|
<i class="fa fa-cloud-download" aria-hidden="true" style="margin-left: 5px; margin-right: 5px;"></i>
|
||||||
|
Import...
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -417,7 +417,7 @@ button.fa {
|
||||||
color: #004849;
|
color: #004849;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
line-height: 23px;
|
line-height: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
button.icon {
|
button.icon {
|
||||||
|
|
|
@ -1,21 +1,3 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
* (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
/* styles for the graph pan/zoom controls */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
@ -50,7 +32,7 @@
|
||||||
|
|
||||||
#graph-controls .fa {
|
#graph-controls .fa {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
margin-left: -1px;
|
margin-left: -2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.graph-control-header-icon.fa {
|
.graph-control-header-icon.fa {
|
||||||
|
@ -93,7 +75,7 @@ div.graph-control-docked {
|
||||||
}
|
}
|
||||||
|
|
||||||
div.graph-control button {
|
div.graph-control button {
|
||||||
line-height: 28px;
|
line-height: 30px;
|
||||||
border: 1px solid #CCDADB; /*tint link-color 80%*/
|
border: 1px solid #CCDADB; /*tint link-color 80%*/
|
||||||
background-color: rgba(249,250,251,1);
|
background-color: rgba(249,250,251,1);
|
||||||
color: #004849;
|
color: #004849;
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
* @returns {*}
|
* @returns {*}
|
||||||
*/
|
*/
|
||||||
isTracking: function (breadcrumbEntity) {
|
isTracking: function (breadcrumbEntity) {
|
||||||
return nfCommon.isDefinedAndNotNull(breadcrumbEntity.breadcrumb.versionControlInformation);
|
return nfCommon.isDefinedAndNotNull(breadcrumbEntity.state);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -113,8 +113,8 @@
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
getVersionControlClass: function (breadcrumbEntity) {
|
getVersionControlClass: function (breadcrumbEntity) {
|
||||||
if (nfCommon.isDefinedAndNotNull(breadcrumbEntity.breadcrumb.versionControlInformation)) {
|
if (nfCommon.isDefinedAndNotNull(breadcrumbEntity.state)) {
|
||||||
var vciState = breadcrumbEntity.breadcrumb.versionControlInformation.state;
|
var vciState = breadcrumbEntity.state;
|
||||||
if (vciState === 'SYNC_FAILURE') {
|
if (vciState === 'SYNC_FAILURE') {
|
||||||
return 'breadcrumb-version-control-gray fa fa-question'
|
return 'breadcrumb-version-control-gray fa fa-question'
|
||||||
} else if (vciState === 'LOCALLY_MODIFIED_AND_STALE') {
|
} else if (vciState === 'LOCALLY_MODIFIED_AND_STALE') {
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
* @param breadcrumbEntity
|
* @param breadcrumbEntity
|
||||||
*/
|
*/
|
||||||
getVersionControlTooltip: function (breadcrumbEntity) {
|
getVersionControlTooltip: function (breadcrumbEntity) {
|
||||||
if (nfCommon.isDefinedAndNotNull(breadcrumbEntity.breadcrumb.versionControlInformation)) {
|
if (nfCommon.isDefinedAndNotNull(breadcrumbEntity.state) && breadcrumbEntity.permissions.canRead) {
|
||||||
return nfCommon.getVersionControlTooltip(breadcrumbEntity.breadcrumb.versionControlInformation);
|
return nfCommon.getVersionControlTooltip(breadcrumbEntity.breadcrumb.versionControlInformation);
|
||||||
} else {
|
} else {
|
||||||
return 'This Process Group is not under version control.'
|
return 'This Process Group is not under version control.'
|
||||||
|
|
|
@ -74,6 +74,11 @@
|
||||||
this.controllerStoppedCount = "-";
|
this.controllerStoppedCount = "-";
|
||||||
this.controllerInvalidCount = "-";
|
this.controllerInvalidCount = "-";
|
||||||
this.controllerDisabledCount = "-";
|
this.controllerDisabledCount = "-";
|
||||||
|
this.controllerUpToDateCount = "-";
|
||||||
|
this.controllerLocallyModifiedCount = "-";
|
||||||
|
this.controllerStaleCount = "-";
|
||||||
|
this.controllerLocallyModifiedAndStaleCount = "-";
|
||||||
|
this.controllerSyncFailureCount = "-";
|
||||||
this.statsLastRefreshed = "-";
|
this.statsLastRefreshed = "-";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -502,6 +507,51 @@
|
||||||
$('#flow-status-container').find('.icon-enable-false').removeClass('disabled').addClass('zero');
|
$('#flow-status-container').find('.icon-enable-false').removeClass('disabled').addClass('zero');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.controllerUpToDateCount =
|
||||||
|
nfCommon.isDefinedAndNotNull(status.upToDateCount) ? status.upToDateCount : '-';
|
||||||
|
|
||||||
|
if (this.controllerUpToDateCount > 0) {
|
||||||
|
$('#flow-status-container').find('.fa-check').removeClass('zero').addClass('up-to-date');
|
||||||
|
} else {
|
||||||
|
$('#flow-status-container').find('.fa-check').removeClass('up-to-date').addClass('zero');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.controllerLocallyModifiedCount =
|
||||||
|
nfCommon.isDefinedAndNotNull(status.locallyModifiedCount) ? status.locallyModifiedCount : '-';
|
||||||
|
|
||||||
|
if (this.controllerLocallyModifiedCount > 0) {
|
||||||
|
$('#flow-status-container').find('.fa-asterisk').removeClass('zero').addClass('locally-modified');
|
||||||
|
} else {
|
||||||
|
$('#flow-status-container').find('.fa-asterisk').removeClass('locally-modified').addClass('zero');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.controllerStaleCount =
|
||||||
|
nfCommon.isDefinedAndNotNull(status.staleCount) ? status.staleCount : '-';
|
||||||
|
|
||||||
|
if (this.controllerStaleCount > 0) {
|
||||||
|
$('#flow-status-container').find('.fa-arrow-circle-up').removeClass('zero').addClass('stale');
|
||||||
|
} else {
|
||||||
|
$('#flow-status-container').find('.fa-arrow-circle-up').removeClass('stale').addClass('zero');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.controllerLocallyModifiedAndStaleCount =
|
||||||
|
nfCommon.isDefinedAndNotNull(status.locallyModifiedAndStaleCount) ? status.locallyModifiedAndStaleCount : '-';
|
||||||
|
|
||||||
|
if (this.controllerLocallyModifiedAndStaleCount > 0) {
|
||||||
|
$('#flow-status-container').find('.fa-exclamation-circle').removeClass('zero').addClass('locally-modified-and-stale');
|
||||||
|
} else {
|
||||||
|
$('#flow-status-container').find('.fa-exclamation-circle').removeClass('locally-modified-and-stale').addClass('zero');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.controllerSyncFailureCount =
|
||||||
|
nfCommon.isDefinedAndNotNull(status.syncFailureCount) ? status.syncFailureCount : '-';
|
||||||
|
|
||||||
|
if (this.controllerSyncFailureCount > 0) {
|
||||||
|
$('#flow-status-container').find('.fa-question').removeClass('zero').addClass('sync-failure');
|
||||||
|
} else {
|
||||||
|
$('#flow-status-container').find('.fa-question').removeClass('sync-failure').addClass('zero');
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
$('#save-flow-version-bucket').text('').hide();
|
$('#save-flow-version-bucket').text('').hide();
|
||||||
|
|
||||||
$('#save-flow-version-name').text('').hide();
|
$('#save-flow-version-name').text('').hide();
|
||||||
$('#save-flow-version-description').text('').hide();
|
$('#save-flow-version-description').removeClass('unset blank').text('').hide();
|
||||||
|
|
||||||
$('#save-flow-version-name-field').val('').hide();
|
$('#save-flow-version-name-field').val('').hide();
|
||||||
$('#save-flow-version-description-field').val('').hide();
|
$('#save-flow-version-description-field').val('').hide();
|
||||||
|
@ -277,6 +277,8 @@
|
||||||
optionClass: 'unset',
|
optionClass: 'unset',
|
||||||
disabled: true
|
disabled: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (nfCommon.isDefinedAndNotNull(flowCombo)) {
|
||||||
flowCombo.combo('destroy').combo({
|
flowCombo.combo('destroy').combo({
|
||||||
options: [{
|
options: [{
|
||||||
text: 'No available flows',
|
text: 'No available flows',
|
||||||
|
@ -286,6 +288,7 @@
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// load the buckets
|
// load the buckets
|
||||||
bucketCombo.combo('destroy').combo({
|
bucketCombo.combo('destroy').combo({
|
||||||
|
@ -315,6 +318,8 @@
|
||||||
disabled: true
|
disabled: true
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (nfCommon.isDefinedAndNotNull(flowCombo)) {
|
||||||
flowCombo.combo('destroy').combo({
|
flowCombo.combo('destroy').combo({
|
||||||
options: [{
|
options: [{
|
||||||
text: 'No available flows',
|
text: 'No available flows',
|
||||||
|
@ -323,6 +328,7 @@
|
||||||
disabled: true
|
disabled: true
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
dialog.modal('refreshButtons');
|
dialog.modal('refreshButtons');
|
||||||
};
|
};
|
||||||
|
@ -390,8 +396,6 @@
|
||||||
registryId: versionControlInformation.registryId,
|
registryId: versionControlInformation.registryId,
|
||||||
bucketId: versionControlInformation.bucketId,
|
bucketId: versionControlInformation.bucketId,
|
||||||
flowId: versionControlInformation.flowId,
|
flowId: versionControlInformation.flowId,
|
||||||
flowName: $('#save-flow-version-name').text(),
|
|
||||||
description: $('#save-flow-version-description').text(),
|
|
||||||
comments: $('#save-flow-version-change-comments').val()
|
comments: $('#save-flow-version-change-comments').val()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -1598,9 +1602,10 @@
|
||||||
var processGroupId = $('#save-flow-version-process-group-id').text();
|
var processGroupId = $('#save-flow-version-process-group-id').text();
|
||||||
saveFlowVersion().done(function (response) {
|
saveFlowVersion().done(function (response) {
|
||||||
updateVersionControlInformation(processGroupId, response.versionControlInformation);
|
updateVersionControlInformation(processGroupId, response.versionControlInformation);
|
||||||
});
|
|
||||||
|
|
||||||
|
// only hide the dialog if the flow version was successfully saved
|
||||||
$(this).modal('hide');
|
$(this).modal('hide');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
@ -1729,9 +1734,6 @@
|
||||||
|
|
||||||
return $.Deferred(function (deferred) {
|
return $.Deferred(function (deferred) {
|
||||||
getVersionControlInformation(processGroupId).done(function (groupVersionControlInformation) {
|
getVersionControlInformation(processGroupId).done(function (groupVersionControlInformation) {
|
||||||
// record the revision
|
|
||||||
$('#save-flow-version-process-group-id').data('revision', groupVersionControlInformation.processGroupRevision).text(processGroupId);
|
|
||||||
|
|
||||||
if (nfCommon.isDefinedAndNotNull(groupVersionControlInformation.versionControlInformation)) {
|
if (nfCommon.isDefinedAndNotNull(groupVersionControlInformation.versionControlInformation)) {
|
||||||
var versionControlInformation = groupVersionControlInformation.versionControlInformation;
|
var versionControlInformation = groupVersionControlInformation.versionControlInformation;
|
||||||
|
|
||||||
|
@ -1741,7 +1743,8 @@
|
||||||
$('#save-flow-version-label').text(versionControlInformation.version + 1);
|
$('#save-flow-version-label').text(versionControlInformation.version + 1);
|
||||||
|
|
||||||
$('#save-flow-version-name').text(versionControlInformation.flowName).show();
|
$('#save-flow-version-name').text(versionControlInformation.flowName).show();
|
||||||
$('#save-flow-version-description').text(versionControlInformation.flowDescription).show();
|
nfCommon.populateField('save-flow-version-description', versionControlInformation.flowDescription);
|
||||||
|
$('#save-flow-version-description').show();
|
||||||
|
|
||||||
// record the versionControlInformation
|
// record the versionControlInformation
|
||||||
$('#save-flow-version-process-group-id').data('versionControlInformation', versionControlInformation);
|
$('#save-flow-version-process-group-id').data('versionControlInformation', versionControlInformation);
|
||||||
|
@ -1787,6 +1790,9 @@
|
||||||
deferred.reject();
|
deferred.reject();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// record the revision
|
||||||
|
$('#save-flow-version-process-group-id').data('revision', groupVersionControlInformation.processGroupRevision).text(processGroupId);
|
||||||
}).fail(nfErrorHandler.handleAjaxError);
|
}).fail(nfErrorHandler.handleAjaxError);
|
||||||
}).done(function () {
|
}).done(function () {
|
||||||
$('#save-flow-version-dialog').modal('show');
|
$('#save-flow-version-dialog').modal('show');
|
||||||
|
|
|
@ -368,7 +368,10 @@
|
||||||
port.select('text.port-name').text(null);
|
port.select('text.port-name').text(null);
|
||||||
|
|
||||||
// clear the port comments
|
// clear the port comments
|
||||||
port.select('path.component-comments').style('visibility', false);
|
port.select('path.component-comments').style('visibility', 'hidden');
|
||||||
|
|
||||||
|
// clear tooltips
|
||||||
|
port.call(removeTooltips);
|
||||||
}
|
}
|
||||||
|
|
||||||
// populate the stats
|
// populate the stats
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
* @param d
|
* @param d
|
||||||
*/
|
*/
|
||||||
var isUnderVersionControl = function (d) {
|
var isUnderVersionControl = function (d) {
|
||||||
return nfCommon.isDefinedAndNotNull(d.component.versionControlInformation);
|
return nfCommon.isDefinedAndNotNull(d.state);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -953,14 +953,114 @@
|
||||||
return d.disabledCount;
|
return d.disabledCount;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (processGroupData.permissions.canRead) {
|
// up to date current
|
||||||
|
var upToDate = details.select('text.process-group-up-to-date')
|
||||||
|
.classed('up-to-date', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.upToDateCount > 0;
|
||||||
|
})
|
||||||
|
.classed('zero', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.upToDateCount === 0;
|
||||||
|
});
|
||||||
|
var upToDateCount = details.select('text.process-group-up-to-date-count')
|
||||||
|
.attr('x', function () {
|
||||||
|
var updateToDateCountX = parseInt(upToDate.attr('x'), 10);
|
||||||
|
return updateToDateCountX + Math.round(upToDate.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
||||||
|
})
|
||||||
|
.text(function (d) {
|
||||||
|
return d.upToDateCount;
|
||||||
|
});
|
||||||
|
|
||||||
|
// update locally modified
|
||||||
|
var locallyModified = details.select('text.process-group-locally-modified')
|
||||||
|
.classed('locally-modified', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.locallyModifiedCount > 0;
|
||||||
|
})
|
||||||
|
.classed('zero', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.locallyModifiedCount === 0;
|
||||||
|
})
|
||||||
|
.attr('x', function () {
|
||||||
|
var upToDateX = parseInt(upToDateCount.attr('x'), 10);
|
||||||
|
return upToDateX + Math.round(upToDateCount.node().getComputedTextLength()) + CONTENTS_SPACER;
|
||||||
|
});
|
||||||
|
var locallyModifiedCount = details.select('text.process-group-locally-modified-count')
|
||||||
|
.attr('x', function () {
|
||||||
|
var locallyModifiedCountX = parseInt(locallyModified.attr('x'), 10);
|
||||||
|
return locallyModifiedCountX + Math.round(locallyModified.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
||||||
|
})
|
||||||
|
.text(function (d) {
|
||||||
|
return d.locallyModifiedCount;
|
||||||
|
});
|
||||||
|
|
||||||
|
// update stale
|
||||||
|
var stale = details.select('text.process-group-stale')
|
||||||
|
.classed('stale', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.staleCount > 0;
|
||||||
|
})
|
||||||
|
.classed('zero', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.staleCount === 0;
|
||||||
|
})
|
||||||
|
.attr('x', function () {
|
||||||
|
var locallyModifiedX = parseInt(locallyModifiedCount.attr('x'), 10);
|
||||||
|
return locallyModifiedX + Math.round(locallyModifiedCount.node().getComputedTextLength()) + CONTENTS_SPACER;
|
||||||
|
});
|
||||||
|
var staleCount = details.select('text.process-group-stale-count')
|
||||||
|
.attr('x', function () {
|
||||||
|
var staleCountX = parseInt(stale.attr('x'), 10);
|
||||||
|
return staleCountX + Math.round(stale.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
||||||
|
})
|
||||||
|
.text(function (d) {
|
||||||
|
return d.staleCount;
|
||||||
|
});
|
||||||
|
|
||||||
|
// update locally modified and stale
|
||||||
|
var locallyModifiedAndStale = details.select('text.process-group-locally-modified-and-stale')
|
||||||
|
.classed('locally-modified-and-stale', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.locallyModifiedAndStaleCount > 0;
|
||||||
|
})
|
||||||
|
.classed('zero', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.locallyModifiedAndStaleCount === 0;
|
||||||
|
})
|
||||||
|
.attr('x', function () {
|
||||||
|
var staleX = parseInt(staleCount.attr('x'), 10);
|
||||||
|
return staleX + Math.round(staleCount.node().getComputedTextLength()) + CONTENTS_SPACER;
|
||||||
|
});
|
||||||
|
var locallyModifiedAndStaleCount = details.select('text.process-group-locally-modified-and-stale-count')
|
||||||
|
.attr('x', function () {
|
||||||
|
var locallyModifiedAndStaleCountX = parseInt(locallyModifiedAndStale.attr('x'), 10);
|
||||||
|
return locallyModifiedAndStaleCountX + Math.round(locallyModifiedAndStale.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
||||||
|
})
|
||||||
|
.text(function (d) {
|
||||||
|
return d.locallyModifiedAndStaleCount;
|
||||||
|
});
|
||||||
|
|
||||||
|
// update sync failure
|
||||||
|
var syncFailure = details.select('text.process-group-sync-failure')
|
||||||
|
.classed('sync-failure', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.syncFailureCount > 0;
|
||||||
|
})
|
||||||
|
.classed('zero', function (d) {
|
||||||
|
return d.permissions.canRead && d.component.syncFailureCount === 0;
|
||||||
|
})
|
||||||
|
.attr('x', function () {
|
||||||
|
var syncFailureX = parseInt(locallyModifiedAndStaleCount.attr('x'), 10);
|
||||||
|
return syncFailureX + Math.round(locallyModifiedAndStaleCount.node().getComputedTextLength()) + CONTENTS_SPACER - 2;
|
||||||
|
});
|
||||||
|
details.select('text.process-group-sync-failure-count')
|
||||||
|
.attr('x', function () {
|
||||||
|
var syncFailureCountX = parseInt(syncFailure.attr('x'), 10);
|
||||||
|
return syncFailureCountX + Math.round(syncFailure.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
||||||
|
})
|
||||||
|
.text(function (d) {
|
||||||
|
return d.syncFailureCount;
|
||||||
|
});
|
||||||
|
|
||||||
// update version control information
|
// update version control information
|
||||||
var versionControl = processGroup.select('text.version-control')
|
var versionControl = processGroup.select('text.version-control')
|
||||||
.style({
|
.style({
|
||||||
'visibility': isUnderVersionControl(processGroupData) ? 'visible' : 'hidden',
|
'visibility': isUnderVersionControl(processGroupData) ? 'visible' : 'hidden',
|
||||||
'fill': function () {
|
'fill': function () {
|
||||||
if (isUnderVersionControl(processGroupData)) {
|
if (isUnderVersionControl(processGroupData)) {
|
||||||
var vciState = processGroupData.component.versionControlInformation.state;
|
var vciState = processGroupData.state;
|
||||||
if (vciState === 'SYNC_FAILURE') {
|
if (vciState === 'SYNC_FAILURE') {
|
||||||
return '#666666';
|
return '#666666';
|
||||||
} else if (vciState === 'LOCALLY_MODIFIED_AND_STALE') {
|
} else if (vciState === 'LOCALLY_MODIFIED_AND_STALE') {
|
||||||
|
@ -979,7 +1079,7 @@
|
||||||
})
|
})
|
||||||
.text(function () {
|
.text(function () {
|
||||||
if (isUnderVersionControl(processGroupData)) {
|
if (isUnderVersionControl(processGroupData)) {
|
||||||
var vciState = processGroupData.component.versionControlInformation.state;
|
var vciState = processGroupData.state;
|
||||||
if (vciState === 'SYNC_FAILURE') {
|
if (vciState === 'SYNC_FAILURE') {
|
||||||
return '\uf128'
|
return '\uf128'
|
||||||
} else if (vciState === 'LOCALLY_MODIFIED_AND_STALE') {
|
} else if (vciState === 'LOCALLY_MODIFIED_AND_STALE') {
|
||||||
|
@ -994,7 +1094,11 @@
|
||||||
} else {
|
} else {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
}).each(function () {
|
});
|
||||||
|
|
||||||
|
if (processGroupData.permissions.canRead) {
|
||||||
|
// version control tooltip
|
||||||
|
versionControl.each(function () {
|
||||||
// get the tip
|
// get the tip
|
||||||
var tip = d3.select('#version-control-tip-' + processGroupData.id);
|
var tip = d3.select('#version-control-tip-' + processGroupData.id);
|
||||||
|
|
||||||
|
@ -1092,136 +1196,10 @@
|
||||||
.text(function (d) {
|
.text(function (d) {
|
||||||
return d.component.name;
|
return d.component.name;
|
||||||
});
|
});
|
||||||
|
|
||||||
// up to date current
|
|
||||||
var upToDate = details.select('text.process-group-up-to-date')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.classed('up-to-date', function (d) {
|
|
||||||
return d.component.upToDateCount > 0;
|
|
||||||
})
|
|
||||||
.classed('zero', function (d) {
|
|
||||||
return d.component.upToDateCount === 0;
|
|
||||||
});
|
|
||||||
var upToDateCount = details.select('text.process-group-up-to-date-count')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.attr('x', function () {
|
|
||||||
var updateToDateCountX = parseInt(upToDate.attr('x'), 10);
|
|
||||||
return updateToDateCountX + Math.round(upToDate.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
|
||||||
})
|
|
||||||
.text(function (d) {
|
|
||||||
return d.component.upToDateCount;
|
|
||||||
});
|
|
||||||
|
|
||||||
// update locally modified
|
|
||||||
var locallyModified = details.select('text.process-group-locally-modified')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.classed('locally-modified', function (d) {
|
|
||||||
return d.component.locallyModifiedCount > 0;
|
|
||||||
})
|
|
||||||
.classed('zero', function (d) {
|
|
||||||
return d.component.locallyModifiedCount === 0;
|
|
||||||
})
|
|
||||||
.attr('x', function () {
|
|
||||||
var upToDateX = parseInt(upToDateCount.attr('x'), 10);
|
|
||||||
return upToDateX + Math.round(upToDateCount.node().getComputedTextLength()) + CONTENTS_SPACER;
|
|
||||||
});
|
|
||||||
var locallyModifiedCount = details.select('text.process-group-locally-modified-count')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.attr('x', function () {
|
|
||||||
var locallyModifiedCountX = parseInt(locallyModified.attr('x'), 10);
|
|
||||||
return locallyModifiedCountX + Math.round(locallyModified.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
|
||||||
})
|
|
||||||
.text(function (d) {
|
|
||||||
return d.component.locallyModifiedCount;
|
|
||||||
});
|
|
||||||
|
|
||||||
// update stale
|
|
||||||
var stale = details.select('text.process-group-stale')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.classed('stale', function (d) {
|
|
||||||
return d.component.staleCount > 0;
|
|
||||||
})
|
|
||||||
.classed('zero', function (d) {
|
|
||||||
return d.component.staleCount === 0;
|
|
||||||
})
|
|
||||||
.attr('x', function () {
|
|
||||||
var locallyModifiedX = parseInt(locallyModifiedCount.attr('x'), 10);
|
|
||||||
return locallyModifiedX + Math.round(locallyModifiedCount.node().getComputedTextLength()) + CONTENTS_SPACER;
|
|
||||||
});
|
|
||||||
var staleCount = details.select('text.process-group-stale-count')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.attr('x', function () {
|
|
||||||
var staleCountX = parseInt(stale.attr('x'), 10);
|
|
||||||
return staleCountX + Math.round(stale.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
|
||||||
})
|
|
||||||
.text(function (d) {
|
|
||||||
return d.component.staleCount;
|
|
||||||
});
|
|
||||||
|
|
||||||
// update locally modified and stale
|
|
||||||
var locallyModifiedAndStale = details.select('text.process-group-locally-modified-and-stale')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.classed('locally-modified-and-stale', function (d) {
|
|
||||||
return d.component.locallyModifiedAndStaleCount > 0;
|
|
||||||
})
|
|
||||||
.classed('zero', function (d) {
|
|
||||||
return d.component.locallyModifiedAndStaleCount === 0;
|
|
||||||
})
|
|
||||||
.attr('x', function () {
|
|
||||||
var staleX = parseInt(staleCount.attr('x'), 10);
|
|
||||||
return staleX + Math.round(staleCount.node().getComputedTextLength()) + CONTENTS_SPACER;
|
|
||||||
});
|
|
||||||
var locallyModifiedAndStaleCount = details.select('text.process-group-locally-modified-and-stale-count')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.attr('x', function () {
|
|
||||||
var locallyModifiedAndStaleCountX = parseInt(locallyModifiedAndStale.attr('x'), 10);
|
|
||||||
return locallyModifiedAndStaleCountX + Math.round(locallyModifiedAndStale.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
|
||||||
})
|
|
||||||
.text(function (d) {
|
|
||||||
return d.component.locallyModifiedAndStaleCount;
|
|
||||||
});
|
|
||||||
|
|
||||||
// update sync failure
|
|
||||||
var syncFailure = details.select('text.process-group-sync-failure')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.classed('sync-failure', function (d) {
|
|
||||||
return d.component.syncFailureCount > 0;
|
|
||||||
})
|
|
||||||
.classed('zero', function (d) {
|
|
||||||
return d.component.syncFailureCount === 0;
|
|
||||||
})
|
|
||||||
.attr('x', function () {
|
|
||||||
var syncFailureX = parseInt(locallyModifiedAndStaleCount.attr('x'), 10);
|
|
||||||
return syncFailureX + Math.round(locallyModifiedAndStaleCount.node().getComputedTextLength()) + CONTENTS_SPACER - 2;
|
|
||||||
});
|
|
||||||
details.select('text.process-group-sync-failure-count')
|
|
||||||
.style('visibility', 'visible')
|
|
||||||
.attr('x', function () {
|
|
||||||
var syncFailureCountX = parseInt(syncFailure.attr('x'), 10);
|
|
||||||
return syncFailureCountX + Math.round(syncFailure.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
|
|
||||||
})
|
|
||||||
.text(function (d) {
|
|
||||||
return d.component.syncFailureCount;
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
// update version control information
|
|
||||||
processGroup.select('text.version-control').style('visibility', 'hidden');
|
|
||||||
|
|
||||||
// clear the process group comments
|
// clear the process group comments
|
||||||
processGroup.select('path.component-comments').style('visibility', 'hidden');
|
processGroup.select('path.component-comments').style('visibility', 'hidden');
|
||||||
|
|
||||||
// clear the encapsulate versioned pg counts
|
|
||||||
details.select('text.process-group-up-to-date').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-up-to-date-count').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-locally-modified').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-locally-modified-count').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-stale').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-stale-count').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-locally-modified-and-stale').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-locally-modified-and-stale-count').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-sync-failure').style('visibility', 'hidden');
|
|
||||||
details.select('text.process-group-sync-failure-count').style('visibility', 'hidden');
|
|
||||||
|
|
||||||
// clear the process group name
|
// clear the process group name
|
||||||
processGroup.select('text.process-group-name')
|
processGroup.select('text.process-group-name')
|
||||||
.attr({
|
.attr({
|
||||||
|
@ -1229,6 +1207,9 @@
|
||||||
'width': 316
|
'width': 316
|
||||||
})
|
})
|
||||||
.text(null);
|
.text(null);
|
||||||
|
|
||||||
|
// clear tooltips
|
||||||
|
processGroup.call(removeTooltips);
|
||||||
}
|
}
|
||||||
|
|
||||||
// populate the stats
|
// populate the stats
|
||||||
|
|
|
@ -661,7 +661,10 @@
|
||||||
processor.select('text.processor-bundle').text(null);
|
processor.select('text.processor-bundle').text(null);
|
||||||
|
|
||||||
// clear the processor comments
|
// clear the processor comments
|
||||||
processor.select('path.component-comments').style('visibility', false);
|
processor.select('path.component-comments').style('visibility', 'hidden');
|
||||||
|
|
||||||
|
// clear tooltips
|
||||||
|
processor.call(removeTooltips);
|
||||||
}
|
}
|
||||||
|
|
||||||
// populate the stats
|
// populate the stats
|
||||||
|
|
|
@ -288,18 +288,6 @@
|
||||||
'fill': '#ffffff'
|
'fill': '#ffffff'
|
||||||
});
|
});
|
||||||
|
|
||||||
// border
|
|
||||||
details.append('rect')
|
|
||||||
.attr({
|
|
||||||
'width': function () {
|
|
||||||
return remoteProcessGroupData.dimensions.width;
|
|
||||||
},
|
|
||||||
'height': 1,
|
|
||||||
'x': 0,
|
|
||||||
'y': 103,
|
|
||||||
'fill': '#c7d2d7'
|
|
||||||
});
|
|
||||||
|
|
||||||
// -----
|
// -----
|
||||||
// stats
|
// stats
|
||||||
// -----
|
// -----
|
||||||
|
@ -499,7 +487,7 @@
|
||||||
'x': function () {
|
'x': function () {
|
||||||
return remoteProcessGroupData.dimensions.width - 17;
|
return remoteProcessGroupData.dimensions.width - 17;
|
||||||
},
|
},
|
||||||
'y': 50
|
'y': 49
|
||||||
})
|
})
|
||||||
.text('\uf24a');
|
.text('\uf24a');
|
||||||
}
|
}
|
||||||
|
@ -625,13 +613,16 @@
|
||||||
details.select('text.remote-process-group-transmission-secure').text(null);
|
details.select('text.remote-process-group-transmission-secure').text(null);
|
||||||
|
|
||||||
// clear the comments
|
// clear the comments
|
||||||
details.select('path.component-comments').style('visibility', false);
|
details.select('path.component-comments').style('visibility', 'hidden');
|
||||||
|
|
||||||
// clear the last refresh
|
// clear the last refresh
|
||||||
details.select('text.remote-process-group-last-refresh').text(null);
|
details.select('text.remote-process-group-last-refresh').text(null);
|
||||||
|
|
||||||
// clear the name
|
// clear the name
|
||||||
remoteProcessGroup.select('text.remote-process-group-name').text(null);
|
remoteProcessGroup.select('text.remote-process-group-name').text(null);
|
||||||
|
|
||||||
|
// clear tooltips
|
||||||
|
remoteProcessGroup.call(removeTooltips);
|
||||||
}
|
}
|
||||||
|
|
||||||
// populate the stats
|
// populate the stats
|
||||||
|
|
Loading…
Reference in New Issue