use of com.biglybt.core.dht.DHT in project BiglyBT by BiglySoftware.
the class LongTermStatsImpl method sessionStart.
private void sessionStart() {
OverallStatsImpl stats = (OverallStatsImpl) StatsFactory.getStats();
synchronized (this) {
if (closing) {
return;
}
boolean enabled = COConfigurationManager.getBooleanParameter("long.term.stats.enable");
if (active || !enabled) {
return;
}
active = true;
long[] snap = stats.getLastSnapshot();
ss_d_received = gm_stats.getTotalDataBytesReceived();
ss_p_received = gm_stats.getTotalProtocolBytesReceived();
ss_d_sent = gm_stats.getTotalDataBytesSent();
ss_p_sent = gm_stats.getTotalProtocolBytesSent();
ss_dht_sent = 0;
ss_dht_received = 0;
if (core.isStarted()) {
DHT[] dhts = getDHTs();
if (dhts != null) {
for (DHT dht : dhts) {
DHTTransportStats dht_stats = dht.getTransport().getStats();
ss_dht_sent += dht_stats.getBytesSent();
ss_dht_received += dht_stats.getBytesReceived();
}
}
}
st_p_sent = snap[0] + (ss_p_sent - snap[6]);
st_d_sent = snap[1] + (ss_d_sent - snap[7]);
st_p_received = snap[2] + (ss_p_received - snap[8]);
st_d_received = snap[3] + (ss_d_received - snap[9]);
st_dht_sent = snap[4] + (ss_dht_sent - snap[10]);
st_dht_received = snap[5] + (ss_dht_received - snap[11]);
write(RT_SESSION_START, new long[] { st_p_sent, st_d_sent, st_p_received, st_d_received, st_dht_sent, st_dht_received });
if (event == null) {
// should always be null but hey ho
event = SimpleTimer.addPeriodicEvent("LongTermStats", MIN_IN_MILLIS, new TimerEventPerformer() {
@Override
public void perform(TimerEvent event) {
if (destroyed) {
event.cancel();
return;
}
updateStats();
}
});
}
}
}
use of com.biglybt.core.dht.DHT in project BiglyBT by BiglySoftware.
the class OverallStatsImpl method updateStats.
private void updateStats(boolean force) {
try {
this_mon.enter();
long current_time = SystemTime.getCurrentTime() / 1000;
if (current_time < lastUptime) {
// time went backwards
lastUptime = current_time;
return;
}
long current_total_d_received = gm_stats.getTotalDataBytesReceived();
long current_total_p_received = gm_stats.getTotalProtocolBytesReceived();
long current_total_d_sent = gm_stats.getTotalDataBytesSent();
long current_total_p_sent = gm_stats.getTotalProtocolBytesSent();
long current_total_received = current_total_d_received + current_total_p_received;
long current_total_sent = current_total_d_sent + current_total_p_sent;
// overall totals
totalDownloaded += current_total_received - lastDownloaded;
lastDownloaded = current_total_received;
if (totalDownloaded < 0)
totalDownloaded = 0;
totalUploaded += current_total_sent - lastUploaded;
lastUploaded = current_total_sent;
if (totalUploaded < 0)
totalUploaded = 0;
// split totals
totalDataDownloaded += current_total_d_received - lastDataDownloaded;
lastDataDownloaded = current_total_d_received;
if (totalDataDownloaded < 0)
totalDataDownloaded = 0;
totalProtocolDownloaded += current_total_p_received - lastProtocolDownloaded;
lastProtocolDownloaded = current_total_p_received;
if (totalProtocolDownloaded < 0)
totalProtocolDownloaded = 0;
totalDataUploaded += current_total_d_sent - lastDataUploaded;
lastDataUploaded = current_total_d_sent;
if (totalDataUploaded < 0)
totalDataUploaded = 0;
totalProtocolUploaded += current_total_p_sent - lastProtocolUploaded;
lastProtocolUploaded = current_total_p_sent;
if (totalProtocolUploaded < 0)
totalProtocolUploaded = 0;
if (dhts == null) {
try {
PluginManager pm = core.getPluginManager();
if (pm.isInitialized()) {
PluginInterface dht_pi = pm.getPluginInterfaceByClass(DHTPlugin.class);
if (dht_pi == null) {
dhts = new DHT[0];
} else {
DHTPlugin plugin = (DHTPlugin) dht_pi.getPlugin();
if (!plugin.isInitialising()) {
if (plugin.isEnabled()) {
dhts = ((DHTPlugin) dht_pi.getPlugin()).getDHTs();
} else {
dhts = new DHT[0];
}
}
}
}
} catch (Throwable e) {
dhts = new DHT[0];
}
}
long current_total_dht_up = 0;
long current_total_dht_down = 0;
if (dhts != null) {
for (DHT dht : dhts) {
DHTTransportStats stats = dht.getTransport().getStats();
current_total_dht_up += stats.getBytesSent();
current_total_dht_down += stats.getBytesReceived();
}
}
totalDHTUploaded += current_total_dht_up - lastDHTUploaded;
lastDHTUploaded = current_total_dht_up;
if (totalDHTUploaded < 0)
totalDHTUploaded = 0;
totalDHTDownloaded += current_total_dht_down - lastDHTDownloaded;
lastDHTDownloaded = current_total_dht_down;
if (totalDHTDownloaded < 0)
totalDHTDownloaded = 0;
// TIME
long delta = current_time - lastUptime;
if (delta > 100 || delta < 0) {
// make sure the time diff isn't borked
lastUptime = current_time;
return;
}
if (totalUptime < 0)
totalUptime = 0;
totalUptime += delta;
lastUptime = current_time;
lastSnapshot = new long[] { totalProtocolUploaded, totalDataUploaded, totalProtocolDownloaded, totalDataDownloaded, totalDHTUploaded, totalDHTDownloaded, current_total_p_sent, current_total_d_sent, current_total_p_received, current_total_d_received, current_total_dht_up, current_total_dht_down };
HashMap overallMap = new HashMap();
overallMap.put("downloaded", new Long(totalDownloaded));
overallMap.put("uploaded", new Long(totalUploaded));
overallMap.put("uptime", new Long(totalUptime));
overallMap.put("mark_time", new Long(markTime));
overallMap.put("mark_downloaded", new Long(markTotalDownloaded));
overallMap.put("mark_uploaded", new Long(markTotalUploaded));
overallMap.put("mark_uptime", new Long(markTotalUptime));
overallMap.put("dht_down", new Long(totalDHTDownloaded));
overallMap.put("dht_up", new Long(totalDHTUploaded));
overallMap.put("p_uploaded", new Long(totalProtocolUploaded));
overallMap.put("d_uploaded", new Long(totalDataUploaded));
overallMap.put("p_downloaded", new Long(totalProtocolDownloaded));
overallMap.put("d_downloaded", new Long(totalDataDownloaded));
Map map = new HashMap();
map.put("all", overallMap);
tick_count++;
if (force || tick_count % SAVE_TICKS == 0) {
save(map);
}
} finally {
this_mon.exit();
}
}
use of com.biglybt.core.dht.DHT in project BiglyBT by BiglySoftware.
the class DHTOpsView method init.
private void init(Core core) {
try {
PluginInterface dht_pi = core.getPluginManager().getPluginInterfaceByClass(DHTPlugin.class);
if (dht_pi == null) {
if (drawPanel != null) {
drawPanel.setUnavailable();
}
return;
}
DHTPlugin dht_plugin = (DHTPlugin) dht_pi.getPlugin();
DHT[] dhts = dht_plugin.getDHTs();
for (int i = 0; i < dhts.length; i++) {
if (dhts[i].getTransport().getNetwork() == dht_type) {
dht = dhts[i];
break;
}
}
if (drawPanel != null) {
if (dht != null) {
drawPanel.setID(String.valueOf(dht.getTransport().getNetwork()));
}
if (dht == null && !dht_plugin.isInitialising()) {
drawPanel.setUnavailable();
}
}
if (dht == null) {
return;
}
} catch (Exception e) {
Debug.printStackTrace(e);
}
}
use of com.biglybt.core.dht.DHT in project BiglyBT by BiglySoftware.
the class DHTView method init.
private void init(Core core) {
try {
PluginInterface dht_pi = core.getPluginManager().getPluginInterfaceByClass(DHTPlugin.class);
if (dht_pi == null) {
return;
}
DHT[] dhts = ((DHTPlugin) dht_pi.getPlugin()).getDHTs();
for (int i = 0; i < dhts.length; i++) {
if (dhts[i].getTransport().getNetwork() == dht_type) {
dht = dhts[i];
break;
}
}
if (dht == null) {
return;
}
controlListener = new DHTControlListener() {
@Override
public void activityChanged(DHTControlActivity activity, int type) {
activityChanged = true;
}
};
dht.getControl().addListener(controlListener);
} catch (Exception e) {
Debug.printStackTrace(e);
}
}
use of com.biglybt.core.dht.DHT in project BiglyBT by BiglySoftware.
the class NetStatusProtocolTester method runTest.
public NetStatusProtocolTesterBT runTest(String test_address, final NetStatusProtocolTesterListener listener) {
NetStatusProtocolTesterBT bt_tester = createTester(listener);
try {
if (test_address.length() == 0) {
DHT[] dhts = dht_plugin.getDHTs();
DHT target_dht = null;
InetAddress bind_ip = NetworkAdmin.getSingleton().getSingleHomedServiceBindAddress();
int target_network;
if (bind_ip instanceof Inet6Address && !bind_ip.isAnyLocalAddress()) {
target_network = DHT.NW_AZ_MAIN_V6;
} else {
target_network = Constants.isCVSVersion() ? DHT.NW_AZ_CVS : DHT.NW_AZ_MAIN;
}
for (int i = 0; i < dhts.length; i++) {
if (dhts[i].getTransport().getNetwork() == target_network) {
target_dht = dhts[i];
break;
}
}
if (target_dht == null && dhts.length > 0) {
target_dht = dhts[0];
target_network = target_dht.getTransport().getNetwork();
}
if (target_dht == null) {
listener.logError("Distributed database unavailable");
} else {
DHTTransportContact[] contacts = target_dht.getTransport().getReachableContacts();
final List f_contacts = new ArrayList(Arrays.asList(contacts));
final int[] ok = new int[] { 0 };
final int num_threads = Math.min(BT_MAX_SLAVES, contacts.length);
listener.log("Searching " + contacts.length + " contacts for " + num_threads + " test targets", false);
final AESemaphore sem = new AESemaphore("NetStatusProbe");
for (int i = 0; i < num_threads; i++) {
new AEThread2("NetStatusProbe", true) {
@Override
public void run() {
try {
while (!bt_tester.isDestroyed()) {
DHTTransportContact contact = null;
synchronized (ok) {
if (ok[0] < num_threads && f_contacts.size() > 0) {
contact = (DHTTransportContact) f_contacts.remove(0);
}
}
if (contact == null) {
break;
}
try {
DistributedDatabaseContact ddb_contact = ddb.importContact(contact.getAddress());
if (tryTest(bt_tester, ddb_contact)) {
synchronized (ok) {
ok[0]++;
}
}
} catch (Throwable e) {
listener.logError("Contact import for " + contact.getName() + " failed", e);
}
}
} finally {
sem.release();
}
}
}.start();
}
for (int i = 0; i < num_threads; i++) {
sem.reserve();
}
listener.log("Searching complete, " + ok[0] + " targets found", false);
}
} else {
String[] bits = test_address.split(":");
if (bits.length != 2) {
log("Invalid address - use <host>:<port> ");
return (bt_tester);
}
InetSocketAddress address = new InetSocketAddress(bits[0].trim(), Integer.parseInt(bits[1].trim()));
DistributedDatabaseContact contact = ddb.importContact(address);
tryTest(bt_tester, contact);
}
} catch (Throwable e) {
listener.logError("Test failed", e);
} finally {
bt_tester.addListener(new NetStatusProtocolTesterListener() {
@Override
public void sessionAdded(Session session) {
}
@Override
public void complete(NetStatusProtocolTesterBT tester) {
removeFromActive(tester);
}
@Override
public void log(String str, boolean detailed) {
}
@Override
public void logError(String str) {
}
@Override
public void logError(String str, Throwable e) {
}
});
bt_tester.setOutboundConnectionsComplete();
new DelayedEvent("NetStatus:killer", 10 * 1000, new AERunnable() {
@Override
public void runSupport() {
listener.log("Destroying tester", false);
bt_tester.destroy();
}
});
}
return (bt_tester);
}
Aggregations