From fa49c0b829bd3f97ae1f5bba536f67ee91de9f05 Mon Sep 17 00:00:00 2001 From: "A. Svensson" Date: Sun, 8 Mar 2015 15:12:08 +0100 Subject: [PATCH] Let the db perform the stat calculations. --- src/gameservers/models.py | 8 +++++--- src/gameservers/views.py | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/gameservers/models.py b/src/gameservers/models.py index e7a3331..db78ecb 100644 --- a/src/gameservers/models.py +++ b/src/gameservers/models.py @@ -35,9 +35,11 @@ class Server(models.Model): def calc_player_stats(self, days=7): history = self.get_history_stats(days=days) - stats = [tmp.players for tmp in history] - average = sum(stats) / float(len(stats)) # Moving average - return average, min(stats), max(stats) + return history.aggregate( + models.Avg('players'), + models.Min('players'), + models.Max('players'), + ) class ServerHistory(models.Model): diff --git a/src/gameservers/views.py b/src/gameservers/views.py index 2711da4..77fb8a6 100644 --- a/src/gameservers/views.py +++ b/src/gameservers/views.py @@ -15,19 +15,19 @@ class ServerDetailView(generic.DetailView): server = context['server'] context['weekly_history'] = server.get_history_stats(days=7) - avg, min, max = server.calc_player_stats(days=1) - context['daily_average'] = avg - context['daily_min'] = min - context['daily_max'] = max + stats = server.calc_player_stats(days=1) + context['daily_average'] = stats['players__avg'] + context['daily_min'] = stats['players__min'] + context['daily_max'] = stats['players__max'] - avg, min, max = server.calc_player_stats(days=7) - context['weekly_average'] = avg - context['weekly_min'] = min - context['weekly_max'] = max + stats = server.calc_player_stats(days=7) + context['weekly_average'] = stats['players__avg'] + context['weekly_min'] = stats['players__min'] + context['weekly_max'] = stats['players__max'] - avg, min, max = server.calc_player_stats(days=31) - context['monthly_average'] = avg - context['monthly_min'] = min - context['monthly_max'] = max + stats = server.calc_player_stats(days=31) + context['monthly_average'] = stats['players__avg'] + context['monthly_min'] = stats['players__min'] + context['monthly_max'] = stats['players__max'] return context