pull/109/head
Mr Chen 6 years ago
parent a4dbdf1c49
commit f5d63f7a4f
  1. BIN
      plugins/gae/ico.png
  2. BIN
      plugins/memcached/ico.png
  3. 15
      plugins/simdht/workers/index_worker.py
  4. 40
      plugins/simdht/workers/simdht_worker.py

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 801 B

After

Width:  |  Height:  |  Size: 653 B

@ -12,19 +12,22 @@ import MySQLdb.cursors
SRC_HOST = '127.0.0.1' SRC_HOST = '127.0.0.1'
SRC_USER = 'root' SRC_USER = 'root'
SRC_PASS = '' SRC_PASS = 'root'
DST_HOST = '127.0.0.1' DST_HOST = '127.0.0.1'
DST_USER = 'root' DST_USER = 'root'
DST_PASS = '' DST_PASS = 'root'
src_conn = mdb.connect(SRC_HOST, SRC_USER, SRC_PASS, 'ssbc', charset='utf8', cursorclass=MySQLdb.cursors.DictCursor) src_conn = mdb.connect(SRC_HOST, SRC_USER, SRC_PASS, 'ssbc',
charset='utf8', cursorclass=MySQLdb.cursors.DictCursor)
src_curr = src_conn.cursor() src_curr = src_conn.cursor()
src_curr.execute('SET NAMES utf8') src_curr.execute('SET NAMES utf8')
dst_conn = mdb.connect(DST_HOST, DST_USER, DST_PASS, 'rt_main', port=9306, charset='utf8') dst_conn = mdb.connect(DST_HOST, DST_USER, DST_PASS,
'rt_main', port=9306, charset='utf8')
dst_curr = dst_conn.cursor() dst_curr = dst_conn.cursor()
dst_curr.execute('SET NAMES utf8') dst_curr.execute('SET NAMES utf8')
def work(): def work():
src_curr.execute('SELECT id, name, CRC32(category) AS category, length, UNIX_TIMESTAMP(create_time) AS create_time, ' + src_curr.execute('SELECT id, name, CRC32(category) AS category, length, UNIX_TIMESTAMP(create_time) AS create_time, ' +
'UNIX_TIMESTAMP(last_seen) AS last_seen FROM search_hash WHERE tagged=false LIMIT 10000') 'UNIX_TIMESTAMP(last_seen) AS last_seen FROM search_hash WHERE tagged=false LIMIT 10000')
@ -34,7 +37,8 @@ def work():
ret = dst_curr.execute('insert into rt_main(id,name,category,length,create_time,last_seen) values(%s,%s,%s,%s,%s,%s)', ret = dst_curr.execute('insert into rt_main(id,name,category,length,create_time,last_seen) values(%s,%s,%s,%s,%s,%s)',
(one['id'], one['name'], one['category'], one['length'], one['create_time'], one['last_seen'])) (one['id'], one['name'], one['category'], one['length'], one['create_time'], one['last_seen']))
if ret: if ret:
src_curr.execute('UPDATE search_hash SET tagged=True WHERE id=%s', (one['id'],)) src_curr.execute(
'UPDATE search_hash SET tagged=True WHERE id=%s', (one['id'],))
print 'Indexed', one['name'].encode('utf8') print 'Indexed', one['name'].encode('utf8')
print 'Done!' print 'Done!'
return total return total
@ -46,4 +50,3 @@ if __name__ == '__main__':
continue continue
print 'Wait 10mins...' print 'Wait 10mins...'
time.sleep(600) time.sleep(600)

