Search in sources :

Example 1 with StatusSnapshot

use of org.apache.nifi.controller.status.history.StatusSnapshot in project nifi by apache.

the class StatusHistoryEndpointMerger method aggregate.

private List<StatusSnapshotDTO> aggregate(Map<Date, List<StatusSnapshot>> snapshotsToAggregate) {
    // Aggregate the snapshots
    final List<StatusSnapshotDTO> aggregatedSnapshotDtos = new ArrayList<>();
    for (final Map.Entry<Date, List<StatusSnapshot>> entry : snapshotsToAggregate.entrySet()) {
        final List<StatusSnapshot> snapshots = entry.getValue();
        final StatusSnapshot reducedSnapshot = snapshots.get(0).getValueReducer().reduce(snapshots);
        final StatusSnapshotDTO dto = new StatusSnapshotDTO();
        dto.setTimestamp(reducedSnapshot.getTimestamp());
        dto.setStatusMetrics(StatusHistoryUtil.createStatusSnapshotDto(reducedSnapshot).getStatusMetrics());
        aggregatedSnapshotDtos.add(dto);
    }
    return aggregatedSnapshotDtos;
}
Also used : StatusSnapshotDTO(org.apache.nifi.web.api.dto.status.StatusSnapshotDTO) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) TreeMap(java.util.TreeMap) StatusSnapshot(org.apache.nifi.controller.status.history.StatusSnapshot) StandardStatusSnapshot(org.apache.nifi.controller.status.history.StandardStatusSnapshot) Date(java.util.Date)

Example 2 with StatusSnapshot

use of org.apache.nifi.controller.status.history.StatusSnapshot in project nifi by apache.

the class StatusHistoryEndpointMerger method mergeStatusHistories.

private List<StatusSnapshotDTO> mergeStatusHistories(final List<NodeStatusSnapshotsDTO> nodeStatusSnapshots, final Map<String, MetricDescriptor<?>> metricDescriptors) {
    // We want a Map<Date, List<StatusSnapshot>>, which is a Map of "normalized Date" (i.e., a time range, essentially)
    // to all Snapshots for that time. The list will contain one snapshot for each node. However, we can have the case
    // where the NCM has a different value for the componentStatusSnapshotMillis than the nodes have. In this case,
    // we end up with multiple entries in the List<StatusSnapshot> for the same node/timestamp, which skews our aggregate
    // results. In order to avoid this, we will use only the latest snapshot for a node that falls into the the time range
    // of interest.
    // To accomplish this, we have an intermediate data structure, which is a Map of "normalized Date" to an inner Map
    // of Node Identifier to StatusSnapshot. We then will flatten this Map and aggregate the results.
    final Map<Date, Map<String, StatusSnapshot>> dateToNodeSnapshots = new TreeMap<>();
    // group status snapshot's for each node by date
    for (final NodeStatusSnapshotsDTO nodeStatusSnapshot : nodeStatusSnapshots) {
        for (final StatusSnapshotDTO snapshotDto : nodeStatusSnapshot.getStatusSnapshots()) {
            final StatusSnapshot snapshot = createSnapshot(snapshotDto, metricDescriptors);
            final Date normalizedDate = normalizeStatusSnapshotDate(snapshot.getTimestamp(), componentStatusSnapshotMillis);
            Map<String, StatusSnapshot> nodeToSnapshotMap = dateToNodeSnapshots.get(normalizedDate);
            if (nodeToSnapshotMap == null) {
                nodeToSnapshotMap = new HashMap<>();
                dateToNodeSnapshots.put(normalizedDate, nodeToSnapshotMap);
            }
            nodeToSnapshotMap.put(nodeStatusSnapshot.getNodeId(), snapshot);
        }
    }
    // aggregate the snapshots by (normalized) timestamp
    final Map<Date, List<StatusSnapshot>> snapshotsToAggregate = new TreeMap<>();
    for (final Map.Entry<Date, Map<String, StatusSnapshot>> entry : dateToNodeSnapshots.entrySet()) {
        final Date normalizedDate = entry.getKey();
        final Map<String, StatusSnapshot> nodeToSnapshot = entry.getValue();
        final List<StatusSnapshot> snapshotsForTimestamp = new ArrayList<>(nodeToSnapshot.values());
        snapshotsToAggregate.put(normalizedDate, snapshotsForTimestamp);
    }
    final List<StatusSnapshotDTO> aggregatedSnapshots = aggregate(snapshotsToAggregate);
    return aggregatedSnapshots;
}
Also used : NodeStatusSnapshotsDTO(org.apache.nifi.web.api.dto.status.NodeStatusSnapshotsDTO) ArrayList(java.util.ArrayList) TreeMap(java.util.TreeMap) StatusSnapshot(org.apache.nifi.controller.status.history.StatusSnapshot) StandardStatusSnapshot(org.apache.nifi.controller.status.history.StandardStatusSnapshot) Date(java.util.Date) StatusSnapshotDTO(org.apache.nifi.web.api.dto.status.StatusSnapshotDTO) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) TreeMap(java.util.TreeMap)

Aggregations

ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 HashMap (java.util.HashMap)2 LinkedHashMap (java.util.LinkedHashMap)2 List (java.util.List)2 Map (java.util.Map)2 TreeMap (java.util.TreeMap)2 StandardStatusSnapshot (org.apache.nifi.controller.status.history.StandardStatusSnapshot)2 StatusSnapshot (org.apache.nifi.controller.status.history.StatusSnapshot)2 StatusSnapshotDTO (org.apache.nifi.web.api.dto.status.StatusSnapshotDTO)2 NodeStatusSnapshotsDTO (org.apache.nifi.web.api.dto.status.NodeStatusSnapshotsDTO)1