From 0fa2ceec48a89acd2b5f20ab688571b94ce32a55 Mon Sep 17 00:00:00 2001 From: Raynaldo Rivera Date: Thu, 23 Oct 2014 01:57:08 -0700 Subject: [PATCH] Added a check to insure that during the api refresh the server is online for every user minimizes chances of database wipe --- celerytask/tasks.py | 64 +++++++++++++++------------- services/managers/eve_api_manager.py | 12 ++++++ 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/celerytask/tasks.py b/celerytask/tasks.py index 799d9c6c..6b1a7881 100644 --- a/celerytask/tasks.py +++ b/celerytask/tasks.py @@ -11,6 +11,7 @@ from eveonline.managers import EveManager from services.managers.eve_api_manager import EveApiManager from util.common_task import deactivate_services + def update_jabber_groups(user): syncgroups = SyncGroupCache.objects.filter(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user) @@ -123,36 +124,39 @@ def run_databaseUpdate(): @periodic_task(run_every=crontab(minute=0, hour="*/3")) def run_api_refresh(): users = User.objects.all() - for user in users: - api_key_pairs = EveManager.get_api_key_pairs(user.id) - if api_key_pairs: - valid_key = False - authserviceinfo = AuthServicesInfo.objects.get(user=user) - # We do a check on the authservice info to insure that we shoud run the check - # No point in running the check on people who arn't on services - print 'Running update on user: '+user.username - if authserviceinfo.main_char_id: - if authserviceinfo.main_char_id != "": - for api_key_pair in api_key_pairs: - print 'Running on '+api_key_pair.api_id+':'+api_key_pair.api_key - if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key): - # Update characters - characters = EveApiManager.get_characters_from_api(api_key_pair.api_id, api_key_pair.api_key) - EveManager.update_characters_from_list(characters) - valid_key = True - else: - EveManager.delete_characters_by_api_id(api_key_pair.api_id, user) - EveManager.delete_api_key_pair(api_key_pair.api_id, api_key_pair.api_key) - if valid_key: - # Check our main character - main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id) - if main_alliance_id == settings.ALLIANCE_ID: - pass + for user in users: + # Check if the api server is online + if EveApiManager.check_if_api_server_online(): + api_key_pairs = EveManager.get_api_key_pairs(user.id) + if api_key_pairs: + valid_key = False + authserviceinfo = AuthServicesInfo.objects.get(user=user) + # We do a check on the authservice info to insure that we shoud run the check + # No point in running the check on people who arn't on services + print 'Running update on user: '+user.username + if authserviceinfo.main_char_id: + if authserviceinfo.main_char_id != "": + for api_key_pair in api_key_pairs: + print 'Running on '+api_key_pair.api_id+':'+api_key_pair.api_key + if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key): + # Update characters + characters = EveApiManager.get_characters_from_api(api_key_pair.api_id, api_key_pair.api_key) + EveManager.update_characters_from_list(characters) + valid_key = True + else: + EveManager.delete_characters_by_api_id(api_key_pair.api_id, user) + EveManager.delete_api_key_pair(api_key_pair.api_id, api_key_pair.api_key) + + if valid_key: + # Check our main character + main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id) + if main_alliance_id == settings.ALLIANCE_ID: + pass + else: + deactivate_services(user) else: + #nuke it deactivate_services(user) - else: - #nuke it - deactivate_services(user) - else: - print 'No main_char_id set' \ No newline at end of file + else: + print 'No main_char_id set' \ No newline at end of file diff --git a/services/managers/eve_api_manager.py b/services/managers/eve_api_manager.py index d3d9963b..2d3de503 100644 --- a/services/managers/eve_api_manager.py +++ b/services/managers/eve_api_manager.py @@ -85,4 +85,16 @@ class EveApiManager(): except evelink.api.APIError as error: return False + return False + + @staticmethod + def check_if_api_server_online(): + try: + api = evelink.api.API() + server = evelink.server.Server(api=api) + info = server.server_status() + return True + except evelink.api.APIError as error: + return False + return False \ No newline at end of file