DIR : /home/kozerus/public_html/dgs/scripts/analyze-weblogs/CountUrls.java
/home/kozerus/public_html/dgs/scripts/analyze-weblogs
// vi:set et ts=4:
// input: "YYYY-MM-DD hh:mm:ss url status size response_time_micros"
// Description: counts number of requests and response-time, sort by response-time
import java.io.*;
import java.util.*;
import java.util.regex.*;
class CountUrls {
public static float perc(long value, long sum) {
float result = (float) Math.floor((float)value / (float)sum * 10000) / 100;
return result;
}
static class Data {
public long cnt;
public long rtime;
public Data(long rtime) {
this.cnt = 1;
this.rtime = rtime;
}
public void inc(long rtime) {
this.cnt++;
this.rtime += rtime;
}
}
static class ValueComp implements Comparator<String> {
private Map<String,Data> map;
public ValueComp(Map<String,Data> map) {
this.map = map;
}
public int compare(String url1, String url2) {
Data data1 = this.map.get(url1);
Data data2 = this.map.get(url2);
return -Long.valueOf(data1.rtime).compareTo(data2.rtime);
}
}
private static final Map<String,Data> MAP = new LinkedHashMap<String,Data>();
public static void main(String[] args) throws Exception {
long DBG = 0;
String line;
long cnt = 0, timeall = 0;
int lcnt = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while ( (line = br.readLine()) != null ) {
lcnt++;
// input: "YYYY-MM-DD hh:mm:ss url status size response_time_micros"
String[] arr = line.split("\\s+");
if (arr == null || arr.length != 6) {
System.err.println("Skipping bad pattern found in #line "+lcnt+": ["+line+"]");
continue;
}
String url = arr[2];
int status = Integer.valueOf(arr[3]);
int size = Integer.valueOf(arr[4]);
long time = Long.valueOf(arr[5]); // [micro-secs]
cnt++;
timeall += time;
inc(url, time);
}
ValueComp comparator = new ValueComp(MAP);
Map<String,Data> sortMAP = new TreeMap<String,Data>(comparator);
sortMAP.putAll(MAP);
System.out.println();
System.out.println(" COUNT TIME URL");
for ( Map.Entry<String,Data> e : sortMAP.entrySet() ) {
Data data = e.getValue();
print( e.getKey(), data.cnt, data.rtime, cnt, timeall );
}
print( "TOTAL", cnt, timeall, cnt, timeall );
System.out.println();
System.out.println();
}
public static void inc( String url, long rtime ) {
Data data = MAP.get(url);
if ( data == null ) {
data = new Data(rtime);
MAP.put(url, data);
} else {
data.inc(rtime);
}
}
public static void print( String url, long cnt, long time, long cntall, long timeall ) {
StringBuilder buf = new StringBuilder();
Formatter formatter = new Formatter(buf, Locale.US);
formatter.format("%,10d (%6.2f%%) %,16d (%6.2f%%) %s", cnt, perc(cnt,cntall), time, perc(time,timeall), url);
System.out.println(buf.toString());
}
}
//
koh5_pano
Drag mouse to navigate.
Navigation
- Left/Right Mouse drag: Changes camera heading.
- Up/Sown Mouse drag: Changes camera pitch.
- Scroll wheel: Changes camera field of view.
- I-Key: Displays Info panel with canvas size, image size and FPS.
17.Aug.2010, Martin Wengenmayer