Mercurial > public > sg101
view gpp/forums/stats.py @ 429:d0f0800eef0c
Making the jquery tabbed version of the messages app the current version and removing the old. Also figured out how to dynamically update the base template's count of unread messages when messages are read.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Tue, 03 May 2011 02:56:58 +0000 |
parents | e10fa0d8e7ad |
children | e94570675664 |
line wrap: on
line source
""" This module is responsible for managing various forum statistics. """ from django.core.cache import cache from django.contrib.auth.models import User from forums.models import Post CACHE_KEY = 'forums-stats' CACHE_TIMEOUT = 4 * 60 * 60 # seconds def calc_stats(): """ This function is responsible for computing the forum statistics. A tuple is returned: (forums post count, active user count, latest username) """ post_count = Post.objects.all().count() user_count = User.objects.all().count() if user_count > 0: latest_user = User.objects.filter(is_active=True).values_list( 'username', flat=True).order_by('-date_joined')[0] else: latest_user = None return post_count, user_count, latest_user def update_stats(): """ This function is responsible for computing the forum statistics and inserting them into the cache. The stats are returned. This function should be run periodically, preferably outside of the request/response cycle. On MySQL under InnoDb it is expensive to retrieve the total post count. """ stats = calc_stats() cache.set(CACHE_KEY, stats, CACHE_TIMEOUT) return stats def retrieve_stats(): """ This function retrieves the forum stats from the cache if they are available. If there is a cache-miss, the stats are calcuated, the cache is updated, and the stats returned. """ stats = cache.get(CACHE_KEY) if stats is None: stats = update_stats() return stats