net.i2p.router.peermanager
Class PeerProfile

java.lang.Object
  extended by net.i2p.router.peermanager.PeerProfile

public class PeerProfile
extends java.lang.Object


Constructor Summary
PeerProfile(RouterContext context, Hash peer)
           
PeerProfile(RouterContext context, Hash peer, boolean expand)
           
 
Method Summary
 void coalesceStats()
          update the stats and rates (this should be called once a minute)
(package private)  void dataPushed(int size)
           
(package private)  void dataPushed1m(int size)
          the tunnel pushed that much data in a 1 minute period
 boolean equals(java.lang.Object obj)
           
 void expandProfile()
          When the given peer is performing well enough that we want to keep detailed stats on them again, call this to set up the info we dropped during shrinkProfile.
 double getCapacityBonus()
          extra factor added to the capacity ranking - this can be updated in the profile written to disk to affect how the algorithm ranks capacity.
 double getCapacityValue()
          How many tunnels do we think this peer can handle over the next hour?
 RateStat getCommError()
          how long between communication errors with the peer (disconnection, etc), calculated over a 1 minute, 1 hour, and 1 day period
 DBHistory getDBHistory()
          history of db activity with the peer
 RateStat getDbIntroduction()
          how many new peers we get from dbSearchReplyMessages or dbStore messages, calculated over a 1 hour, 1 day, and 1 week period
 RateStat getDbResponseTime()
          how long it takes to get a db response from the peer (in milliseconds), calculated over a 1 minute, 1 hour, and 1 day period
 long getFirstHeardAbout()
          when did we first hear about this peer?
 long getIntegrationBonus()
          extra factor added to the integration ranking - this can be updated in the profile written to disk to affect how the algorithm ranks integration.
 double getIntegrationValue()
          How well integrated into the network is this peer (as measured by how much they've told us that we didn't already know).
 boolean getIsActive()
          Is this peer active at the moment (sending/receiving messages within the last 5 minutes)
 boolean getIsActive(long period)
          Is this peer active at the moment (sending/receiving messages within the given period?)
 boolean getIsExpanded()
          are we keeping an expanded profile on the peer, or just the bare minimum.
 boolean getIsFailing()
          is this peer actively failing (aka not worth touching)?
 long getLastHeardAbout()
          when did we last hear about this peer?
 long getLastHeardFrom()
          when did we last hear from the peer?
 long getLastSendFailed()
          when did we last have a problem sending to this peer?
 long getLastSendSuccessful()
          when did we last send to this peer successfully?
 double getOldSpeedValue()
           
 double getPeakThroughputKBps()
           
 double getPeakTunnel1mThroughputKBps()
           
 double getPeakTunnelThroughputKBps()
           
 Hash getPeer()
          what peer is being profiled
 RateStat getReceiveSize()
          how large received messages are, calculated over a 1 minute, 1 hour, and 1 day period
 long getReliabilityBonus()
          extra factor added to the reliability ranking - this can be updated in the profile written to disk to affect how the algorithm ranks reliability.
 double getReliabilityValue()
          How likely are they to stay up and pass on messages over the next few minutes.
 RateStat getSendFailureSize()
          how large messages that could not be sent were, calculated over a 1 minute, 1 hour, and 1 day period
 RateStat getSendSuccessSize()
          how large successfully sent messages are, calculated over a 1 minute, 1 hour, and 1 day period
 long getSpeedBonus()
          extra factor added to the speed ranking - this can be updated in the profile written to disk to affect how the algorithm ranks speed.
 double getSpeedValue()
          How fast is the peer, taking into consideration both throughput and latency.
 RateStat getTunnelCreateResponseTime()
          how long it takes to get a tunnel create response from the peer (in milliseconds), calculated over a 1 minute, 1 hour, and 1 day period
 TunnelHistory getTunnelHistory()
          history of tunnel activity with the peer
 RateStat getTunnelTestResponseTime()
          how long it takes to successfully test a tunnel this peer participates in (in milliseconds), calculated over a 10 minute, 1 hour, and 1 day period
 RateStat getTunnelTestResponseTimeSlow()
          how long it takes to successfully test the peer (in milliseconds) when the time exceeds 5s
 double getTunnelTestTimeAverage()
           
 int hashCode()
           
 int incrementShitlists()
           
static void main(java.lang.String[] args)
          Read in all of the profiles specified and print out their calculated values.
