private void serializeProcessorStatus(final JsonArrayBuilder arrayBuilder, final JsonBuilderFactory factory, final ProcessorStatus status, final DateFormat df, final String hostname, final String applicationName, final String platform, final String parentId, final Date currentDate) { final JsonObjectBuilder builder = factory.createObjectBuilder(); final String componentType = "Processor"; final String componentName = status.getName(); if (componentMatchesFilters(componentType, componentName)) { addCommonFields(builder, df, hostname, applicationName, platform, parentId, currentDate, componentType, componentName); addField(builder, "componentId", status.getId()); addField(builder, "processorType", status.getType()); addField(builder, "averageLineageDurationMS", status.getAverageLineageDuration()); addField(builder, "bytesRead", status.getBytesRead()); addField(builder, "bytesWritten", status.getBytesWritten()); addField(builder, "bytesReceived", status.getBytesReceived()); addField(builder, "bytesSent", status.getBytesSent()); addField(builder, "flowFilesRemoved", status.getFlowFilesRemoved()); addField(builder, "flowFilesReceived", status.getFlowFilesReceived()); addField(builder, "flowFilesSent", status.getFlowFilesSent()); addField(builder, "inputCount", status.getInputCount()); addField(builder, "inputBytes", status.getInputBytes()); addField(builder, "outputCount", status.getOutputCount()); addField(builder, "outputBytes", status.getOutputBytes()); addField(builder, "activeThreadCount", status.getActiveThreadCount()); addField(builder, "invocations", status.getInvocations()); addField(builder, "processingNanos", status.getProcessingNanos()); arrayBuilder.add(builder.build()); } }
public static ComponentDetails forProcessor(final ProcessorStatus status) { return forProcessor(status.getId(), status.getGroupId(), status.getName(), status.getType()); }
public Map<String, Double> getProcessorMetrics(ProcessorStatus status) { final Map<String, Double> metrics = new HashMap<>(); metrics.put(MetricNames.FLOW_FILES_RECEIVED, new Double(status.getInputCount())); metrics.put(MetricNames.FLOW_FILES_SENT, new Double(status.getOutputCount())); metrics.put(MetricNames.BYTES_READ, new Double(status.getInputBytes())); metrics.put(MetricNames.BYTES_WRITTEN, new Double(status.getOutputBytes())); metrics.put(MetricNames.ACTIVE_THREADS, new Double(status.getActiveThreadCount())); metrics.put(MetricNames.TOTAL_TASK_DURATION, new Double(status.getProcessingNanos())); return metrics; }
final String input = processorStatus.getInputCount() + " / " + FormatUtils.formatDataSize(processorStatus.getInputBytes()); final String output = processorStatus.getOutputCount() + " / " + FormatUtils.formatDataSize(processorStatus.getOutputBytes()); final String read = FormatUtils.formatDataSize(processorStatus.getBytesRead()); final String written = FormatUtils.formatDataSize(processorStatus.getBytesWritten()); final String invocations = String.valueOf(processorStatus.getInvocations()); final long nanos = processorStatus.getProcessingNanos(); final String procTime = FormatUtils.formatHoursMinutesSeconds(nanos, TimeUnit.NANOSECONDS); if (processorStatus.getRunStatus() != null) { runStatus = processorStatus.getRunStatus().toString(); final ProcessorStatus lastStatus = lastProcessorStatus.get(processorStatus.getId()); if (showDeltas && lastStatus != null) { inputDiff = toDiff(lastStatus.getInputCount(), lastStatus.getInputBytes(), processorStatus.getInputCount(), processorStatus.getInputBytes()); outputDiff = toDiff(lastStatus.getOutputCount(), lastStatus.getOutputBytes(), processorStatus.getOutputCount(), processorStatus.getOutputBytes()); readDiff = toDiff(lastStatus.getBytesRead(), processorStatus.getBytesRead(), true, false); writtenDiff = toDiff(lastStatus.getBytesWritten(), processorStatus.getBytesWritten(), true, false); invocationsDiff = toDiff(lastStatus.getInvocations(), processorStatus.getInvocations()); procTimeDiff = toDiff(lastStatus.getProcessingNanos(), processorStatus.getProcessingNanos(), false, true); } else { inputDiff = toDiff(0L, 0L, processorStatus.getInputCount(), processorStatus.getInputBytes()); outputDiff = toDiff(0L, 0L, processorStatus.getOutputCount(), processorStatus.getOutputBytes()); readDiff = toDiff(0L, processorStatus.getBytesRead(), true, false); writtenDiff = toDiff(0L, processorStatus.getBytesWritten(), true, false); invocationsDiff = toDiff(0L, processorStatus.getInvocations()); procTimeDiff = toDiff(0L, processorStatus.getProcessingNanos(), false, true); processorStatus.getName(),
mergedProcessorMap.put(status.getId(), status); ProcessorStatus merged = mergedProcessorMap.get(statusToMerge.getId()); if (merged == null) { mergedProcessorMap.put(statusToMerge.getId(), statusToMerge.clone()); continue; merged.setActiveThreadCount(merged.getActiveThreadCount() + statusToMerge.getActiveThreadCount()); merged.setTerminatedThreadCount(merged.getTerminatedThreadCount() + statusToMerge.getTerminatedThreadCount()); merged.setBytesRead(merged.getBytesRead() + statusToMerge.getBytesRead()); merged.setBytesWritten(merged.getBytesWritten() + statusToMerge.getBytesWritten()); merged.setInputBytes(merged.getInputBytes() + statusToMerge.getInputBytes()); merged.setInputCount(merged.getInputCount() + statusToMerge.getInputCount()); merged.setInvocations(merged.getInvocations() + statusToMerge.getInvocations()); merged.setOutputBytes(merged.getOutputBytes() + statusToMerge.getOutputBytes()); merged.setOutputCount(merged.getOutputCount() + statusToMerge.getOutputCount()); merged.setProcessingNanos(merged.getProcessingNanos() + statusToMerge.getProcessingNanos()); merged.setFlowFilesRemoved(merged.getFlowFilesRemoved() + statusToMerge.getFlowFilesRemoved()); if (RunStatus.Validating.equals(statusToMerge.getRunStatus())) { merged.setRunStatus(RunStatus.Validating); } else if (RunStatus.Invalid.equals(statusToMerge.getRunStatus())) { merged.setRunStatus(RunStatus.Invalid);
public ProcessorStatusDTO createProcessorStatusDto(final ProcessorStatus procStatus) { final ProcessorStatusDTO dto = new ProcessorStatusDTO(); dto.setId(procStatus.getId()); dto.setGroupId(procStatus.getGroupId()); dto.setName(procStatus.getName()); dto.setStatsLastRefreshed(new Date()); dto.setRunStatus(procStatus.getRunStatus().toString()); final ProcessorStatusSnapshotDTO snapshot = new ProcessorStatusSnapshotDTO(); dto.setAggregateSnapshot(snapshot); snapshot.setId(procStatus.getId()); snapshot.setGroupId(procStatus.getGroupId()); snapshot.setName(procStatus.getName()); snapshot.setFlowFilesOut(procStatus.getOutputCount()); snapshot.setBytesOut(procStatus.getOutputBytes()); snapshot.setFlowFilesIn(procStatus.getInputCount()); snapshot.setBytesIn(procStatus.getInputBytes()); snapshot.setBytesRead(procStatus.getBytesRead()); snapshot.setBytesWritten(procStatus.getBytesWritten()); snapshot.setTaskCount(procStatus.getInvocations()); snapshot.setTasksDurationNanos(procStatus.getProcessingNanos()); snapshot.setTasksDuration(FormatUtils.formatHoursMinutesSeconds(procStatus.getProcessingNanos(), TimeUnit.NANOSECONDS)); // determine the run status snapshot.setRunStatus(procStatus.getRunStatus().toString()); snapshot.setExecutionNode(procStatus.getExecutionNode().toString()); snapshot.setActiveThreadCount(procStatus.getActiveThreadCount()); snapshot.setTerminatedThreadCount(procStatus.getTerminatedThreadCount()); snapshot.setType(procStatus.getType()); StatusMerger.updatePrettyPrintedFields(snapshot); return dto; }
static ProcessorStatusBean parseProcessorStatusRequest(ProcessorStatus inputProcessorStatus, String statusTypes, FlowController flowController, Collection<ValidationResult> validationResults) { ProcessorStatusBean processorStatusBean = new ProcessorStatusBean(); processorStatusBean.setId(inputProcessorStatus.getId()); processorStatusBean.setName(inputProcessorStatus.getName()); .sourceIdMatches(inputProcessorStatus.getId()) .build()); ProcessorHealth processorHealth = new ProcessorHealth(); processorHealth.setRunStatus(inputProcessorStatus.getRunStatus().name()); processorHealth.setHasBulletins(!bulletinList.isEmpty()); processorHealth.setValidationErrorList(transformValidationResults(validationResults)); ProcessorStats processorStats = new ProcessorStats(); processorStats.setActiveThreads(inputProcessorStatus.getActiveThreadCount()); processorStats.setFlowfilesReceived(inputProcessorStatus.getFlowFilesReceived()); processorStats.setBytesRead(inputProcessorStatus.getBytesRead()); processorStats.setBytesWritten(inputProcessorStatus.getBytesWritten()); processorStats.setFlowfilesSent(inputProcessorStatus.getFlowFilesSent()); processorStats.setInvocations(inputProcessorStatus.getInvocations()); processorStats.setProcessingNanos(inputProcessorStatus.getProcessingNanos());
processorStatusCollection.add(procStat); activeGroupThreads += procStat.getActiveThreadCount(); terminatedGroupThreads += procStat.getTerminatedThreadCount(); bytesRead += procStat.getBytesRead(); bytesWritten += procStat.getBytesWritten(); flowFilesReceived += procStat.getFlowFilesReceived(); bytesReceived += procStat.getBytesReceived(); flowFilesSent += procStat.getFlowFilesSent(); bytesSent += procStat.getBytesSent();
@Override public int compare(final ProcessorStatus o1, final ProcessorStatus o2) { if (o1 == null && o2 == null) { return 0; } if (o1 == null) { return 1; } if (o2 == null) { return -1; } return -Long.compare(o1.getProcessingNanos(), o2.getProcessingNanos()); } });
public void addProcessor(ProcessorStatus p) { processors.put(p.getId(), p); }
public String getProcessComponentName(String componentId, Supplier<String> unknown) { return isProcessor(componentId) ? getProcessors().get(componentId).getName() : isRootInputPort(componentId) ? getRootInputPorts().get(componentId).getName() : isRootOutputPort(componentId) ? getRootOutputPorts().get(componentId).getName() : unknown.get(); }
private static <E> Map<String, E> transformStatusCollection(Collection<E> statusCollection) { Map<String, E> statusMap = new HashMap<>(); for (E status : statusCollection) { if (status instanceof ProcessorStatus) { statusMap.put(((ProcessorStatus) status).getId(), status); if (((ProcessorStatus) status).getName() != null) { statusMap.put(((ProcessorStatus) status).getName(), status); } } else if (status instanceof ConnectionStatus) { statusMap.put(((ConnectionStatus) status).getId(), status); if (((ConnectionStatus) status).getName() != null) { statusMap.put(((ConnectionStatus) status).getName(), status); } } else if (status instanceof RemoteProcessGroupStatus) { statusMap.put(((RemoteProcessGroupStatus) status).getId(), status); if (((RemoteProcessGroupStatus) status).getName() != null) { statusMap.put(((RemoteProcessGroupStatus) status).getName(), status); } } } return statusMap; }
private static long calculateTaskMillis(final ProcessGroupStatus status) { long nanos = 0L; for (final ProcessorStatus procStatus : status.getProcessorStatus()) { nanos += procStatus.getProcessingNanos(); } for (final ProcessGroupStatus childStatus : status.getProcessGroupStatus()) { nanos += calculateTaskMillis(childStatus); } return TimeUnit.MILLISECONDS.convert(nanos, TimeUnit.NANOSECONDS); } }
/** * Gets the status for the specified processor. * * @param processorId processor id * @return the status for the specified processor */ public ProcessorStatus getProcessorStatus(final String processorId) { final ProcessGroup root = getRootGroup(); final ProcessorNode processor = root.findProcessor(processorId); // ensure the processor was found if (processor == null) { throw new ResourceNotFoundException(String.format("Unable to locate processor with id '%s'.", processorId)); } // calculate the process group status final String groupId = processor.getProcessGroup().getIdentifier(); final ProcessGroupStatus processGroupStatus = flowController.getEventAccess().getGroupStatus(groupId, NiFiUserUtils.getNiFiUser(), 1); if (processGroupStatus == null) { throw new ResourceNotFoundException(String.format("Unable to locate group with id '%s'.", groupId)); } final ProcessorStatus status = processGroupStatus.getProcessorStatus().stream().filter(processorStatus -> processorId.equals(processorStatus.getId())).findFirst().orElse(null); if (status == null) { throw new ResourceNotFoundException(String.format("Unable to locate processor with id '%s'.", processorId)); } return status; }
for (final ProcessorStatus processorStatus : processorStatuses) { updateMetrics(metricsService.getProcessorMetrics(processorStatus), Optional.of(processorStatus.getName()), defaultTags);
private void serializeProcessorStatus(final JsonArrayBuilder arrayBuilder, final JsonBuilderFactory factory, final ProcessorStatus status, final DateFormat df, final String hostname, final String applicationName, final String platform, final String parentId, final Date currentDate) { final JsonObjectBuilder builder = factory.createObjectBuilder(); final String componentType = "Processor"; final String componentName = status.getName(); if (componentMatchesFilters(componentType, componentName)) { addCommonFields(builder, df, hostname, applicationName, platform, parentId, currentDate, componentType, componentName); addField(builder, "componentId", status.getId()); addField(builder, "processorType", status.getType()); addField(builder, "averageLineageDurationMS", status.getAverageLineageDuration()); addField(builder, "bytesRead", status.getBytesRead()); addField(builder, "bytesWritten", status.getBytesWritten()); addField(builder, "bytesReceived", status.getBytesReceived()); addField(builder, "bytesSent", status.getBytesSent()); addField(builder, "flowFilesRemoved", status.getFlowFilesRemoved()); addField(builder, "flowFilesReceived", status.getFlowFilesReceived()); addField(builder, "flowFilesSent", status.getFlowFilesSent()); addField(builder, "inputCount", status.getInputCount()); addField(builder, "inputBytes", status.getInputBytes()); addField(builder, "outputCount", status.getOutputCount()); addField(builder, "outputBytes", status.getOutputBytes()); addField(builder, "activeThreadCount", status.getActiveThreadCount()); addField(builder, "invocations", status.getInvocations()); addField(builder, "processingNanos", status.getProcessingNanos()); arrayBuilder.add(builder.build()); } }
protected long calculateProcessingNanos(final ProcessGroupStatus status) { long nanos = 0L; for (final ProcessorStatus procStats : status.getProcessorStatus()) { nanos += procStats.getProcessingNanos(); } for (final ProcessGroupStatus childGroupStatus : status.getProcessGroupStatus()) { nanos += calculateProcessingNanos(childGroupStatus); } return nanos; }
final PermissionsDTO operatePermissions = createPermissionsDto(new OperationAuthorizable(procNode)); final ProcessorStatusDTO status = getComponentStatus( () -> groupStatus.getProcessorStatus().stream().filter(processorStatus -> procNode.getIdentifier().equals(processorStatus.getId())).findFirst().orElse(null), processorStatus -> createProcessorStatusDto(processorStatus) );