diff --git a/.gitignore b/.gitignore index a991d42fe1f8fe5841e80bc0816af36d4099e6fb..fec9c94d7648136a5c9a7819e031ecc9beef0d66 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ __pycache__ /uploads* /media* +/logs* SCIPOST_JOURNALS UPLOADS diff --git a/SciPost_v1/settings/base.py b/SciPost_v1/settings/base.py index cfa3afb43c2627e113e1ea37e66b3e64771bdf9f..2ce3128b4a71fdc7e0bb66d978b28ab47bc8ca71 100644 --- a/SciPost_v1/settings/base.py +++ b/SciPost_v1/settings/base.py @@ -106,6 +106,7 @@ INSTALLED_APPS = ( 'stats', 'petitions', 'webpack_loader', + 'silk', ) @@ -155,6 +156,7 @@ MATHJAX_CONFIG_DATA = { } MIDDLEWARE = ( + 'silk.middleware.SilkyMiddleware', # 'django.middleware.http.ConditionalGetMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', @@ -164,9 +166,18 @@ MIDDLEWARE = ( 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'django.middleware.security.SecurityMiddleware' + 'django.middleware.security.SecurityMiddleware', ) +SILKY_PYTHON_PROFILER = True +SILKY_PYTHON_PROFILE_BINARY = False +SILKY_AUTHENTICATION = True +SILKY_AUTHORIZATION = True +SILKY_META = True +SILKY_INTERCEPT_PERCENT = 100 +SILKY_MAX_RECORDED_REQUESTS = 10**4 +SILKY_PERMISSIONS = lambda user: user.is_superuser + ROOT_URLCONF = 'SciPost_v1.urls' TEMPLATES = [ diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py index 2fe82bebd8ad297c4505b5fc1f5794bca5e8035d..48f75f7c07021fec6a417d31edcebcf819b37365 100644 --- a/SciPost_v1/urls.py +++ b/SciPost_v1/urls.py @@ -53,6 +53,7 @@ urlpatterns = [ url(r'^stats/', include('stats.urls', namespace="stats")), # Keep temporarily for historical reasons url(r'^supporting_partners/', include('partners.urls', namespace="_partners")), + url(r'^silk/', include('silk.urls', namespace='silk')), ] if settings.DEBUG: diff --git a/requirements.txt b/requirements.txt index 1e0972f0744b34b251410d6032f2401f38763378..f67521b8a6c1e53e16da6b4672cce3d358c778d0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,6 +19,7 @@ django-guardian==1.4.9 django-mathjax==0.0.5 # This thing looks dead as well django-mptt==0.8.6 # Dead django-sphinxdoc==1.5.1 +django-silk==2.0.0 django-recaptcha==1.3.1 django-webpack-loader==0.5 @@ -36,7 +37,7 @@ Faker==0.8.12 # Django Utils -django-haystack==2.5.1 # Check if this is really used. Package is not up-to-date +django-haystack==2.5.1 Whoosh==2.7.4 # Directly related to Haystack. diff --git a/submissions/views.py b/submissions/views.py index e806b5c1ce3c74440bdfa70f151038615479b301..1d3fdc11c74e7329e884f3034546d2d0db14276d 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -23,6 +23,7 @@ from django.views.generic.edit import CreateView, UpdateView from django.views.generic.list import ListView from guardian.shortcuts import assign_perm +from silk.profiling.profiler import silk_profile from .constants import STATUS_VETTED, STATUS_EIC_ASSIGNED,\ SUBMISSION_STATUS_PUBLICLY_INVISIBLE, SUBMISSION_STATUS,\ @@ -353,6 +354,7 @@ def editorial_workflow(request): @login_required @fellowship_or_admin_required() +@silk_profile(name='Pool') def pool(request, arxiv_identifier_w_vn_nr=None): """ The Submissions pool contains all submissions which are undergoing @@ -538,6 +540,7 @@ def assignment_request(request, assignment_id): @login_required @fellowship_required() @transaction.atomic +@silk_profile(name='Volunteer as EIC') def volunteer_as_EIC(request, arxiv_identifier_w_vn_nr): """ Called when a Fellow volunteers while perusing the submissions pool. @@ -632,6 +635,7 @@ def assignment_failed(request, arxiv_identifier_w_vn_nr): @login_required @fellowship_required() +@silk_profile(name='EditorialAssignment overview') def assignments(request): """ This page provides a Fellow with an explicit task list @@ -757,6 +761,7 @@ def select_referee(request, arxiv_identifier_w_vn_nr): @login_required @fellowship_or_admin_required() @transaction.atomic +@silk_profile(name='Recruit referee') def recruit_referee(request, arxiv_identifier_w_vn_nr): """ If the Editor-in-charge does not find the desired referee among Contributors @@ -869,6 +874,7 @@ def send_refereeing_invitation(request, arxiv_identifier_w_vn_nr, contributor_id @login_required @fellowship_or_admin_required() +@silk_profile(name='Remind Referee') def ref_invitation_reminder(request, arxiv_identifier_w_vn_nr, invitation_id): """ This method is used by the Editor-in-charge from the editorial_page @@ -1176,6 +1182,7 @@ def communication(request, arxiv_identifier_w_vn_nr, comtype, referee_id=None): @login_required @fellowship_or_admin_required() @transaction.atomic +@silk_profile(name='Editorial Assignment processing') def eic_recommendation(request, arxiv_identifier_w_vn_nr): """ Write EIC Recommendation. @@ -1363,6 +1370,7 @@ def vet_submitted_reports_list(request): @login_required @fellowship_or_admin_required() @transaction.atomic +@silk_profile(name='Vet submitted Report') def vet_submitted_report(request, report_id): """ Report with status `unvetted` will be shown. A user may only vet reports of submissions