Changeset fa6643c


Ignore:
Timestamp:
Dec 19, 2015 10:06:00 PM (4 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
0b94d86
Parents:
d0eaf4d
Message:

Sybil tool: Fix NPE
Add old version points
Add lookup fail rate points

File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java

    rd0eaf4d rfa6643c  
    2929import net.i2p.router.tunnel.pool.TunnelPool;
    3030import net.i2p.router.util.HashDistance;
     31import net.i2p.stat.Rate;
     32import net.i2p.stat.RateAverages;
     33import net.i2p.stat.RateStat;
    3134import net.i2p.util.Log;
    3235import net.i2p.util.ObjectCounter;
     
    6366    private static final double OUR_KEY_FACTOR = 4.0;
    6467    private static final double MIN_DISPLAY_POINTS = 3.0;
     68    private static final double VERSION_FACTOR = 1.0;
    6569
    6670    public SybilRenderer(RouterContext ctx) {
     
    239243        // Profile analysis
    240244        addProfilePoints(ris, points);
     245        addVersionPoints(ris, points);
    241246
    242247        if (!points.isEmpty()) {
     
    246251            for (Hash h : warns) {
    247252                RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h);
    248                 if (h == null)
     253                if (ri == null)
    249254                    continue;
    250255                Points pp = points.get(h);
     
    601606    private static final long DAY = 24*60*60*1000L;
    602607
    603     private void addProfilePoints(List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
     608    private void addProfilePoints(List<RouterInfo> ris, Map<Hash, Points> points) {
    604609        long now = _context.clock().now();
     610        RateAverages ra = RateAverages.getTemp();
    605611        for (RouterInfo info : ris) {
    606612            Hash h = info.getHash();
     
    617623                    }
    618624                }
    619             }
     625                DBHistory dbh = prof.getDBHistory();
     626                if (dbh != null) {
     627                    RateStat rs = dbh.getFailedLookupRate();
     628                    if (rs != null) {
     629                        Rate r = rs.getRate(24*60*60*1000);
     630                        if (r != null) {
     631                            r.computeAverages(ra, false);
     632                            if (ra.getTotalEventCount() > 0) {
     633                                double avg = 100 * ra.getAverage();
     634                                if (avg > 40)
     635                                    addPoints(points, h, (avg - 40) / 6.0, "Lookup fail rate " + ((int) avg) + '%');
     636                            }
     637                        }
     638                    }
     639                }
     640            }
     641        }
     642    }
     643
     644    private void addVersionPoints(List<RouterInfo> ris, Map<Hash, Points> points) {
     645        RouterInfo us = _context.router().getRouterInfo();
     646        if (us == null) return;
     647        String ourVer = us.getVersion();
     648        if (!ourVer.startsWith("0.9.")) return;
     649        ourVer = ourVer.substring(4);
     650        int dot = ourVer.indexOf('.');
     651        if (dot > 0)
     652            ourVer = ourVer.substring(0, dot);
     653        int minor;
     654        try {
     655            minor = Integer.parseInt(ourVer);
     656        } catch (NumberFormatException nfe) { return; }
     657        for (RouterInfo info : ris) {
     658            Hash h = info.getHash();
     659            String hisFullVer = info.getVersion();
     660            if (!hisFullVer.startsWith("0.9.")) {
     661                addPoints(points, h, 50.0, "Strange version " + DataHelper.escapeHTML(hisFullVer));
     662                continue;
     663            }
     664            String hisVer = hisFullVer.substring(4);
     665            dot = hisVer.indexOf('.');
     666            if (dot > 0)
     667                hisVer = hisVer.substring(0, dot);
     668            int hisMinor;
     669            try {
     670                hisMinor = Integer.parseInt(hisVer);
     671            } catch (NumberFormatException nfe) { continue; }
     672            int howOld = minor - hisMinor;
     673            if (howOld < 3)
     674                continue;
     675            addPoints(points, h, howOld * VERSION_FACTOR, howOld + " versions behind: " + DataHelper.escapeHTML(hisFullVer));
    620676        }
    621677    }
Note: See TracChangeset for help on using the changeset viewer.