def _start_priority_queue(self): if (self._update_prio_queue_thread is None and (self.delay_after_timestamp_prio is not None or self.mode == "iv_mitm") and not self.mode == "pokestops"): self._prio_queue = [] if self.mode not in ["iv_mitm", "pokestops"]: self.clustering_helper = ClusteringHelper(self._max_radius, self._max_coords_within_radius, self._cluster_priority_queue_criteria()) self._update_prio_queue_thread = Thread(name="prio_queue_update_" + self.name, target=self._update_priority_queue_loop) self._update_prio_queue_thread.daemon = False self._update_prio_queue_thread.start()
def __init__(self, db_wrapper, coords, max_radius, max_coords_within_radius, path_to_include_geofence, path_to_exclude_geofence, routefile, mode=None, init=False, name="unknown", settings=None): self.db_wrapper = db_wrapper self.init = init self.name = name self._coords_unstructured = coords self.geofence_helper = GeofenceHelper( path_to_include_geofence, path_to_exclude_geofence) self._routefile = routefile self._max_radius = max_radius self._max_coords_within_radius = max_coords_within_radius self.settings = settings self.mode = mode self._last_round_prio = False self._manager_mutex = Lock() self._round_started_time = None if coords is not None: if init: fenced_coords = coords else: fenced_coords = self.geofence_helper.get_geofenced_coordinates( coords) self._route = getJsonRoute( fenced_coords, max_radius, max_coords_within_radius, routefile) else: self._route = None self._current_index_of_route = 0 self._init_mode_rounds = 0 if settings is not None: self.delay_after_timestamp_prio = settings.get( "delay_after_prio_event", None) if self.delay_after_timestamp_prio == 0: self.delay_after_timestamp_prio = None self.starve_route = settings.get("starve_route", False) else: self.delay_after_timestamp_prio = None self.starve_route = False if self.delay_after_timestamp_prio is not None or mode == "iv_mitm": self._prio_queue = [] if mode != "iv_mitm": self.clustering_helper = ClusteringHelper(self._max_radius, self._max_coords_within_radius, self._cluster_priority_queue_criteria()) self._stop_update_thread = Event() self._update_prio_queue_thread = Thread(name="prio_queue_update_" + name, target=self._update_priority_queue_loop) self._update_prio_queue_thread.daemon = True self._update_prio_queue_thread.start() else: self._prio_queue = None
def getLessCoords(self, npCoordinates, maxRadius, maxCountPerCircle, useS2: bool=False, S2level: int=15): coordinates = [] for coord in npCoordinates: coordinates.append( (0, Location(coord[0].item(), coord[1].item())) ) clustering_helper = ClusteringHelper(max_radius=maxRadius, max_count_per_circle=maxCountPerCircle, max_timedelta_seconds=0, useS2=useS2, S2level=S2level) clustered_events = clustering_helper.get_clustered(coordinates) coords_cleaned_up = [] for event in clustered_events: coords_cleaned_up.append(event[1]) return coords_cleaned_up
def _start_priority_queue(self): logger.info("Try to activate PrioQ thread for route {}".format(str(self.name))) if (self.delay_after_timestamp_prio is not None or self.mode == "iv_mitm") and not self.mode == "pokestops": logger.info("PrioQ thread for route {} could be activate".format(str(self.name))) self._prio_queue = [] if self.mode not in ["iv_mitm", "pokestops"]: self.clustering_helper = ClusteringHelper(self._max_radius, self._max_coords_within_radius, self._cluster_priority_queue_criteria()) self._update_prio_queue_thread = Thread(name="prio_queue_update_" + self.name, target=self._update_priority_queue_loop) self._update_prio_queue_thread.daemon = True self._update_prio_queue_thread.start() else: logger.info("Cannot activate Prio Q - maybe wrong mode or delay_after_prio_event is null")
def getLessCoords(npCoordinates, maxRadius, maxCountPerCircle): coordinates = [] for coord in npCoordinates: coordinates.append((0, Location(coord[0].item(), coord[1].item()))) clustering_helper = ClusteringHelper( max_radius=maxRadius, max_count_per_circle=maxCountPerCircle, max_timedelta_seconds=0) clustered_events = clustering_helper.get_clustered(coordinates) # relations = __getRelationsInRange(coordinates, maxRadius) # summedUp = __sumUpRelations(relations, maxCountPerCircle, maxRadius) coords_cleaned_up = [] for event in clustered_events: coords_cleaned_up.append(event[1]) # print "Done summing up: " + str(summedUp) + " that's just " + str(len(summedUp)) return coords_cleaned_up