@Override public void add(final SampleResult res) { Calculator row = tableRows.computeIfAbsent(res.getSampleLabel(useGroupName.isSelected()), label -> { Calculator newRow = new Calculator(label); newRows.add(newRow); return newRow; }); /* * Synch is needed because multiple threads can update the counts. */ synchronized (row) { row.addSample(res); } Calculator tot = tableRows.get(TOTAL_ROW_LABEL); synchronized (lock) { tot.addSample(res); } dataChanged = true; }
public void log() { StringBuffer buff = new StringBuffer(); buff.append(name).append(", "); buff.append(previous.getCount()).append(", "); buff.append(previous.getRate()).append(", "); buff.append(previous.getMin()).append(", "); buff.append(previous.getMax()).append(", "); buff.append(previous.getMean()).append(", "); buff.append(previous.getTotalBytes()).append(", "); buff.append(previous.getStandardDeviation()).append(", "); buff.append(previous.getErrorPercentage()).append(", "); buff.append(previous.getAvgPageBytes()).append(", "); buff.append(previous.getBytesPerSecond()).append(", "); buff.append(previous.getKBPerSecond()).append(", "); logger.info(buff.toString()); } }
protected synchronized void updateTextFields(SampleResult res) { noSamplesField.setText(Long.toString(calc.getCount())); if(res.getSampleCount() > 0) { dataField.setText(Long.toString(res.getTime()/res.getSampleCount())); } else { dataField.setText("0"); } averageField.setText(Long.toString((long) calc.getMean())); deviationField.setText(Long.toString((long) calc.getStandardDeviation())); }
/** * Add details for a sample result, which may consist of multiple samples. * Updates the number of bytes read and sent, error count, startTime and elapsedTime * @param res the sample result; might represent multiple values */ public void addSample(SampleResult res) { addBytes(res.getBytesAsLong()); addSentBytes(res.getSentBytes()); addValue(res.getTime(),res.getSampleCount()); errors+=res.getErrorCount(); // account for multiple samples if (startTime == 0){ // not yet initialised startTime=res.getStartTime(); } else { startTime = Math.min(startTime, res.getStartTime()); } elapsedTime = Math.max(elapsedTime, res.getEndTime()-startTime); }
public void moveDelta() { previous = delta; delta = new Calculator(name); }
/** * Sent Throughput in kilobytes / second * * @return Sent Throughput in kilobytes / second */ public double getKBPerSecond() { return getBytesPerSecond() / 1024; // 1024=bytes per kb }
@Monitor(name = "SampleCount", type = DataSourceType.GAUGE) public int getCount() { return previous.getCount(); }
@Monitor(name = "StandardDeviation", type = DataSourceType.GAUGE) public double getStandardDeviation() { return previous.getStandardDeviation(); }
@Monitor(name = "Mean", type = DataSourceType.GAUGE) public double getMean() { return previous.getMean(); }
public void sampleOccurred(SampleEvent e) { if (e.getResult() == null || e.getResult() == null) return; SampleResult s = e.getResult(); long now = System.currentTimeMillis();// in seconds AbstractRunningSampleWrapper totals; synchronized (allTests) { String label = s.getSampleLabel(); if ((totals = allTests.get(label)) == null) { totals = newRunningSampleWrapper(label); totals.start(); allTests.put(label, totals); } } synchronized (totals) { totals.delta.addSample(s); if ((now > totals.totalUpdated + INTERVAL)) { totals.moveDelta(); totals.totalUpdated = now; totals.log(); } } }
@Override public synchronized void clearData() { synchronized (calc) { model.clearData(); calc.clear(); newRows.clear(); noSamplesField.setText("0"); // $NON-NLS-1$ dataField.setText("0"); // $NON-NLS-1$ averageField.setText("0"); // $NON-NLS-1$ deviationField.setText("0"); // $NON-NLS-1$ } repaint(); }
public AbstractRunningSampleWrapper(String name) { this.name = name; this.delta = new Calculator(name); logHeader(); }
@Monitor(name = "BytesPerSecond", type = DataSourceType.GAUGE) public double getBytesPerSecond() { return previous.getBytesPerSecond(); }
/** * Clears this visualizer and its model, and forces a repaint of the table. */ @Override public void clearData() { //Synch is needed because a clear can occur while add occurs synchronized (lock) { model.clearData(); newRows.clear(); tableRows.clear(); tableRows.put(TOTAL_ROW_LABEL, new Calculator(TOTAL_ROW_LABEL)); model.addRow(tableRows.get(TOTAL_ROW_LABEL)); } dataChanged = true; }