Added ability to manually trigger api refresh

Ignored cache databases
This commit is contained in:
Adarnof 2016-02-07 11:40:11 +00:00
parent 43eeee503f
commit 2d2afa79eb
5 changed files with 106 additions and 76 deletions

View File

@ -37,6 +37,7 @@ urlpatterns = patterns('',
url(r'^add_api_key/', 'eveonline.views.add_api_key', name='auth_add_api_key'),
url(r'^api_key_management/', 'eveonline.views.api_key_management_view',
name='auth_api_key_management'),
url(r'^refresh_api_pair/([0-9]+)/$', 'eveonline.views.user_refresh_api', name='auth_user_refresh_api'),
url(r'^delete_api_pair/(\w+)/$', 'eveonline.views.api_key_removal', name='auth_api_key_removal'),
url(r'^characters/', 'eveonline.views.characters_view', name='auth_characters'),
url(r'^main_character_change/(\w+)/$', 'eveonline.views.main_character_change',

4
cache/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
*
!README.md
!.gitignore

View File

@ -1,5 +1,6 @@
from django.conf import settings
from celery.task import periodic_task
from celery.task import shared_task
from django.contrib.auth.models import User
from django.contrib.auth.models import Group
@ -394,22 +395,10 @@ def run_discord_token_cleanup():
logger.debug("DiscordAuthToken failed validation. Deleting %s" % auth)
auth.delete()
# Run every 3 hours
@periodic_task(run_every=crontab(minute=0, hour="*/3"))
def run_api_refresh():
users = User.objects.all()
logger.debug("Running api refresh on %s users." % len(users))
for user in users:
# Check if the api server is online
logger.debug("Running api refresh for user %s" % user)
if EveApiManager.check_if_api_server_online():
api_key_pairs = EveManager.get_api_key_pairs(user.id)
logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
if api_key_pairs:
authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
logger.debug("User %s has api keys. Proceeding to refresh." % user)
for api_key_pair in api_key_pairs:
@shared_task
def refresh_api(api_key_pair):
logger.debug("Running update on api key %s" % api_key_pair.api_id)
user = api_key_pair.user
if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key):
#check to ensure API key meets min spec
logger.info("Determined api key %s is still active." % api_key_pair.api_id)
@ -485,6 +474,23 @@ def run_api_refresh():
logger.debug("API key %s is no longer valid; it and its characters will be deleted." % api_key_pair.api_id)
EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
# Run every 3 hours
@periodic_task(run_every=crontab(minute=0, hour="*/3"))
def run_api_refresh():
users = User.objects.all()
logger.debug("Running api refresh on %s users." % len(users))
for user in users:
# Check if the api server is online
logger.debug("Running api refresh for user %s" % user)
if EveApiManager.check_if_api_server_online():
api_key_pairs = EveManager.get_api_key_pairs(user.id)
logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
if api_key_pairs:
authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
logger.debug("User %s has api keys. Proceeding to refresh." % user)
for api_key_pair in api_key_pairs:
refresh_api(api_key_pair)
# Check our main character
if EveCharacter.objects.filter(character_id=authserviceinfo.main_char_id).exists() is False:
logger.info("User %s main character id %s missing model. Clearning main character." % (user, authserviceinfo.main_char_id))

View File

@ -22,6 +22,7 @@ from eveonline.models import EveApiKeyPair
from authentication.models import AuthServicesInfo
from celerytask.tasks import determine_membership_by_user
from celerytask.tasks import set_state
from celerytask.tasks import refresh_api
import logging
@ -160,3 +161,17 @@ def corp_stats_view(request):
else:
logger.error("Unable to locate user %s main character model with id %s. Cannot provide corp stats." % (request.user, auth_info.main_char_id))
return render_to_response('registered/corpstats.html', None, context_instance=RequestContext(request))
@login_required
def user_refresh_api(request, api_id)
logger.debug("user_refresh_api called by user %s for api id %s" % (request.user, api_id))
if EveApiKeyPair.objects.filter(api_id=api_id).exists():
api_key_pair = EveApiKeyPair.objects.get(api_id=api_id)
if api_key_pair.user == request.user:
refresh_api(api_key_pair)
set_state(request.user)
else:
logger.warn("User %s not authorized to refresh api id %s" % (request.user, api_id))
else:
logger.warn("User %s unable to refresh api id %s - api key not found" % (request.user, api_id))
return HttpResponseRedirect("/api_key_management/")

View File

@ -32,6 +32,10 @@
<td class="text-center">{{ pair.api_id }}</td>
<td class="text-center">{{ pair.api_key }}</td>
<td class="text-center">
<a href="/refresh_api_pair/{{ pair.api_id }}">
<button type="button" class="btn btn-success"><span
class="glyphicon glyphicon-refresh"></span></button>
</a>
<a href="/delete_api_pair/{{ pair.api_id }}">
<button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>