Silent tracker errors, updated list of alive trackers, added tracker unittest

This commit is contained in:
HelloZeroNet 2015-01-30 18:46:48 +01:00
parent e2435ce1ca
commit cfe2cfaf09
3 changed files with 36 additions and 5 deletions

View File

@ -227,6 +227,7 @@ class Site:
def announce(self, force=False):
if time.time() < self.last_announce+15 and not force: return # No reannouncing within 15 secs
self.last_announce = time.time()
error = 0
for protocol, ip, port in SiteManager.TRACKERS:
if protocol == "udp":
@ -240,8 +241,7 @@ class Site:
back = tracker.poll_once()
peers = back["response"]["peers"]
except Exception, err:
self.log.error("Tracker error: %s" % Debug.formatException(err))
time.sleep(1)
error += 1
continue
added = 0
@ -252,9 +252,14 @@ class Site:
if added:
self.worker_manager.onPeers()
self.updateWebsocket(peers_added=added)
self.log.debug("Found %s peers, new: %s" % (len(peers), added))
self.log.debug("Found %s peers, new: %s" % (len(peers), added))
else:
pass # TODO: http tracker support
if error < len(SiteManager.TRACKERS): # Less errors than total tracker nums
self.log.debug("Announced to %s trackers, error: %s" % (len(SiteManager.TRACKERS), error))
else:
self.log.error("Announced to %s trackers, failed" % len(SiteManager.TRACKERS))
# Check and try to fix site files integrity

View File

@ -4,10 +4,9 @@ import gevent
TRACKERS = [
("udp", "sugoi.pomf.se", 2710),
("udp", "open.demonii.com", 1337),
("udp", "bigfoot1942.sektori.org", 6969),
("udp", "tracker.coppersurfer.tk", 80),
("udp", "tracker.leechers-paradise.org", 6969),
("udp", "tracker.blazing.de", 80),
("udp", "9.rarbg.com", 2710),
]
# Load all sites from data/sites.json

View File

@ -41,6 +41,33 @@ class TestCase(unittest.TestCase):
print "Taken: %.3fs, " % (time.time()-s),
def testTrackers(self):
from Site import SiteManager
from lib.subtl.subtl import UdpTrackerClient
import hashlib
ok = 0
for protocol, ip, port in SiteManager.TRACKERS:
address = "test"
if protocol == "udp":
tracker = UdpTrackerClient(ip, port)
peers = None
try:
tracker.connect()
tracker.poll_once()
tracker.announce(info_hash=hashlib.sha1(address).hexdigest(), num_want=5)
back = tracker.poll_once()
peers = back["response"]["peers"]
except Exception, err:
peers = None
print "Tracker error: %s://%s:%s %s" % (protocol, ip, port, err)
if peers != None:
ok += 1
self.assertGreater(ok, 1)
if __name__ == "__main__":
unittest.main(verbosity=2)