Created
May 22, 2024 12:15
-
-
Save daviddanielng/578b3d1be0f1c78af29b1401b72acab7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def get_bot_queue_wait(self, name): | |
max_request = int(os.getenv("BOT_MAX_REQUEST", 0)) | |
max_time = int(os.getenv("BOT_MAX_TIME", 0)) | |
current_time = datetime.datetime.now().timestamp() | |
max_wait = max_time / max_request | |
re = 12 | |
if max_request > 0 and max_time > 0: | |
def read_file(): | |
file = open(self.queue_file, "r") | |
content = json.load(file) | |
file.close() | |
return content | |
def write_file(data): | |
file = open(self.queue_file, "w") | |
file.write(json.dumps(data)) | |
file.close() | |
try: | |
queue_file = read_file() | |
wait_start = datetime.datetime.now().timestamp() | |
while queue_file["editing"]: | |
if datetime.datetime.now().timestamp() - wait_start > 30: | |
self.logger.warning( | |
"File is being edited for more than 30 seconds, returning a long queue time of 8 seconds" | |
) | |
re = 8 | |
break | |
self.logger.info("File is being edited, waiting for 2 seconds") | |
time.sleep(2) | |
queue_file = read_file() | |
if not queue_file["editing"]: | |
queue_file["editing"] = True | |
write_file(queue_file) | |
if name in queue_file: | |
current_count = queue_file[name]["count"] | |
last_request = queue_file[name]["last-request"] | |
if current_count < max_request: | |
if current_time - last_request > max_wait: | |
re = max_wait / 2 | |
else: | |
re = (max_wait - (current_time - last_request)) + 1 | |
queue_file[name] = queue_file[name] = { | |
"last-request": current_time, | |
"count": current_count + 1, | |
} | |
else: | |
re = max_wait * 1.8 | |
self.logger.info( | |
"Bot has reached the maximum request limit" | |
) | |
queue_file[name] = queue_file[name] = { | |
"last-request": current_time, | |
"count": 1, | |
} | |
queue_file["editing"] = False | |
write_file(queue_file) | |
else: | |
self.logger.info("There is no queue for the bot") | |
queue_file["editing"] = False | |
queue_file[name] = { | |
"last-request": current_time, | |
"count": 1, | |
} | |
write_file(queue_file) | |
re = 1 | |
except Exception as e: | |
self.logger.error(str(e)) | |
re = max_wait * 3.5 | |
else: | |
self.logger.warning("BOT_MAX_REQUEST or BOT_MAX_TIME is not set") | |
re = max_wait * 2.5 | |
return re |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment