Search in sources :

Example 6 with StatusHistoryDTO

use of org.apache.nifi.web.api.dto.status.StatusHistoryDTO in project nifi by apache.

the class StatusHistoryEndpointMerger method merge.

@Override
public NodeResponse merge(URI uri, String method, Set<NodeResponse> successfulResponses, Set<NodeResponse> problematicResponses, NodeResponse clientResponse) {
    final Map<String, MetricDescriptor<?>> metricDescriptors = getStandardMetricDescriptors(uri);
    final StatusHistoryEntity responseEntity = clientResponse.getClientResponse().readEntity(StatusHistoryEntity.class);
    final Set<StatusDescriptorDTO> fieldDescriptors = new LinkedHashSet<>();
    boolean includeCounters = true;
    StatusHistoryDTO lastStatusHistory = null;
    final List<NodeStatusSnapshotsDTO> nodeStatusSnapshots = new ArrayList<>(successfulResponses.size());
    LinkedHashMap<String, String> noReadPermissionsComponentDetails = null;
    for (final NodeResponse nodeResponse : successfulResponses) {
        final StatusHistoryEntity nodeResponseEntity = nodeResponse == clientResponse ? responseEntity : nodeResponse.getClientResponse().readEntity(StatusHistoryEntity.class);
        final StatusHistoryDTO nodeStatus = nodeResponseEntity.getStatusHistory();
        lastStatusHistory = nodeStatus;
        if (noReadPermissionsComponentDetails == null && !nodeResponseEntity.getCanRead()) {
            // If component details from a history with no read permissions is encountered for the first time, hold on to them to be used in the merged response
            noReadPermissionsComponentDetails = nodeStatus.getComponentDetails();
        }
        if (!Boolean.TRUE.equals(nodeResponseEntity.getCanRead())) {
            includeCounters = false;
        }
        final NodeIdentifier nodeId = nodeResponse.getNodeId();
        final NodeStatusSnapshotsDTO nodeStatusSnapshot = new NodeStatusSnapshotsDTO();
        nodeStatusSnapshot.setNodeId(nodeId.getId());
        nodeStatusSnapshot.setAddress(nodeId.getApiAddress());
        nodeStatusSnapshot.setApiPort(nodeId.getApiPort());
        nodeStatusSnapshot.setStatusSnapshots(nodeStatus.getAggregateSnapshots());
        nodeStatusSnapshots.add(nodeStatusSnapshot);
        final List<StatusDescriptorDTO> descriptors = nodeStatus.getFieldDescriptors();
        if (descriptors != null) {
            fieldDescriptors.addAll(descriptors);
        }
    }
    // the user is not authorized, we want to assume that the user is, in fact, not authorized.
    if (includeCounters) {
        for (final StatusDescriptorDTO descriptorDto : fieldDescriptors) {
            final String fieldName = descriptorDto.getField();
            if (!metricDescriptors.containsKey(fieldName)) {
                final ValueMapper<ProcessorStatus> valueMapper = s -> {
                    final Map<String, Long> counters = s.getCounters();
                    if (counters == null) {
                        return 0L;
                    }
                    return counters.getOrDefault(descriptorDto.getField(), 0L);
                };
                final MetricDescriptor<ProcessorStatus> metricDescriptor = new StandardMetricDescriptor<>(descriptorDto.getField(), descriptorDto.getLabel(), descriptorDto.getDescription(), Formatter.COUNT, valueMapper);
                metricDescriptors.put(fieldName, metricDescriptor);
            }
        }
    }
    final StatusHistoryDTO clusterStatusHistory = new StatusHistoryDTO();
    clusterStatusHistory.setAggregateSnapshots(mergeStatusHistories(nodeStatusSnapshots, metricDescriptors));
    clusterStatusHistory.setGenerated(new Date());
    clusterStatusHistory.setNodeSnapshots(nodeStatusSnapshots);
    if (lastStatusHistory != null) {
        clusterStatusHistory.setComponentDetails(noReadPermissionsComponentDetails == null ? lastStatusHistory.getComponentDetails() : noReadPermissionsComponentDetails);
    }
    clusterStatusHistory.setFieldDescriptors(new ArrayList<>(fieldDescriptors));
    final StatusHistoryEntity clusterEntity = new StatusHistoryEntity();
    clusterEntity.setStatusHistory(clusterStatusHistory);
    clusterEntity.setCanRead(noReadPermissionsComponentDetails == null);
    return new NodeResponse(clientResponse, clusterEntity);
}
Also used : LinkedHashSet(java.util.LinkedHashSet) NodeIdentifier(org.apache.nifi.cluster.protocol.NodeIdentifier) StatusHistoryEntity(org.apache.nifi.web.api.entity.StatusHistoryEntity) ValueMapper(org.apache.nifi.controller.status.history.ValueMapper) StatusSnapshotDTO(org.apache.nifi.web.api.dto.status.StatusSnapshotDTO) Date(java.util.Date) HashMap(java.util.HashMap) StandardMetricDescriptor(org.apache.nifi.controller.status.history.StandardMetricDescriptor) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) ProcessorStatusDescriptor(org.apache.nifi.controller.status.history.ProcessorStatusDescriptor) URI(java.net.URI) RemoteProcessGroupStatusDescriptor(org.apache.nifi.controller.status.history.RemoteProcessGroupStatusDescriptor) NodeResponse(org.apache.nifi.cluster.manager.NodeResponse) ProcessorStatus(org.apache.nifi.controller.status.ProcessorStatus) LinkedHashSet(java.util.LinkedHashSet) Formatter(org.apache.nifi.controller.status.history.MetricDescriptor.Formatter) StatusHistoryUtil(org.apache.nifi.controller.status.history.StatusHistoryUtil) StatusSnapshot(org.apache.nifi.controller.status.history.StatusSnapshot) StandardStatusSnapshot(org.apache.nifi.controller.status.history.StandardStatusSnapshot) Set(java.util.Set) EndpointResponseMerger(org.apache.nifi.cluster.coordination.http.EndpointResponseMerger) List(java.util.List) TreeMap(java.util.TreeMap) MetricDescriptor(org.apache.nifi.controller.status.history.MetricDescriptor) ConnectionStatusDescriptor(org.apache.nifi.controller.status.history.ConnectionStatusDescriptor) ProcessGroupStatusDescriptor(org.apache.nifi.controller.status.history.ProcessGroupStatusDescriptor) StatusHistoryDTO(org.apache.nifi.web.api.dto.status.StatusHistoryDTO) NodeStatusSnapshotsDTO(org.apache.nifi.web.api.dto.status.NodeStatusSnapshotsDTO) Pattern(java.util.regex.Pattern) StatusDescriptorDTO(org.apache.nifi.web.api.dto.status.StatusDescriptorDTO) NodeStatusSnapshotsDTO(org.apache.nifi.web.api.dto.status.NodeStatusSnapshotsDTO) ArrayList(java.util.ArrayList) NodeResponse(org.apache.nifi.cluster.manager.NodeResponse) ProcessorStatus(org.apache.nifi.controller.status.ProcessorStatus) Date(java.util.Date) StatusDescriptorDTO(org.apache.nifi.web.api.dto.status.StatusDescriptorDTO) StandardMetricDescriptor(org.apache.nifi.controller.status.history.StandardMetricDescriptor) MetricDescriptor(org.apache.nifi.controller.status.history.MetricDescriptor) StatusHistoryDTO(org.apache.nifi.web.api.dto.status.StatusHistoryDTO) NodeIdentifier(org.apache.nifi.cluster.protocol.NodeIdentifier) StandardMetricDescriptor(org.apache.nifi.controller.status.history.StandardMetricDescriptor) StatusHistoryEntity(org.apache.nifi.web.api.entity.StatusHistoryEntity) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) TreeMap(java.util.TreeMap)

