From b39a87fa5f2f60d7f26b3dab137b7a4ec1fd903d Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Sun, 13 Apr 2014 14:11:19 +0200 Subject: [PATCH] Add API url that drops a trigger file for updates The idea is a git repository hook will send a POST to this URL, which will drop a trigger file somewhere. A cronjob (or inotify listener if we want to be really fancy sometiem in the future) will pick up that cronjob and run the update script. The goal being to shorten the time required to process an update. --- pgweb/core/views.py | 9 +++++++++ pgweb/settings.py | 2 ++ pgweb/urls.py | 3 +++ 3 files changed, 14 insertions(+) diff --git a/pgweb/core/views.py b/pgweb/core/views.py index 4f9c8ed9..462427fe 100644 --- a/pgweb/core/views.py +++ b/pgweb/core/views.py @@ -286,6 +286,15 @@ def api_varnish_purge(request): transaction.commit_unless_managed() return HttpResponse("Purged %s entries\n" % n) +@ssl_required +@csrf_exempt +def api_repo_updated(request): + if not request.META['REMOTE_ADDR'] in settings.SITE_UPDATE_HOSTS: + return HttpServerError("Invalid client address") + # Ignore methods and contents, just drop the trigger + open(settings.SITE_UPDATE_TRIGGER_FILE, 'a').close() + return HttpResponse("OK") + # Merge two organisations @login_required @user_passes_test(lambda u: u.is_superuser) diff --git a/pgweb/settings.py b/pgweb/settings.py index 998e8935..5b39fe3f 100644 --- a/pgweb/settings.py +++ b/pgweb/settings.py @@ -159,6 +159,8 @@ VARNISH_PURGERS=() # Extra servers that can VARNISH_QUEUE_ID=1 # pgq queue id used for varnish purging ARCHIVES_SEARCH_SERVER="archives.postgresql.org" # Where to post REST request for archives search FRONTEND_SMTP_RELAY="magus.postgresql.org" # Where to relay user generated email +SITE_UPDATE_TRIGGER_FILE='/tmp/pgweb.update_trigger' # Where to drop update trigger file +SITE_UPDATE_HOSTS=('127.0.0.1', ) # Hosts that can trigger a site update # Load local settings overrides from settings_local import * diff --git a/pgweb/urls.py b/pgweb/urls.py index fd8bd0e6..21e5ce5d 100644 --- a/pgweb/urls.py +++ b/pgweb/urls.py @@ -130,6 +130,9 @@ urlpatterns = patterns('', # API endpoints (r'^api/varnish/purge/$', 'pgweb.core.views.api_varnish_purge'), + # Pingback from git repo to update site + (r'^api/repo_updated/$', 'pgweb.core.views.api_repo_updated'), + # Override some URLs in admin, to provide our own pages (r'^admin/pending/$', 'pgweb.core.views.admin_pending'), (r'^admin/purge/$', 'pgweb.core.views.admin_purge'), -- 2.39.5