Browse Source

Heartbeat middleware implemented for keep-alive cronjobs

Ralfp 12 years ago
parent
commit
8a24faccba

+ 6 - 3
misago/acl/context_processors.py

@@ -1,4 +1,7 @@
 def acl(request):
-    return {
-        'acl': request.acl,
-    }
+    try:
+        return {
+            'acl': request.acl,
+        }
+    except AttributeError:
+        pass

+ 6 - 3
misago/acl/panels.py

@@ -19,6 +19,9 @@ class MisagoACLDebugPanel(DebugPanel):
         self.request = request
 
     def content(self):
-        context = self.context.copy()
-        context['acl'] = self.request.acl
-        return render_to_string('debug_toolbar/panels/acl.html', context)
+        if self.request.heartbeat:
+            self.has_content = False
+        else:
+            context = self.context.copy()
+            context['acl'] = self.request.acl
+            return render_to_string('debug_toolbar/panels/acl.html', context)

+ 6 - 5
misago/banning/context_processors.py

@@ -1,6 +1,7 @@
 def banning(request):
-    if request.user.is_crawler():
-        return {}
-    return {
-        'is_banned': request.ban.is_banned(),
-    }
+    try:
+        return {
+            'is_banned': request.ban.is_banned(),
+        }
+    except AttributeError:
+        pass

+ 1 - 1
misago/banning/middleware.py

@@ -3,7 +3,7 @@ from misago.users.models import Guest
 
 class BanningMiddleware(object):
     def process_request(self, request):
-        if request.user.is_crawler():
+        if request.heartbeat or request.user.is_crawler():
             return None
         try:
             request.ban = request.session['ban']

+ 6 - 5
misago/bruteforce/context_processors.py

@@ -1,6 +1,7 @@
 def is_jammed(request):
-    if request.user.is_crawler():
-        return {}
-    return {
-        'is_jammed': request.jam.is_jammed(),
-    }
+    try:
+        return {
+            'is_jammed': request.jam.is_jammed(),
+        }
+    except AttributeError:
+        pass

+ 7 - 6
misago/csrf/context_processors.py

@@ -1,7 +1,8 @@
 def csrf(request):
-    if request.user.is_crawler():
-        return {}
-    return {
-        'csrf_id': request.csrf.csrf_id,
-        'csrf_token': request.csrf.csrf_token,
-    }
+    try:
+        return {
+            'csrf_id': request.csrf.csrf_id,
+            'csrf_token': request.csrf.csrf_token,
+        }
+    except AttributeError:
+        pass

+ 0 - 0
misago/heartbeat/__init__.py


+ 8 - 0
misago/heartbeat/middleware.py

@@ -0,0 +1,8 @@
+from django.conf import settings
+from django.http import HttpResponse
+
+class HeartbeatMiddleware(object):
+    def process_request(self, request):
+        request.heartbeat = settings.HEARTBEAT_PATH and settings.HEARTBEAT_PATH == request.path
+        if request.heartbeat:
+            return HttpResponse('BATTLECRUISER OPERATIONAL')

+ 6 - 3
misago/messages/context_processors.py

@@ -1,4 +1,7 @@
 def messages(request):
-    return {
-        'messages' : request.messages.messages,
-    }
+    try:
+        return {
+            'messages' : request.messages.messages,
+        }
+    except AttributeError:
+        pass

+ 6 - 3
misago/monitor/context_processors.py

@@ -1,4 +1,7 @@
 def monitor(request):
-    return {
-        'monitor' : request.monitor,
-    }
+    try:
+        return {
+            'monitor' : request.monitor,
+        }
+    except AttributeError:
+        pass

+ 6 - 3
misago/settings/context_processors.py

@@ -1,4 +1,7 @@
 def settings(request):
-    return {
-        'settings' : request.settings,
-    }
+    try:
+        return {
+            'settings' : request.settings,
+        }
+    except AttributeError:
+        pass

+ 8 - 1
misago/settings_base.py

@@ -16,7 +16,7 @@ OUTPUT_FORMAT = 'html5'
 AVATAR_SIZES = (125, 100, 80, 60, 40, 24)
 
 # Allow usernames to contain diacritics
-UNICODE_USERNAMES = True 
+UNICODE_USERNAMES = True
 
 # If you set this to False, Django will make some optimizations so as not
 # to load the internationalization machinery.
@@ -45,6 +45,12 @@ CATCH_ALL_EMAIL_ADDRESS = ''
 # information and the more costful it is to track reads
 READS_TRACKER_LENGTH = 7
 
+# Heartbeat Path for crons
+# Use this path if you wish to keep Misago alive using separate cron
+# By quering this path from your cron you'll keep Misago's base clean
+# Leave empty if you don't use Heartbeat cron
+HEARTBEAT_PATH = ''
+
 # List of finder classes that know how to find static files in
 # various locations.
 STATICFILES_FINDERS = (
@@ -87,6 +93,7 @@ JINJA2_EXTENSIONS = (
 MIDDLEWARE_CLASSES = (
     'misago.stopwatch.middleware.StopwatchMiddleware',
     'debug_toolbar.middleware.DebugToolbarMiddleware',
+    'misago.heartbeat.middleware.HeartbeatMiddleware',
     'misago.cookie_jar.middleware.CookieJarMiddleware',
     'misago.settings.middleware.SettingsMiddleware',
     'misago.monitor.middleware.MonitorMiddleware',

+ 6 - 3
misago/users/context_processors.py

@@ -1,4 +1,7 @@
 def user(request):
-    return {
-        'user': request.user,
-    }
+    try:
+        return {
+            'user': request.user,
+        }
+    except AttributeError:
+        pass