Example 7 with StatusHistoryDTO

use of org.apache.nifi.web.api.dto.status.StatusHistoryDTO in project nifi by apache.

the class StatusHistoryUtil method createStatusHistoryDTO.

public static StatusHistoryDTO createStatusHistoryDTO(final StatusHistory statusHistory) {
    final List<StatusSnapshotDTO> snapshotDtos = new ArrayList<>();
    final Set<MetricDescriptor<?>> metricDescriptors = new LinkedHashSet<>();
    final LinkedHashMap<String, String> componentDetails = new LinkedHashMap<>(statusHistory.getComponentDetails());
    final Set<String> metricNames = new HashSet<>();
    for (final StatusSnapshot snapshot : statusHistory.getStatusSnapshots()) {
        final StatusSnapshotDTO snapshotDto = StatusHistoryUtil.createStatusSnapshotDto(snapshot);
        snapshotDtos.add(snapshotDto);
        metricNames.addAll(snapshotDto.getStatusMetrics().keySet());
        metricDescriptors.addAll(snapshot.getStatusMetrics().keySet());
    }
    // So for any metric that has is not in the aggregate snapshot, add it with a value of 0
    for (final StatusSnapshotDTO snapshotDto : snapshotDtos) {
        final Map<String, Long> metrics = snapshotDto.getStatusMetrics();
        for (final String metricName : metricNames) {
            if (!metrics.containsKey(metricName)) {
                metrics.put(metricName, 0L);
            }
        }
    }
    final StatusHistoryDTO dto = new StatusHistoryDTO();
    dto.setGenerated(new Date());
    dto.setComponentDetails(componentDetails);
    dto.setFieldDescriptors(StatusHistoryUtil.createFieldDescriptorDtos(metricDescriptors));
    dto.setAggregateSnapshots(snapshotDtos);
    return dto;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) ArrayList(java.util.ArrayList) Date(java.util.Date) LinkedHashMap(java.util.LinkedHashMap) StatusSnapshotDTO(org.apache.nifi.web.api.dto.status.StatusSnapshotDTO) StatusHistoryDTO(org.apache.nifi.web.api.dto.status.StatusHistoryDTO) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet)

