lbry-sdk/lbrynet/dht/hashwatcher.py

35 lines
1.1 KiB
Python
Raw Normal View History

2015-08-20 17:27:15 +02:00
from collections import Counter
import datetime
2017-04-10 16:51:49 +02:00
class HashWatcher(object):
def __init__(self):
2015-08-20 17:27:15 +02:00
self.ttl = 600
self.hashes = []
self.next_tick = None
def tick(self):
from twisted.internet import reactor
self._remove_old_hashes()
self.next_tick = reactor.callLater(10, self.tick)
def stop(self):
if self.next_tick is not None:
self.next_tick.cancel()
self.next_tick = None
def add_requested_hash(self, hashsum, from_ip):
matching_hashes = [h for h in self.hashes if h[0] == hashsum and h[2] == from_ip]
if len(matching_hashes) == 0:
self.hashes.append((hashsum, datetime.datetime.now(), from_ip))
def most_popular_hashes(self, num_to_return=10):
hash_counter = Counter([h[0] for h in self.hashes])
return hash_counter.most_common(num_to_return)
def _remove_old_hashes(self):
remove_time = datetime.datetime.now() - datetime.timedelta(minutes=10)
self.hashes = [h for h in self.hashes if h[1] < remove_time]