def get_system_infos(db_wrapper): pid = os.getpid() py = psutil.Process(pid) gc.set_threshold(5, 1, 1) while not terminate_mad.is_set(): logger.debug('Starting internal Cleanup') logger.debug('Collecting...') n = gc.collect() logger.debug('Unreachable objects: {} - Remaining garbage: {} - Running threads: {}', str(n), str(gc.garbage), str(active_count())) for obj in gc.garbage: for ref in find_referring_graphs(obj): ref.set_next(None) del ref # remove local reference so the node can be deleted del obj # remove local reference so the node can be deleted # Clear references held by gc.garbage logger.debug('Clearing gc garbage') del gc.garbage[:] memoryUse = py.memory_info()[0] / 2. ** 30 cpuUse = py.cpu_percent() logger.info('Instance Name: "{}" - Memory usage: {} - CPU usage: {}', str(args.status_name), str(memoryUse), str(cpuUse)) collected = None if args.stat_gc: collected = gc.collect() logger.debug("Garbage collector: collected %d objects." % collected) zero = datetime.datetime.utcnow() unixnow = calendar.timegm(zero.utctimetuple()) db_wrapper.insert_usage(args.status_name, cpuUse, memoryUse, collected, unixnow) time.sleep(args.statistic_interval)
def file_watcher(db_wrapper, mitm_mapper, ws_server, webhook_worker): # We're on a 60-second timer. refresh_time_sec = 60 filename = 'configs/mappings.json' while not terminate_mad.is_set(): # Wait (x-1) seconds before refresh, min. 1s. time.sleep(max(1, refresh_time_sec - 1)) try: # Only refresh if the file has changed. current_time_sec = time.time() file_modified_time_sec = os.path.getmtime(filename) time_diff_sec = current_time_sec - file_modified_time_sec # File has changed in the last refresh_time_sec seconds. if time_diff_sec < refresh_time_sec: logger.info( 'Change found in {}. Updating device mappings.', filename) (device_mappings, routemanagers, auths) = load_mappings(db_wrapper) mitm_mapper._device_mappings = device_mappings logger.info('Propagating new mappings to all clients.') ws_server.update_settings( routemanagers, device_mappings, auths) if webhook_worker is not None: webhook_worker.update_settings(routemanagers) else: logger.debug('No change found in {}.', filename) except Exception as e: logger.exception( 'Exception occurred while updating device mappings: {}.', e)
def delete_old_logs(minutes): if minutes == 0: log.info('delete_old_logs: Search/Delete logs is disabled') return while not terminate_mad.is_set(): log.info('delete_old_logs: Search/Delete logs older than ' + str(minutes) + ' minutes') now = time.time() logpath = args.log_path log.debug('delete_old_logs: Log Folder: ' + str(logpath)) for file in os.listdir(logpath): file_full_path = os.path.join(logpath, file) if os.path.isfile(file_full_path): # Delete files older than x days if os.stat(file_full_path).st_mtime < now - int(minutes) * 60: os.remove(file_full_path) log.info('delete_old_logs: File Removed : ' + file_full_path) log.info('delete_old_logs: Search/Delete logs finished') time.sleep(3600)
def run_worker(self): logger.info("Starting webhook worker thread") while not terminate_mad.is_set(): # fetch data and create payload full_payload = self.__create_payload() # send our payload self.__send_webhook(full_payload) self.__last_check = int(time.time()) time.sleep(self.__worker_interval_sec) logger.info("Stopping webhook worker thread")
def run_worker(self): logger.info("Starting webhook worker thread") while not terminate_mad.is_set(): # the payload that is about to be sent full_payload = [] # raids raids = self.__prepare_raid_data( self.__db_wrapper.get_raids_changed_since(self.__last_check)) full_payload += raids # quest if self.__args.quest_webhook: quest = self.__prepare_quest_data( self.__db_wrapper.quests_from_db( timestamp=self.__last_check)) full_payload += quest # weather if self.__args.weather_webhook: weather = self.__prepare_weather_data( self.__db_wrapper.get_weather_changed_since( self.__last_check)) full_payload += weather # gyms if self.__args.gym_webhook: gyms = self.__prepare_gyms_data( self.__db_wrapper.get_gyms_changed_since( self.__last_check)) full_payload += gyms # mon if self.__args.pokemon_webhook: mon = self.__prepare_mon_data( self.__db_wrapper.get_mon_changed_since(self.__last_check)) full_payload += mon # send our payload self.__send_webhook(full_payload) self.__last_check = int(time.time()) time.sleep(self.__worker_interval_sec) logger.info("Stopping webhook worker thread")