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:
Matt Gilman 2017-12-11 15:14:44 -05:00 committed by Bryan Bende
parent fe8b30bf26
commit 1266235c00
No known key found for this signature in database
GPG Key ID: A0DDA9ED50711C39
18 changed files with 456 additions and 252 deletions

View File

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

View File

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

View File

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

View File

@ -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);

View File

@ -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."),

View File

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

View File

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

View File

@ -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>

View File

@ -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>

View File

@ -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 {

View File

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

View File

@ -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.'

View File

@ -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');
}
}, },
/** /**

View File

@ -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');

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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