Search in sources :

Example 11 with DHT

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();
                }
            });
        }
    }
}
Also used : DHT(com.biglybt.core.dht.DHT) DHTTransportStats(com.biglybt.core.dht.transport.DHTTransportStats)

Example 12 with DHT

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();
    }
}
Also used : PluginManager(com.biglybt.pif.PluginManager) DHT(com.biglybt.core.dht.DHT) HashMap(java.util.HashMap) PluginInterface(com.biglybt.pif.PluginInterface) DHTPlugin(com.biglybt.plugin.dht.DHTPlugin) HashMap(java.util.HashMap) Map(java.util.Map) DHTTransportStats(com.biglybt.core.dht.transport.DHTTransportStats)

Example 13 with DHT

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);
    }
}
Also used : DHT(com.biglybt.core.dht.DHT) PluginInterface(com.biglybt.pif.PluginInterface) DHTPlugin(com.biglybt.plugin.dht.DHTPlugin)

Example 14 with DHT

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);
    }
}
Also used : DHT(com.biglybt.core.dht.DHT) PluginInterface(com.biglybt.pif.PluginInterface) DHTControlActivity(com.biglybt.core.dht.control.DHTControlActivity) DHTPlugin(com.biglybt.plugin.dht.DHTPlugin) DHTControlListener(com.biglybt.core.dht.control.DHTControlListener)

Example 15 with DHT

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);
}
Also used : InetSocketAddress(java.net.InetSocketAddress) Inet6Address(java.net.Inet6Address) DHT(com.biglybt.core.dht.DHT) DHTTransportContact(com.biglybt.core.dht.transport.DHTTransportContact) InetAddress(java.net.InetAddress) Session(com.biglybt.plugin.net.netstatus.NetStatusProtocolTesterBT.Session)

Aggregations

DHT (com.biglybt.core.dht.DHT)16 PluginInterface (com.biglybt.pif.PluginInterface)7 DHTPlugin (com.biglybt.plugin.dht.DHTPlugin)7 DHTTransportContact (com.biglybt.core.dht.transport.DHTTransportContact)5 DHTNATPuncher (com.biglybt.core.dht.nat.DHTNATPuncher)4 InetSocketAddress (java.net.InetSocketAddress)4 DHTTransportStats (com.biglybt.core.dht.transport.DHTTransportStats)3 Inet6Address (java.net.Inet6Address)3 InetAddress (java.net.InetAddress)3 Map (java.util.Map)3 HashMap (java.util.HashMap)2 ParameterListener (com.biglybt.core.config.ParameterListener)1 DHTListener (com.biglybt.core.dht.DHTListener)1 DHTLogger (com.biglybt.core.dht.DHTLogger)1 DHTControlActivity (com.biglybt.core.dht.control.DHTControlActivity)1 DHTControlContact (com.biglybt.core.dht.control.DHTControlContact)1 DHTControlListener (com.biglybt.core.dht.control.DHTControlListener)1 DHTControlStats (com.biglybt.core.dht.control.DHTControlStats)1 DHTDBStats (com.biglybt.core.dht.db.DHTDBStats)1 DHTNATPuncherListener (com.biglybt.core.dht.nat.DHTNATPuncherListener)1