Statistic.java :  » Web-Server » xsocket » org » xsocket » connection » Java Open Source

Java Open Source » Web Server » xsocket 
xsocket » org » xsocket » connection » Statistic.java
package org.xsocket.connection;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

final class Statistic {

  private static final int SECTION_TIMERANGE = 5 * 60 * 1000; 
  
  private final ArrayList<Integer> times = new ArrayList<Integer>();
  private ArrayList<Integer> tempTimes = new ArrayList<Integer>();
  private long lastPrint = System.currentTimeMillis();
  
  private long lastSection = System.currentTimeMillis();

  private Timer timer = new Timer(true);
  private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
  
  private boolean firstPrint = true;
  
  public Statistic() {
    try {
      TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
          System.out.println(print());
        }
      };
      
      timer.schedule(timerTask, 5000, 5000);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  
  private String printHeader() {
    return "time; throughput; min; max; average; median; p75; p90; p95; p99";
  }

  
  
  public synchronized void addValue(int value) {
    times.add(value);
    tempTimes.add(value);
  }
  
  
  @SuppressWarnings("unchecked")
  String print() {
    StringBuilder sb = new StringBuilder();
    
    ArrayList<Integer> copy = (ArrayList<Integer>) times.clone();
    Collections.sort(copy);
    
    int sum = 0;
    for (Integer i : copy) {
      sum += i;
    }

    if (firstPrint) {
      firstPrint = false;
      System.out.println("\r\n" + printHeader());
    }
    
    
    sb.append(dateFormat.format(new Date())  + "; ");

    ArrayList<Integer> tempTimesCopy = tempTimes;
    tempTimes = new ArrayList<Integer>();
    long elapsed = System.currentTimeMillis() - lastPrint;
    lastPrint = System.currentTimeMillis();
    sb.append(((tempTimesCopy.size() * 1000) / elapsed) + "; ");
    
    
    if (copy.size() > 0) {
      sb.append(copy.get(0) + "; ");
      sb.append(copy.get(copy.size() - 1) + "; ");
      sb.append((sum / copy.size()) + "; ");
      sb.append(copy.get(copy.size() / 2) + "; ");
      sb.append(copy.get((int) (copy.size() * 0.75)) + "; ");
      sb.append(copy.get((int) (copy.size() * 0.9)) + "; ");
      sb.append(copy.get((int) (copy.size() * 0.95)) + "; ");
      sb.append(copy.get((int) (copy.size() * 0.99)));
    }

    if (System.currentTimeMillis() > (lastSection + SECTION_TIMERANGE)) {
      lastSection = System.currentTimeMillis();
      times.clear();
      sb.append("\r\n\r\n");
      sb.append(printHeader());
    }
    
    return sb.toString();
  }
  
}

java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.