/* * Created on 31-Jan-2005 * Created by Paul Gardner * Copyright (C) 2004, 2005, 2006 Aelitis, All Rights Reserved. * * 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 2 * 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * AELITIS, SAS au capital de 46,603.30 euros * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. * */ package com.aelitis.azureus.core.dht.control.impl; import org.gudy.azureus2.core3.util.*; import com.aelitis.azureus.core.dht.control.DHTControlStats; import com.aelitis.azureus.core.dht.db.DHTDBStats; import com.aelitis.azureus.core.dht.router.*; import com.aelitis.azureus.core.dht.transport.*; /** * @author parg * */ public class DHTControlStatsImpl implements DHTTransportFullStats, DHTControlStats { private static final int UPDATE_INTERVAL = 10*1000; private static final int UPDATE_PERIOD = 120; private DHTControlImpl control; private Average packets_in_average = Average.getInstance(UPDATE_INTERVAL, UPDATE_PERIOD ); private Average packets_out_average = Average.getInstance(UPDATE_INTERVAL, UPDATE_PERIOD ); private Average bytes_in_average = Average.getInstance(UPDATE_INTERVAL, UPDATE_PERIOD ); private Average bytes_out_average = Average.getInstance(UPDATE_INTERVAL, UPDATE_PERIOD ); private DHTTransportStats transport_snapshot; private long[] router_snapshot; private int[] value_details_snapshot; protected DHTControlStatsImpl( DHTControlImpl _control ) { control = _control; transport_snapshot = control.getTransport().getStats().snapshot(); router_snapshot = control.getRouter().getStats().getStats(); SimpleTimer.addPeriodicEvent( "DHTCS:update", UPDATE_INTERVAL, new TimerEventPerformer() { public void perform( TimerEvent event ) { update(); control.poke(); } }); } protected void update() { DHTTransport transport = control.getTransport(); DHTTransportStats t_stats = transport.getStats().snapshot(); packets_in_average.addValue( t_stats.getPacketsReceived() - transport_snapshot.getPacketsReceived()); packets_out_average.addValue( t_stats.getPacketsSent() - transport_snapshot.getPacketsSent()); bytes_in_average.addValue( t_stats.getBytesReceived() - transport_snapshot.getBytesReceived()); bytes_out_average.addValue( t_stats.getBytesSent() - transport_snapshot.getBytesSent()); transport_snapshot = t_stats; router_snapshot = control.getRouter().getStats().getStats(); value_details_snapshot = null; } public long getTotalBytesReceived() { return( transport_snapshot.getBytesReceived()); } public long getTotalBytesSent() { return( transport_snapshot.getBytesSent()); } public long getTotalPacketsReceived() { return( transport_snapshot.getPacketsReceived()); } public long getTotalPacketsSent() { return( transport_snapshot.getPacketsSent()); } public long getTotalPingsReceived() { return( transport_snapshot.getPings()[DHTTransportStats.STAT_RECEIVED]); } public long getTotalFindNodesReceived() { return( transport_snapshot.getFindNodes()[DHTTransportStats.STAT_RECEIVED]); } public long getTotalFindValuesReceived() { return( transport_snapshot.getFindValues()[DHTTransportStats.STAT_RECEIVED]); } public long getTotalStoresReceived() { return( transport_snapshot.getStores()[DHTTransportStats.STAT_RECEIVED]); } public long getTotalKeyBlocksReceived() { return( transport_snapshot.getKeyBlocks()[DHTTransportStats.STAT_RECEIVED]); } // averages public long getAverageBytesReceived() { return( bytes_in_average.getAverage()); } public long getAverageBytesSent() { return( bytes_out_average.getAverage()); } public long getAveragePacketsReceived() { return( packets_in_average.getAverage()); } public long getAveragePacketsSent() { return( packets_out_average.getAverage()); } public long getIncomingRequests() { return( transport_snapshot.getIncomingRequests()); } // DB protected int[] getValueDetails() { int[] vd = value_details_snapshot; if ( vd == null ){ vd = control.getDataBase().getStats().getValueDetails(); value_details_snapshot = vd; } return( vd ); } public long getDBValuesStored() { int[] vd = getValueDetails(); return( vd[ DHTDBStats.VD_VALUE_COUNT ]); } public long getDBKeyCount() { return( control.getDataBase().getStats().getKeyCount()); } public long getDBValueCount() { return( control.getDataBase().getStats().getValueCount()); } public long getDBKeysBlocked() { return( control.getDataBase().getStats().getKeyBlockCount()); } public long getDBKeyDivSizeCount() { int[] vd = getValueDetails(); return( vd[ DHTDBStats.VD_DIV_SIZE ]); } public long getDBKeyDivFreqCount() { int[] vd = getValueDetails(); return( vd[ DHTDBStats.VD_DIV_FREQ ]); } public long getDBStoreSize() { return( control.getDataBase().getStats().getSize()); } // Router public long getRouterNodes() { return( router_snapshot[DHTRouterStats.ST_NODES]); } public long getRouterLeaves() { return( router_snapshot[DHTRouterStats.ST_LEAVES]); } public long getRouterContacts() { return( router_snapshot[DHTRouterStats.ST_CONTACTS]); } public long getRouterUptime() { return( control.getRouterUptime()); } public int getRouterCount() { return( control.getRouterCount()); } public String getVersion() { return( Constants.AZUREUS_VERSION ); } public long getEstimatedDHTSize() { return( control.getEstimatedDHTSize()); } public String getString() { return( "transport:" + getTotalBytesReceived() + "," + getTotalBytesSent() + "," + getTotalPacketsReceived() + "," + getTotalPacketsSent() + "," + getTotalPingsReceived() + "," + getTotalFindNodesReceived() + "," + getTotalFindValuesReceived() + "," + getTotalStoresReceived() + "," + getTotalKeyBlocksReceived() + "," + getAverageBytesReceived() + "," + getAverageBytesSent() + "," + getAveragePacketsReceived() + "," + getAveragePacketsSent() + "," + getIncomingRequests() + ",router:" + getRouterNodes() + "," + getRouterLeaves() + "," + getRouterContacts() + ",database:" + getDBKeyCount() + ","+ getDBValueCount() + ","+ getDBValuesStored() + ","+ getDBStoreSize() + ","+ getDBKeyDivFreqCount() + ","+ getDBKeyDivSizeCount() + ","+ getDBKeysBlocked()+ ",version:" + getVersion()+","+ getRouterUptime() + ","+ getRouterCount()); } }