Skip to content

Instantly share code, notes, and snippets.

@daviddanielng
Created May 22, 2024 12:15
Show Gist options
  • Save daviddanielng/578b3d1be0f1c78af29b1401b72acab7 to your computer and use it in GitHub Desktop.
Save daviddanielng/578b3d1be0f1c78af29b1401b72acab7 to your computer and use it in GitHub Desktop.
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