static void main2(java.lang.String[] args)
          Calculate the memory consumption of profiles.
 void setCapacityBonus(long bonus)
           
 void setDBHistory(DBHistory hist)
           
 void setFirstHeardAbout(long when)
           
 void setIntegrationBonus(long bonus)
           
(package private)  void setIsFailing(boolean val)
           
 void setLastHeardAbout(long when)
           
 void setLastHeardFrom(long when)
           
 void setLastSendFailed(long when)
           
 void setLastSendSuccessful(long when)
           
 void setPeakThroughputKBps(double kBps)
           
 void setPeakTunnel1mThroughputKBps(double kBps)
           
 void setPeakTunnelThroughputKBps(double kBps)
           
 void setPeer(Hash peer)
           
 void setReliabilityBonus(long bonus)
           
 void setSpeedBonus(long bonus)
           
 void setTunnelHistory(TunnelHistory history)
           
(package private)  void setTunnelTestTimeAverage(double avg)
           
 void shrinkProfile()
          when the given peer is performing so poorly that we don't want to bother keeping extensive stats on them, call this to discard excess data points.
 java.lang.String toString()
           
(package private)  void tunnelDataTransferred(long tunnelByteLifetime)
          the tunnel pushed that much data in its lifetime
 void unshitlist()
           
(package private)  void updateTunnelTestTimeAverage(long ms)
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PeerProfile

public PeerProfile(RouterContext context,
                   Hash peer)

PeerProfile

public PeerProfile(RouterContext context,
                   Hash peer,
                   boolean expand)
Method Detail

getPeer

public Hash getPeer()
what peer is being profiled


setPeer

public void setPeer(Hash peer)

getIsExpanded

public boolean getIsExpanded()
are we keeping an expanded profile on the peer, or just the bare minimum. If we aren't keeping the expanded profile, all of the rates as well as the TunnelHistory and DBHistory will not be available.


incrementShitlists

public int incrementShitlists()

unshitlist

public void unshitlist()

getIsActive

public boolean getIsActive()
Is this peer active at the moment (sending/receiving messages within the last 5 minutes)


getIsActive

public boolean getIsActive(long period)
Is this peer active at the moment (sending/receiving messages within the given period?)


getFirstHeardAbout

public long getFirstHeardAbout()
when did we first hear about this peer?


setFirstHeardAbout

public void setFirstHeardAbout(long when)

getLastHeardAbout

public long getLastHeardAbout()
when did we last hear about this peer?


setLastHeardAbout

public void setLastHeardAbout(long when)

getLastSendSuccessful

public long getLastSendSuccessful()
when did we last send to this peer successfully?


setLastSendSuccessful

public void setLastSendSuccessful(long when)

getLastSendFailed

public long getLastSendFailed()
when did we last have a problem sending to this peer?


setLastSendFailed

public void setLastSendFailed(long when)

getLastHeardFrom

public long getLastHeardFrom()
when did we last hear from the peer?


setLastHeardFrom

public void setLastHeardFrom(long when)

getTunnelHistory

public TunnelHistory getTunnelHistory()
history of tunnel activity with the peer


setTunnelHistory

public void setTunnelHistory(TunnelHistory history)

getDBHistory

public DBHistory getDBHistory()
history of db activity with the peer


setDBHistory

public void setDBHistory(DBHistory hist)

getSendSuccessSize

public RateStat getSendSuccessSize()
how large successfully sent messages are, calculated over a 1 minute, 1 hour, and 1 day period


getSendFailureSize

public RateStat getSendFailureSize()
how large messages that could not be sent were, calculated over a 1 minute, 1 hour, and 1 day period


getReceiveSize

public RateStat getReceiveSize()
how large received messages are, calculated over a 1 minute, 1 hour, and 1 day period


getDbResponseTime

public RateStat getDbResponseTime()
how long it takes to get a db response from the peer (in milliseconds), calculated over a 1 minute, 1 hour, and 1 day period


getTunnelCreateResponseTime

public RateStat getTunnelCreateResponseTime()
how long it takes to get a tunnel create response from the peer (in milliseconds), calculated over a 1 minute, 1 hour, and 1 day period


getTunnelTestResponseTime

public RateStat getTunnelTestResponseTime()
how long it takes to successfully test a tunnel this peer participates in (in milliseconds), calculated over a 10 minute, 1 hour, and 1 day period


getTunnelTestResponseTimeSlow

