/******************************************************************************* * gMix open source project - https://svs.informatik.uni-hamburg.de/gmix/ * Copyright (C) 2014 SVS * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. *******************************************************************************/ package staticContent.evaluation.traceParser.statistics; import java.util.Calendar; import staticContent.evaluation.traceParser.engine.Protocol; import staticContent.evaluation.traceParser.engine.dataStructure.Packet; import staticContent.evaluation.traceParser.engine.filter.PacketFilter; import staticContent.evaluation.traceParser.engine.filter.PacketFilterTester; import staticContent.framework.util.Util; public class GeneralPacketStatistics implements PacketFilter { private Packet lastPacket; private long packetCounter = 0; private long[] protocolDistribution = new long[Protocol.values().length]; private double bytesTransferredOnLayerOne = 0.0d; private double bytesTransferredOnLayerTwo = 0.0d; private double bytesTransferredOnLayerThree = 0.0d; private double bytesTransferredOnLayerFour = 0.0d; private Calendar timestampFirstPacket; private long start; //int synToWan = 0; //int syn = 0; @Override public Packet newRecord(Packet packet) { //if (start == 0) // start = System.currentTimeMillis(); packetCounter++; /*if (packetCounter < 10000000) { // TODO: remove if (packet.getTCPflags() == TCPflags.SYN && packet.getLayer3dstAddress().equalsIgnoreCase("80")) { syn++; if (packet.getLayer1dstAddress().equalsIgnoreCase("0015C7568000")) synToWan++; } //System.out.println(packet.getLayer4protocol() +packet.+", src: " +packet.getLayer1srcAddress() +", dst: " +packet.getLayer1dstAddress()); //System.out.println(packet.getLayer1dstAddress()); //System.out.println(packet); //System.out.println(); //0015C7568000 //0015C7568000 //000A4240A800 } if (packetCounter == (10000000 -1)) { double percentage = ((double)synToWan / (double)syn) * 100d; System.out.println("percentage: " +percentage +"%"); }*/ if (packetCounter % 1000000 == 0) System.out.println("read " +packetCounter +" packets so far"); protocolDistribution[packet.getHighestLevelProtocol().ordinal()]++; double layer1size = packet.getLayer1length(); if (layer1size > 0.0d ) bytesTransferredOnLayerOne += layer1size; double layer2size = packet.getLayer2length(); if (layer2size > 0.0d ) bytesTransferredOnLayerTwo += layer2size; double layer3size = packet.getLayer3length(); if (layer3size > 0.0d ) bytesTransferredOnLayerThree += layer3size; double layer4size = packet.getLayer4length(); if (layer4size > 0.0d ) bytesTransferredOnLayerFour += layer4size; if (timestampFirstPacket == null) timestampFirstPacket = packet.getTimestamp(); lastPacket = packet; return packet; } @Override public void finished() { double totalSeconds = (double)(lastPacket.getTimestamp().getTime().getTime() - timestampFirstPacket.getTime().getTime()) / 1000d; System.out.println("finished reading trace file\n"); System.out.println("\nSTATISTICS: "); System.out.println("file was recorded between " +timestampFirstPacket.getTime().toString() +" and " +lastPacket.getTimestamp().getTime().toString()); System.out.println("total packets: " +packetCounter); System.out.println("packets/sec: " +((double)packetCounter)/totalSeconds); System.out.println("avg packet size (layer 1): " +Util.humanReadableByteCount((long)((double)bytesTransferredOnLayerOne/(double)packetCounter), false)); System.out.println("\nbytes transferred on layer 1: " +Util.humanReadableByteCount((long)bytesTransferredOnLayerOne, false) +" (= " +Util.humanReadableByteCount((long)(((double)bytesTransferredOnLayerOne)/totalSeconds), false) +"/sec)"); System.out.println("bytes transferred on layer 2: " +Util.humanReadableByteCount((long)bytesTransferredOnLayerTwo, false) +" (= " +Util.humanReadableByteCount((long)(((double)bytesTransferredOnLayerTwo)/totalSeconds), false) +"/sec)"); System.out.println("bytes transferred on layer 3: " +Util.humanReadableByteCount((long)bytesTransferredOnLayerThree, false) +" (= " +Util.humanReadableByteCount((long)(((double)bytesTransferredOnLayerThree)/totalSeconds), false) +"/sec)"); System.out.println("bytes transferred on layer 4: " +Util.humanReadableByteCount((long)bytesTransferredOnLayerFour, false) +" (= " +Util.humanReadableByteCount((long)(((double)bytesTransferredOnLayerFour)/totalSeconds), false) +"/sec)"); System.out.println("\nprotocol distribution:"); for (int i=0; i<protocolDistribution.length; i++) if (protocolDistribution[i] != 0) System.out.println(protocolDistribution[i] +"x\t" +Protocol.getProtocol(i)); System.out.println("it took " +((float)(System.currentTimeMillis() - start)/1000f) + " seconds to create these statistics"); } /** * Comment * * @param args Not used. */ public static void main(String[] args) { //new PacketFilterTester(new GeneralPacketStatistics(), PacketFilterTester.ERF_TEST_FILE_LONG); ///inputOutput/global/traces/erfTests/auckland10sample new PacketFilterTester(new GeneralPacketStatistics(), "./inputOutput/global/traces/erfTests/auckland10sample/"); //new PacketFilterTester(new GeneralPacketStatistics(), "/Volumes/Traces/auck10/"); // "/Volumes/Traces/auck10/", null); } }