simulator/src/main/java/com/hazelcast/simulator/utils/HistogramLogProcessor.java
@Override
    public void run() {
        PrintStream timeIntervalLog = null;
        PrintStream histogramPercentileLog = System.out;
        Double firstStartTime = 0.0;
        boolean timeIntervalLogLegendWritten = false;

        if (config.listTags) {
            Set<String> tags = new TreeSet<String>();
            EncodableHistogram histogram;
            boolean nullTagFound = false;
            while ((histogram = getIntervalHistogram()) != null) {
                String tag = histogram.getTag();
                if (tag != null) {
                    tags.add(histogram.getTag());
                } else {
                    nullTagFound = true;
                }
            }
            System.out.println("Tags found in input file: ");
            if (nullTagFound) {
                System.out.println("[NO TAG (default)]");
            }
            for (String tag : tags) {
                System.out.println(tag);
            }
            // listtags does nothing other than list tags:
            return;
        }

        final String logFormat = buildLogFormat(config.logFormatCsv);

        try {
            if (config.outputFileName != null) {
                try {
                    timeIntervalLog = new PrintStream(new FileOutputStream(config.outputFileName), false, "UTF-8");
                    outputTimeRange(timeIntervalLog, "Interval percentile log");
                } catch (FileNotFoundException ex) {
                    System.err.println("Failed to open output file " + config.outputFileName);
                } catch (UnsupportedEncodingException e) {
                    System.err.println("Unsupported encoding: UTF-8");
                }
                String hgrmOutputFileName = config.outputFileName + ".hgrm";
                try {
                    histogramPercentileLog = new PrintStream(new FileOutputStream(hgrmOutputFileName), false, "UTF-8");
                    outputTimeRange(histogramPercentileLog, "Overall percentile distribution");
                } catch (FileNotFoundException ex) {
                    System.err.println("Failed to open percentiles histogram output file " + hgrmOutputFileName);
                } catch (UnsupportedEncodingException e) {
                    System.err.println("Unsupported encoding: UTF-8");
                }
            }

            EncodableHistogram intervalHistogram = getIntervalHistogram(config.tag);

            Histogram accumulatedRegularHistogram = null;
            DoubleHistogram accumulatedDoubleHistogram = null;

            if (intervalHistogram != null) {
                // Shape the accumulated histogram like the histograms in the log file (but clear their contents):
                if (intervalHistogram instanceof DoubleHistogram) {
                    accumulatedDoubleHistogram = ((DoubleHistogram) intervalHistogram).copy();
                    accumulatedDoubleHistogram.reset();
                    accumulatedDoubleHistogram.setAutoResize(true);
                } else {
                    accumulatedRegularHistogram = ((Histogram) intervalHistogram).copy();
                    accumulatedRegularHistogram.reset();
                    accumulatedRegularHistogram.setAutoResize(true);
                }
            }

            while (intervalHistogram != null) {
                if (intervalHistogram instanceof DoubleHistogram) {
                    if (accumulatedDoubleHistogram == null) {
                        throw new IllegalStateException("Encountered a DoubleHistogram line in a log of Histograms.");
                    }
                    accumulatedDoubleHistogram.add((DoubleHistogram) intervalHistogram);
                } else {
                    if (accumulatedRegularHistogram == null) {
                        throw new IllegalStateException("Encountered a Histogram line in a log of DoubleHistograms.");
                    }
                    accumulatedRegularHistogram.add((Histogram) intervalHistogram);
                }

                if ((firstStartTime == 0.0) && (logReader.getStartTimeSec() != 0.0)) {
                    firstStartTime = logReader.getStartTimeSec();

                    outputStartTime(histogramPercentileLog, firstStartTime);

                    if (timeIntervalLog != null) {
                        outputStartTime(timeIntervalLog, firstStartTime);
                    }
                }

                if (timeIntervalLog != null) {
                    if (!timeIntervalLogLegendWritten) {
                        timeIntervalLogLegendWritten = true;
                        timeIntervalLog.println(buildLegend(config.logFormatCsv));
                    }

                    Object[] statistics = intervalHistogram instanceof DoubleHistogram
                            ? buildDoubleHistogramStatistics((DoubleHistogram) intervalHistogram, accumulatedDoubleHistogram)
                            : buildRegularHistogramStatistics((Histogram) intervalHistogram, accumulatedRegularHistogram);

                    timeIntervalLog.format(Locale.US, logFormat, statistics);
                }

                intervalHistogram = getIntervalHistogram(config.tag);
            }

            if (accumulatedDoubleHistogram != null) {
                accumulatedDoubleHistogram.outputPercentileDistribution(histogramPercentileLog,
                        config.percentilesOutputTicksPerHalf, config.outputValueUnitRatio, config.logFormatCsv);
            } else {
                if (accumulatedRegularHistogram == null) {
                    // If there were no histograms in the log file, we still need an empty histogram for the
                    // one line output (shape/range doesn't matter because it is empty):
                    accumulatedRegularHistogram = new Histogram(1000000L, 2);
                }
                accumulatedRegularHistogram.outputPercentileDistribution(histogramPercentileLog,
                        config.percentilesOutputTicksPerHalf, config.outputValueUnitRatio, config.logFormatCsv);
            }
        } finally {
            if (config.outputFileName != null) {
                closeQuietly(timeIntervalLog);
                closeQuietly(histogramPercentileLog);
            }
        }
    }
