diff --git a/src/gameservers/models.py b/src/gameservers/models.py index eecc1dc..e7a3331 100644 --- a/src/gameservers/models.py +++ b/src/gameservers/models.py @@ -1,4 +1,6 @@ +from datetime import timedelta + from django.db import models from django.utils import timezone @@ -25,6 +27,18 @@ class Server(models.Model): if delta.days >= 7: server.delete() + def get_history_stats(self, days=7): + return ServerHistory.objects.filter( + server=self, + created__gte=timezone.now() - timedelta(days=days) + ) + + 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) + class ServerHistory(models.Model): server = models.ForeignKey(Server) diff --git a/src/gameservers/views.py b/src/gameservers/views.py index 25c88aa..608df26 100644 --- a/src/gameservers/views.py +++ b/src/gameservers/views.py @@ -1,9 +1,6 @@ -from datetime import timedelta - from django.shortcuts import render from django.views import generic -from django.utils import timezone from .models import Server, ServerHistory @@ -16,24 +13,16 @@ class ServerDetailView(generic.DetailView): def get_context_data(self, **kwargs): context = super(ServerDetailView, self).get_context_data(**kwargs) server = context['server'] + context['weekly_history'] = server.get_history_stats(days=7) - weekly_history = ServerHistory.objects.filter( - server=server, - created__gte=timezone.now() - timedelta(days=7), - ) - context['weekly_history'] = weekly_history + avg, min, max = server.calc_player_stats(days=1) + context['daily_average'] = avg + context['daily_min'] = min + context['daily_max'] = max - # Moving average for the last day - tmp = [tmp.players for tmp in ServerHistory.objects.filter( - server=server, - created__gte=timezone.now() - timedelta(days=1))] - context['daily_average'] = sum(tmp) / float(len(tmp)) - context['daily_min'] = min(tmp) - context['daily_max'] = max(tmp) - - tmp = [tmp.players for tmp in weekly_history] - context['weekly_average'] = sum(tmp) / float(len(tmp)) - context['weekly_min'] = min(tmp) - context['weekly_max'] = max(tmp) + avg, min, max = server.calc_player_stats(days=7) + context['weekly_average'] = avg + context['weekly_min'] = min + context['weekly_max'] = max return context