public RateStat getTunnelTestResponseTimeSlow()
how long it takes to successfully test the peer (in milliseconds) when the time exceeds 5s


getCommError

public RateStat getCommError()
how long between communication errors with the peer (disconnection, etc), calculated over a 1 minute, 1 hour, and 1 day period


getDbIntroduction

public RateStat getDbIntroduction()
how many new peers we get from dbSearchReplyMessages or dbStore messages, calculated over a 1 hour, 1 day, and 1 week period


getSpeedBonus

public long getSpeedBonus()
extra factor added to the speed ranking - this can be updated in the profile written to disk to affect how the algorithm ranks speed. Negative values are penalties


setSpeedBonus

public void setSpeedBonus(long bonus)

getReliabilityBonus

public long getReliabilityBonus()
extra factor added to the reliability ranking - this can be updated in the profile written to disk to affect how the algorithm ranks reliability. Negative values are penalties


setReliabilityBonus

public void setReliabilityBonus(long bonus)

getCapacityBonus

public double getCapacityBonus()
extra factor added to the capacity ranking - this can be updated in the profile written to disk to affect how the algorithm ranks capacity. Negative values are penalties


setCapacityBonus

public void setCapacityBonus(long bonus)

getIntegrationBonus

public long getIntegrationBonus()
extra factor added to the integration ranking - this can be updated in the profile written to disk to affect how the algorithm ranks integration. Negative values are penalties


setIntegrationBonus

public void setIntegrationBonus(long bonus)

getSpeedValue

public double getSpeedValue()
How fast is the peer, taking into consideration both throughput and latency. This may even be made to take into consideration current rates vs. estimated (or measured) max rates, allowing this speed to reflect the speed /available/.


getOldSpeedValue

public double getOldSpeedValue()

getReliabilityValue

public double getReliabilityValue()
How likely are they to stay up and pass on messages over the next few minutes. Positive numbers means more likely, negative numbers means its probably not even worth trying.


getCapacityValue

public double getCapacityValue()
How many tunnels do we think this peer can handle over the next hour?


getIntegrationValue

public double getIntegrationValue()
How well integrated into the network is this peer (as measured by how much they've told us that we didn't already know). Higher numbers means better integrated


getIsFailing

public boolean getIsFailing()
is this peer actively failing (aka not worth touching)?


getTunnelTestTimeAverage

public double getTunnelTestTimeAverage()

setTunnelTestTimeAverage

void setTunnelTestTimeAverage(double avg)

updateTunnelTestTimeAverage

void updateTunnelTestTimeAverage(long ms)

getPeakThroughputKBps

public double getPeakThroughputKBps()

setPeakThroughputKBps

public void setPeakThroughputKBps(double kBps)

dataPushed

void dataPushed(int size)

tunnelDataTransferred

void tunnelDataTransferred(long tunnelByteLifetime)
the tunnel pushed that much data in its lifetime


getPeakTunnelThroughputKBps

public double getPeakTunnelThroughputKBps()

setPeakTunnelThroughputKBps

public void setPeakTunnelThroughputKBps(double kBps)

dataPushed1m

void dataPushed1m(int size)
the tunnel pushed that much data in a 1 minute period


getPeakTunnel1mThroughputKBps

public double getPeakTunnel1mThroughputKBps()

setPeakTunnel1mThroughputKBps

public void setPeakTunnel1mThroughputKBps(double kBps)

shrinkProfile

public void shrinkProfile()
when the given peer is performing so poorly that we don't want to bother keeping extensive stats on them, call this to discard excess data points. Specifically, this drops the rates, the tunnelHistory, and the dbHistory.


expandProfile

public void expandProfile()
When the given peer is performing well enough that we want to keep detailed stats on them again, call this to set up the info we dropped during shrinkProfile. This will not however overwrite any existing data, so it can be safely called repeatedly


coalesceStats

public void coalesceStats()
update the stats and rates (this should be called once a minute)


setIsFailing

void setIsFailing(boolean val)

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object

equals

public boolean equals(java.lang.Object obj)
Overrides:
equals in class java.lang.Object

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

main2

public static void main2(java.lang.String[] args)
Calculate the memory consumption of profiles. Measured to be ~3739 bytes for an expanded profile, and ~212 bytes for a compacted one.


main

public static void main(java.lang.String[] args)
Read in all of the profiles specified and print out their calculated values. Usage:
  PeerProfile [filename]*