@Override
    public void run() {
        PrintStream timeIntervalLog = null;
        PrintStream histogramPercentileLog = System.out;
        Double firstStartTime = 0.0;
        boolean timeIntervalLogLegendWritten = false;

        if (config.listTags) {
            Set<String> tags = new TreeSet<String>();
            EncodableHistogram histogram;
            boolean nullTagFound = false;
            while ((histogram = getIntervalHistogram()) != null) {
                String tag = histogram.getTag();
                if (tag != null) {
                    tags.add(histogram.getTag());
                } else {
                    nullTagFound = true;
                }
            }
            System.out.println("Tags found in input file: ");
            if (nullTagFound) {
                System.out.println("[NO TAG (default)]");
            }
            for (String tag : tags) {
                System.out.println(tag);
            }
            // listtags does nothing other than list tags:
            return;
        }

        final String logFormat = buildLogFormat(config.logFormatCsv);

        try {
            if (config.outputFileName != null) {
                try {
                    timeIntervalLog = new PrintStream(new FileOutputStream(config.outputFileName), false, "UTF-8");
                    outputTimeRange(timeIntervalLog, "Interval percentile log");
                } catch (FileNotFoundException ex) {
                    System.err.println("Failed to open output file " + config.outputFileName);
                } catch (UnsupportedEncodingException e) {
                    System.err.println("Unsupported encoding: UTF-8");
                }
                String hgrmOutputFileName = config.outputFileName + ".hgrm";
                try {
                    histogramPercentileLog = new PrintStream(new FileOutputStream(hgrmOutputFileName), false, "UTF-8");
                    outputTimeRange(histogramPercentileLog, "Overall percentile distribution");
                } catch (FileNotFoundException ex) {
                    System.err.println("Failed to open percentiles histogram output file " + hgrmOutputFileName);
                } catch (UnsupportedEncodingException e) {
                    System.err.println("Unsupported encoding: UTF-8");
                }
            }

            EncodableHistogram intervalHistogram = getIntervalHistogram(config.tag);

            Histogram accumulatedRegularHistogram = null;
            DoubleHistogram accumulatedDoubleHistogram = null;

            if (intervalHistogram != null) {
                // Shape the accumulated histogram like the histograms in the log file (but clear their contents):
                if (intervalHistogram instanceof DoubleHistogram) {
                    accumulatedDoubleHistogram = ((DoubleHistogram) intervalHistogram).copy();
                    accumulatedDoubleHistogram.reset();
                    accumulatedDoubleHistogram.setAutoResize(true);
                } else {
                    accumulatedRegularHistogram = ((Histogram) intervalHistogram).copy();
                    accumulatedRegularHistogram.reset();
                    accumulatedRegularHistogram.setAutoResize(true);
                }
            }

            while (intervalHistogram != null) {
                if (intervalHistogram instanceof DoubleHistogram) {
                    if (accumulatedDoubleHistogram == null) {
                        throw new IllegalStateException("Encountered a DoubleHistogram line in a log of Histograms.");
                    }
                    accumulatedDoubleHistogram.add((DoubleHistogram) intervalHistogram);
                } else {
                    if (accumulatedRegularHistogram == null) {
                        throw new IllegalStateException("Encountered a Histogram line in a log of DoubleHistograms.");
                    }
                    accumulatedRegularHistogram.add((Histogram) intervalHistogram);
                }

                if ((firstStartTime == 0.0) && (logReader.getStartTimeSec() != 0.0)) {
                    firstStartTime = logReader.getStartTimeSec();

                    outputStartTime(histogramPercentileLog, firstStartTime);

                    if (timeIntervalLog != null) {
                        outputStartTime(timeIntervalLog, firstStartTime);
                    }
                }

                if (timeIntervalLog != null) {
                    if (!timeIntervalLogLegendWritten) {
                        timeIntervalLogLegendWritten = true;
                        timeIntervalLog.println(buildLegend(config.logFormatCsv));
                    }

                    Object[] statistics = intervalHistogram instanceof DoubleHistogram
                            ? buildDoubleHistogramStatistics((DoubleHistogram) intervalHistogram, accumulatedDoubleHistogram)
                            : buildRegularHistogramStatistics((Histogram) intervalHistogram, accumulatedRegularHistogram);

                    timeIntervalLog.format(Locale.US, logFormat, statistics);
                }

                intervalHistogram = getIntervalHistogram(config.tag);
            }

            if (accumulatedDoubleHistogram != null) {
                accumulatedDoubleHistogram.outputPercentileDistribution(histogramPercentileLog,
                        config.percentilesOutputTicksPerHalf, config.outputValueUnitRatio, config.logFormatCsv);
            } else {
                if (accumulatedRegularHistogram == null) {
                    // If there were no histograms in the log file, we still need an empty histogram for the
                    // one line output (shape/range doesn't matter because it is empty):
                    accumulatedRegularHistogram = new Histogram(1000000L, 2);
                }
                accumulatedRegularHistogram.outputPercentileDistribution(histogramPercentileLog,
                        config.percentilesOutputTicksPerHalf, config.outputValueUnitRatio, config.logFormatCsv);
            }
        } finally {
            if (config.outputFileName != null) {
                closeQuietly(timeIntervalLog);
                closeQuietly(histogramPercentileLog);
            }
        }
    }
