Added shortcut functions for getting server stats.

This commit is contained in:
A. Svensson 2015-03-08 14:25:24 +01:00
parent 72ece1b1f4
commit a64f842b83
2 changed files with 23 additions and 20 deletions

View File

@ -1,4 +1,6 @@
from datetime import timedelta
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
@ -25,6 +27,18 @@ class Server(models.Model):
if delta.days >= 7: if delta.days >= 7:
server.delete() 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): class ServerHistory(models.Model):
server = models.ForeignKey(Server) server = models.ForeignKey(Server)

View File

@ -1,9 +1,6 @@
from datetime import timedelta
from django.shortcuts import render from django.shortcuts import render
from django.views import generic from django.views import generic
from django.utils import timezone
from .models import Server, ServerHistory from .models import Server, ServerHistory
@ -16,24 +13,16 @@ class ServerDetailView(generic.DetailView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ServerDetailView, self).get_context_data(**kwargs) context = super(ServerDetailView, self).get_context_data(**kwargs)
server = context['server'] server = context['server']
context['weekly_history'] = server.get_history_stats(days=7)
weekly_history = ServerHistory.objects.filter( avg, min, max = server.calc_player_stats(days=1)
server=server, context['daily_average'] = avg
created__gte=timezone.now() - timedelta(days=7), context['daily_min'] = min
) context['daily_max'] = max
context['weekly_history'] = weekly_history
# Moving average for the last day avg, min, max = server.calc_player_stats(days=7)
tmp = [tmp.players for tmp in ServerHistory.objects.filter( context['weekly_average'] = avg
server=server, context['weekly_min'] = min
created__gte=timezone.now() - timedelta(days=1))] context['weekly_max'] = max
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)
return context return context