private void addDetail(final StringBuilder sb, final boolean showPhaseDetail) {
        synchronized (filterProgressMonitorList) {
            if (!filterProgressMonitorList.isEmpty()) {
                sb.append("\n\nDETAIL");
                for (final FilterProgressMonitor filterProgressMonitor : filterProgressMonitorList) {
                    final ProcessorFilter filter = filterProgressMonitor.filter;
                    sb.append("\n---\n");
                    sb.append("Filter (");
                    appendFilter(sb, filter);
                    sb.append(")\n");
                    sb.append("Total create time: ");
                    sb.append(filterProgressMonitor.completeDuration);
                    sb.append("\n");
                    sb.append("Initial: ");
                    sb.append(filterProgressMonitor.initialCount);
                    sb.append("\n");
                    sb.append("Added: ");
                    sb.append(filterProgressMonitor.added.get());
                    sb.append("\n");
                    sb.append("Final: ");
                    sb.append(filterProgressMonitor.initialCount +
                              filterProgressMonitor.added.get());

                    // Only show phase detail in trace log.
                    if (showPhaseDetail) {
                        appendPhaseDetails(sb, filterProgressMonitor.phaseDetailsMap.values());
                    }
                }
            }
        }
    }
Holds state relating to the progress of creation of tasks by the master node
stroom-processor/stroom-processor-impl/src/main/java/stroom/processor/impl/ProgressMonitor.java