@ Override public void run ( ) { PrintStream timeIntervalLog = null ; PrintStream histogramPercentileLog = System . out ; Double firstStartTime = 0.0 ; boolean timeIntervalLogLegendWritten = false ; if ( config . listTags ) { Set < String > tags = new TreeSet < String > ( ) ; EncodableHistogram histogram ; boolean nullTagFound = false ; while ( ( histogram = getIntervalHistogram ( ) ) != null ) { String tag = histogram . getTag ( ) ; if ( tag != null ) { tags . add ( histogram . getTag ( ) ) ; } else { nullTagFound = true ; } } System . out . println ( "Tags found in input file: " ) ; if ( nullTagFound ) { System . out . println ( "[NO TAG (default)]" ) ; } for ( String tag : tags ) { System . out . println ( tag ) ; } // listtags does nothing other than list tags: return ; } final String logFormat = buildLogFormat ( config . logFormatCsv ) ; try { if ( config . outputFileName != null ) { try { timeIntervalLog = new PrintStream ( new FileOutputStream ( config . outputFileName ) , false , "UTF-8" ) ; outputTimeRange ( timeIntervalLog , "Interval percentile log" ) ; } catch ( FileNotFoundException ex ) { System . err . println ( "Failed to open output file " + config . outputFileName ) ; } catch ( UnsupportedEncodingException e ) { System . err . println ( "Unsupported encoding: UTF-8" ) ; } String hgrmOutputFileName = config . outputFileName + ".hgrm" ; try { histogramPercentileLog = new PrintStream ( new FileOutputStream ( hgrmOutputFileName ) , false , "UTF-8" ) ; outputTimeRange ( histogramPercentileLog , "Overall percentile distribution" ) ; } catch ( FileNotFoundException ex ) { System . err . println ( "Failed to open percentiles histogram output file " + hgrmOutputFileName ) ; } catch ( UnsupportedEncodingException e ) { System . err . println ( "Unsupported encoding: UTF-8" ) ; } } EncodableHistogram intervalHistogram = getIntervalHistogram ( config . tag ) ; Histogram accumulatedRegularHistogram = null ; DoubleHistogram accumulatedDoubleHistogram = null ; if ( intervalHistogram != null ) { // Shape the accumulated histogram like the histograms in the log file (but clear their contents): if ( intervalHistogram instanceof DoubleHistogram ) { accumulatedDoubleHistogram = ( ( DoubleHistogram ) intervalHistogram ) . copy ( ) ; accumulatedDoubleHistogram . reset ( ) ; accumulatedDoubleHistogram . setAutoResize ( true ) ; } else { accumulatedRegularHistogram = ( ( Histogram ) intervalHistogram ) . copy ( ) ; accumulatedRegularHistogram . reset ( ) ; accumulatedRegularHistogram . setAutoResize ( true ) ; } } while ( intervalHistogram != null ) { if ( intervalHistogram instanceof DoubleHistogram ) { if ( accumulatedDoubleHistogram == null ) { throw new IllegalStateException ( "Encountered a DoubleHistogram line in a log of Histograms." ) ; } accumulatedDoubleHistogram . add ( ( DoubleHistogram ) intervalHistogram ) ; } else { if ( accumulatedRegularHistogram == null ) { throw new IllegalStateException ( "Encountered a Histogram line in a log of DoubleHistograms." ) ; } accumulatedRegularHistogram . add ( ( Histogram ) intervalHistogram ) ; } if ( ( firstStartTime == 0.0 ) && ( logReader . getStartTimeSec ( ) != 0.0 ) ) { firstStartTime = logReader . getStartTimeSec ( ) ; outputStartTime ( histogramPercentileLog , firstStartTime ) ; if ( timeIntervalLog != null ) { outputStartTime ( timeIntervalLog , firstStartTime ) ; } } if ( timeIntervalLog != null ) { if ( ! timeIntervalLogLegendWritten ) { timeIntervalLogLegendWritten = true ; timeIntervalLog . println ( buildLegend ( config . logFormatCsv ) ) ; } Object [ ] statistics = intervalHistogram instanceof DoubleHistogram ? buildDoubleHistogramStatistics ( ( DoubleHistogram ) intervalHistogram , accumulatedDoubleHistogram ) : buildRegularHistogramStatistics ( ( Histogram ) intervalHistogram , accumulatedRegularHistogram ) ; timeIntervalLog . format ( Locale . US , logFormat , statistics ) ; } intervalHistogram = getIntervalHistogram ( config . tag ) ; } if ( accumulatedDoubleHistogram != null ) { accumulatedDoubleHistogram . outputPercentileDistribution ( histogramPercentileLog , config . percentilesOutputTicksPerHalf , config . outputValueUnitRatio , config . logFormatCsv ) ; } else { if ( accumulatedRegularHistogram == null ) { // If there were no histograms in the log file, we still need an empty histogram for the // one line output (shape/range doesn't matter because it is empty): accumulatedRegularHistogram = new Histogram ( 1000000L , 2 ) ; } accumulatedRegularHistogram . outputPercentileDistribution ( histogramPercentileLog , config . percentilesOutputTicksPerHalf , config . outputValueUnitRatio , config . logFormatCsv ) ; } } finally { if ( config . outputFileName != null ) { closeQuietly ( timeIntervalLog ) ; closeQuietly ( histogramPercentileLog ) ; } } }
Run the log processor with the currently provided arguments.
Run the log processor with the currently provided arguments .