diff --git a/services/modules/discord/manager.py b/services/modules/discord/manager.py index 0947140b..e87f7e29 100644 --- a/services/modules/discord/manager.py +++ b/services/modules/discord/manager.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import requests import json import re +import math from django.conf import settings from requests_oauthlib import OAuth2Session from functools import wraps @@ -50,12 +51,20 @@ class DiscordApiTooBusy(DiscordApiException): class DiscordApiBackoff(DiscordApiException): def __init__(self, retry_after, global_ratelimit): + """ + :param retry_after: int time to retry after in milliseconds + :param global_ratelimit: bool Is the API under a global backoff + """ super(DiscordApiException, self).__init__() self.retry_after = retry_after self.global_ratelimit = global_ratelimit + @property + def retry_after_seconds(self): + return math.ceil(self.retry_after / 1000) -cache_time_format = '%Y-%m-%d %H:%M:%S' + +cache_time_format = '%Y-%m-%d %H:%M:%S.%f' def api_backoff(func): @@ -138,7 +147,7 @@ def api_backoff(func): # Sleep if we're blocking if blocking: logger.info("Blocking Back off from API calls for %s seconds" % bo.retry_after) - time.sleep(10 if bo.retry_after > 10 else bo.retry_after) + time.sleep((10 if bo.retry_after > 10 else bo.retry_after) / 1000) else: # Otherwise raise exception and let caller handle the backoff raise DiscordApiBackoff(retry_after=bo.retry_after, global_ratelimit=bo.global_ratelimit) diff --git a/services/modules/discord/tasks.py b/services/modules/discord/tasks.py index 5189c7b9..03dff349 100644 --- a/services/modules/discord/tasks.py +++ b/services/modules/discord/tasks.py @@ -75,8 +75,8 @@ class DiscordTasks: DiscordOAuthManager.update_groups(user.discord.uid, groups) except DiscordApiBackoff as bo: logger.info("Discord group sync API back off for %s, " - "retrying in %s seconds" % (user, bo.retry_after)) - raise task_self.retry(countdown=bo.retry_after) + "retrying in %s seconds" % (user, bo.retry_after_seconds)) + raise task_self.retry(countdown=bo.retry_after_seconds) except Exception as e: if task_self: logger.exception("Discord group sync failed for %s, retrying in 10 mins" % user)