def get(self): ## remove any old peers plist = Peer.all().filter('datetime <',datetime.now() - timedelta(days=1)) peercount = plist.count() for p in plist: p.delete() ## remove any empty trackers trackers = Tracker.all() trackercount = 0 for tracker in trackers: p = Peer.all().filter('tracker =',tracker).order('-datetime').get() if p == None: tracker.delete() trackercount += 1 ## some simple stats self.response.headers['Content-Type'] = 'text/plain' self.response.out.write("Cleaned %d trackers and %d peers"%(trackercount,peercount)) if trackercount and peercount: logging.info("Cleaned %d trackers and %d peers"%(trackercount,peercount))
def get(self,key): self.response.headers['Content-Type'] = 'text/plain' if re.match(r"\w{3,25}",key): ## check if a tracker is valid ## Check if the tracker exists, if not create it tracker = GetTracker(key) ## Check if the peer making the request is already in the DB, if not add them Tick(tracker,self.request.remote_addr) ## try getting a given tick if not set the default try: tick = int(self.request.get('tick')) except: tick = 60 ## Get and echo the relevant peers plist = Peer.all().filter('tracker =',tracker).filter('datetime >',datetime.now() - timedelta(seconds=tick)) for peer in plist: if peer.address != self.request.remote_addr: self.response.out.write(peer.address+"\n") else: self.response.out.write('Tracker must contain only numbers, letters and the underscore, it must also be between 3 and 25 charachters')
def Tick(tracker,address): p = Peer.all().filter('address =',address).filter('tracker =',tracker).get() if p != None: p.put() else: Peer(address=address,tracker=tracker).put()