@ -44,7 +44,7 @@ from metadata import save_metadata
DB_HOST = '127.0.0.1' DB_HOST = '127.0.0.1'
DB_USER = 'root' DB_USER = 'root'
DB_PORT = 3306 DB_PORT = 3306
DB_PASS = '' DB_PASS = 'root'
DB_NAME = 'ssbc' DB_NAME = 'ssbc'
BLACK_FILE = 'black_list.txt' BLACK_FILE = 'black_list.txt'
@ -62,6 +62,7 @@ MAX_QUEUE_PT = 200
geoip = pygeoip.GeoIP('GeoIP.dat') geoip = pygeoip.GeoIP('GeoIP.dat')
def load_res_blacklist(black_list_path): def load_res_blacklist(black_list_path):
black_list = [] black_list = []
file_path = os.path.join(os.path.dirname(__file__), black_list_path) file_path = os.path.join(os.path.dirname(__file__), black_list_path)
@ -74,9 +75,11 @@ def load_res_blacklist(black_list_path):
f.close() f.close()
return black_list return black_list
def is_ip_allowed(ip): def is_ip_allowed(ip):
return geoip.country_code_by_addr(ip) not in ('CN', 'TW', 'HK') return geoip.country_code_by_addr(ip) not in ('CN', 'TW', 'HK')
def entropy(length): def entropy(length):
return "".join(chr(randint(0, 255)) for _ in xrange(length)) return "".join(chr(randint(0, 255)) for _ in xrange(length))
@ -173,8 +176,10 @@ class DHTClient(Thread):
nodes = decode_nodes(msg["r"]["nodes"]) nodes = decode_nodes(msg["r"]["nodes"])
for node in nodes: for node in nodes:
(nid, ip, port) = node (nid, ip, port) = node
if len(nid) != 20: continue if len(nid) != 20:
if ip == self.bind_ip: continue continue
if ip == self.bind_ip:
continue
n = KNode(nid, ip, port) n = KNode(nid, ip, port)
self.nodes.append(n) self.nodes.append(n)
@ -193,12 +198,12 @@ class DHTServer(DHTClient):
"announce_peer": self.on_announce_peer_request, "announce_peer": self.on_announce_peer_request,
} }
self.ufd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) self.ufd = socket.socket(
socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
self.ufd.bind((self.bind_ip, self.bind_port)) self.ufd.bind((self.bind_ip, self.bind_port))
timer(RE_JOIN_DHT_INTERVAL, self.re_join_DHT) timer(RE_JOIN_DHT_INTERVAL, self.re_join_DHT)
def run(self): def run(self):
self.re_join_DHT() self.re_join_DHT()
while True: while True:
@ -290,12 +295,14 @@ class DHTServer(DHTClient):
class Master(Thread): class Master(Thread):
def __init__(self): def __init__(self):
Thread.__init__(self) Thread.__init__(self)
self.setDaemon(True) self.setDaemon(True)
self.queue = Queue() self.queue = Queue()
self.metadata_queue = Queue() self.metadata_queue = Queue()
self.dbconn = mdb.connect(DB_HOST, DB_USER, DB_PASS, DB_NAME, port=DB_PORT, charset='utf8') self.dbconn = mdb.connect(
DB_HOST, DB_USER, DB_PASS, DB_NAME, port=DB_PORT, charset='utf8')
self.dbconn.autocommit(False) self.dbconn.autocommit(False)
self.dbcurr = self.dbconn.cursor() self.dbcurr = self.dbconn.cursor()
self.dbcurr.execute('SET NAMES utf8') self.dbcurr.execute('SET NAMES utf8')
@ -314,10 +321,10 @@ class Master(Thread):
return return
self.n_valid += 1 self.n_valid += 1
save_metadata(self.dbcurr, binhash, address, start_time, data,self.black_list) save_metadata(self.dbcurr, binhash, address,
start_time, data, self.black_list)
self.n_new += 1 self.n_new += 1
def run(self): def run(self):
self.name = threading.currentThread().getName() self.name = threading.currentThread().getName()
print self.name, 'started' print self.name, 'started'
@ -339,20 +346,24 @@ class Master(Thread):
date = datetime.datetime(date.year, date.month, date.day) date = datetime.datetime(date.year, date.month, date.day)
# Check if we have this info_hash # Check if we have this info_hash
self.dbcurr.execute('SELECT id FROM search_hash WHERE info_hash=%s', (info_hash,)) self.dbcurr.execute(
'SELECT id FROM search_hash WHERE info_hash=%s', (info_hash,))
y = self.dbcurr.fetchone() y = self.dbcurr.fetchone()
if y: if y:
self.n_valid += 1 self.n_valid += 1
# 更新最近发现时间,请求数 # 更新最近发现时间,请求数
self.dbcurr.execute('UPDATE search_hash SET last_seen=%s, requests=requests+1 WHERE info_hash=%s', (utcnow, info_hash)) self.dbcurr.execute(
'UPDATE search_hash SET last_seen=%s, requests=requests+1 WHERE info_hash=%s', (utcnow, info_hash))
else: else:
if dtype == 'pt': if dtype == 'pt':
t = threading.Thread(target=simMetadata.download_metadata, args=(address, binhash, self.metadata_queue)) t = threading.Thread(target=simMetadata.download_metadata, args=(
address, binhash, self.metadata_queue))
t.setDaemon(True) t.setDaemon(True)
t.start() t.start()
self.n_downloading_pt += 1 self.n_downloading_pt += 1
elif dtype == 'lt' and self.n_downloading_lt < MAX_QUEUE_LT: elif dtype == 'lt' and self.n_downloading_lt < MAX_QUEUE_LT:
t = threading.Thread(target=ltMetadata.download_metadata, args=(address, binhash, self.metadata_queue)) t = threading.Thread(target=ltMetadata.download_metadata, args=(
address, binhash, self.metadata_queue))
t.setDaemon(True) t.setDaemon(True)
t.start() t.start()
self.n_downloading_lt += 1 self.n_downloading_lt += 1
@ -385,7 +396,8 @@ def announce(info_hash, address):
def rpc_server(): def rpc_server():
rpcserver = SimpleXMLRPCServer.SimpleXMLRPCServer(('localhost', 8004), logRequests=False) rpcserver = SimpleXMLRPCServer.SimpleXMLRPCServer(
('localhost', 8004), logRequests=False)
rpcserver.register_function(announce, 'announce') rpcserver.register_function(announce, 'announce')
print 'Starting xml rpc server...' print 'Starting xml rpc server...'
rpcserver.serve_forever() rpcserver.serve_forever()
@ -402,5 +414,3 @@ if __name__ == "__main__":
dht = DHTServer(master, "0.0.0.0", 6881, max_node_qsize=200) dht = DHTServer(master, "0.0.0.0", 6881, max_node_qsize=200)
dht.start() dht.start()
dht.auto_send_find_node() dht.auto_send_find_node()

Loading…
Cancel
Save