package ch.usi.da.paxos.lab; /* * Copyright (c) 2013 Università della Svizzera italiana (USI) * * This file is part of URingPaxos. * * URingPaxos is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * URingPaxos is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with URingPaxos. If not, see <http://www.gnu.org/licenses/>. */ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class LogParser { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { File file = new File(args[0]); String ring = null; if(args.length > 1){ ring = args[1]; } BufferedReader reader = new BufferedReader(new FileReader(file)); String l; List<Float> msgl = new ArrayList<Float>(); List<Float> mbitl = new ArrayList<Float>(); List<Float> avgl = new ArrayList<Float>(); List<Float> nimsgl = new ArrayList<Float>(); List<Float> nimbitl = new ArrayList<Float>(); List<Float> niavgl = new ArrayList<Float>(); List<Float> nomsgl = new ArrayList<Float>(); List<Float> nombitl = new ArrayList<Float>(); List<Float> noavgl = new ArrayList<Float>(); String latency = null; while((l = reader.readLine()) != null){ if(ring != null && !(l.matches(".*Learner " + ring + " delivered.*") || l.matches(".*TCP " + ring + " .*"))){ continue; } String[] xs = l.split(" "); if(l.contains("delivered")){ // learner throughput float msg = Float.parseFloat(xs[8]); float mbit= Float.parseFloat(xs[10]); float avg = Float.parseFloat(xs[13]); if(msg > 0 && avg > 0 && avg < 4000){ // remove first value msgl.add(msg); mbitl.add(mbit); avgl.add(avg); //System.out.println(msg + "," + mbit + "," + avg); } }else if(l.contains("TCP")){ // TCP float nimsg = Float.parseFloat(xs[8].split("/")[0]); float nimbit= Float.parseFloat(xs[10].split("/")[0]); float niavg = Float.parseFloat(xs[13].split("/")[0]); float nomsg = Float.parseFloat(xs[8].split("/")[1]); float nombit= Float.parseFloat(xs[10].split("/")[1]); float noavg = Float.parseFloat(xs[13].split("/")[1]); if(niavg > 0 && niavg < 4000){ // remove first value nimsgl.add(nimsg); nimbitl.add(nimbit); niavgl.add(niavg); nomsgl.add(nomsg); nombitl.add(nombit); noavgl.add(noavg); //System.out.println(nomsg + "," + nombit + "," + noavg); } }else if (l.contains("latency")){ latency = l.substring(38); break; } } if(msgl.size()>0){ msgl.remove(msgl.size()-1); mbitl.remove(mbitl.size()-1); avgl.remove(avgl.size()-1); System.out.println(file.getAbsolutePath() + " " + avg(msgl) + " " + avg(mbitl) + " " + avgl.get(avgl.size()-1) + " " + (avgl.size()*5) + "s learner " + ring); } if(nimsgl.size()>0){ nimsgl.remove(nimsgl.size()-1); nimbitl.remove(nimbitl.size()-1); niavgl.remove(niavgl.size()-1); nomsgl.remove(nomsgl.size()-1); nombitl.remove(nombitl.size()-1); noavgl.remove(noavgl.size()-1); System.out.println(file.getAbsolutePath() + " " + avg(nimsgl) + " " + avg(nimbitl) + " " + niavgl.get(niavgl.size()-1) + " " + (niavgl.size()*5) + "s TCP " + ring + " IN"); System.out.println(file.getAbsolutePath() + " " + avg(nomsgl) + " " + avg(nombitl) + " " + noavgl.get(noavgl.size()-1) + " " + (noavgl.size()*5) + "s TCP " + ring + " OUT"); } if(latency != null){ System.out.println(file.getAbsolutePath() + " " + latency); } reader.close(); } public static Float avg(List<Float> l){ float a = 0; for(Float f : l){ a = a + f; } return (float)a/l.size(); } }