Example 8 with StatusHistoryDTO

use of org.apache.nifi.web.api.dto.status.StatusHistoryDTO in project nifi by apache.

the class StandardNiFiServiceFacade method getRemoteProcessGroupStatusHistory.

@Override
public StatusHistoryEntity getRemoteProcessGroupStatusHistory(final String id) {
    final RemoteProcessGroup remoteProcessGroup = remoteProcessGroupDAO.getRemoteProcessGroup(id);
    final PermissionsDTO permissions = dtoFactory.createPermissionsDto(remoteProcessGroup);
    final StatusHistoryDTO dto = controllerFacade.getRemoteProcessGroupStatusHistory(id);
    return entityFactory.createStatusHistoryEntity(dto, permissions);
}
Also used : RemoteProcessGroup(org.apache.nifi.groups.RemoteProcessGroup) StatusHistoryDTO(org.apache.nifi.web.api.dto.status.StatusHistoryDTO) PermissionsDTO(org.apache.nifi.web.api.dto.PermissionsDTO)

Example 9 with StatusHistoryDTO

use of org.apache.nifi.web.api.dto.status.StatusHistoryDTO in project nifi by apache.

the class StandardNiFiServiceFacade method getConnectionStatusHistory.

@Override
public StatusHistoryEntity getConnectionStatusHistory(final String connectionId) {
    final Connection connection = connectionDAO.getConnection(connectionId);
    final PermissionsDTO permissions = dtoFactory.createPermissionsDto(connection);
    final StatusHistoryDTO dto = controllerFacade.getConnectionStatusHistory(connectionId);
    return entityFactory.createStatusHistoryEntity(dto, permissions);
}
Also used : StatusHistoryDTO(org.apache.nifi.web.api.dto.status.StatusHistoryDTO) PermissionsDTO(org.apache.nifi.web.api.dto.PermissionsDTO) Connection(org.apache.nifi.connectable.Connection) VersionedConnection(org.apache.nifi.registry.flow.VersionedConnection)

Example 10 with StatusHistoryDTO

use of org.apache.nifi.web.api.dto.status.StatusHistoryDTO in project nifi by apache.

the class ControllerFacade method getConnectionStatusHistory.

/**
 * Returns the status history for the specified connection.
 *
 * @param connectionId connection id
 * @return status history
 */
public StatusHistoryDTO getConnectionStatusHistory(final String connectionId) {
    final ProcessGroup root = flowController.getGroup(flowController.getRootGroupId());
    final Connection connection = root.findConnection(connectionId);
    // ensure the connection was found
    if (connection == null) {
        throw new ResourceNotFoundException(String.format("Unable to locate connection with id '%s'.", connectionId));
    }
    final StatusHistoryDTO statusHistory = flowController.getConnectionStatusHistory(connectionId);
    // if not authorized
    if (!connection.isAuthorized(authorizer, RequestAction.READ, NiFiUserUtils.getNiFiUser())) {
        statusHistory.getComponentDetails().put(ComponentStatusRepository.COMPONENT_DETAIL_NAME, connectionId);
        statusHistory.getComponentDetails().put(ComponentStatusRepository.COMPONENT_DETAIL_SOURCE_NAME, connection.getSource().getIdentifier());
        statusHistory.getComponentDetails().put(ComponentStatusRepository.COMPONENT_DETAIL_DESTINATION_NAME, connection.getDestination().getIdentifier());
    }
    return statusHistory;
}
Also used : StatusHistoryDTO(org.apache.nifi.web.api.dto.status.StatusHistoryDTO) VersionedProcessGroup(org.apache.nifi.registry.flow.VersionedProcessGroup) RemoteProcessGroup(org.apache.nifi.groups.RemoteProcessGroup) ProcessGroup(org.apache.nifi.groups.ProcessGroup) Connection(org.apache.nifi.connectable.Connection) ResourceNotFoundException(org.apache.nifi.web.ResourceNotFoundException)

Aggregations

StatusHistoryDTO (org.apache.nifi.web.api.dto.status.StatusHistoryDTO)10 RemoteProcessGroup (org.apache.nifi.groups.RemoteProcessGroup)6 ProcessGroup (org.apache.nifi.groups.ProcessGroup)5 VersionedProcessGroup (org.apache.nifi.registry.flow.VersionedProcessGroup)5 ResourceNotFoundException (org.apache.nifi.web.ResourceNotFoundException)4 PermissionsDTO (org.apache.nifi.web.api.dto.PermissionsDTO)4 ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 LinkedHashMap (java.util.LinkedHashMap)2 LinkedHashSet (java.util.LinkedHashSet)2 Connection (org.apache.nifi.connectable.Connection)2 ProcessorNode (org.apache.nifi.controller.ProcessorNode)2 StatusSnapshotDTO (org.apache.nifi.web.api.dto.status.StatusSnapshotDTO)2 URI (java.net.URI)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 TreeMap (java.util.TreeMap)1