From 8d95ac2cac00ea22fb2de9a388b39526645362bf Mon Sep 17 00:00:00 2001 From: "A. Svensson" Date: Mon, 25 May 2015 18:15:40 +0200 Subject: [PATCH] Added a stats page. --- src/about/urls.py | 3 ++- src/about/views.py | 46 ++++++++++++++++++++++++++++++++++ src/templates/about/stats.html | 37 +++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/templates/about/stats.html diff --git a/src/about/urls.py b/src/about/urls.py index 2a8e6ee..041e416 100644 --- a/src/about/urls.py +++ b/src/about/urls.py @@ -1,8 +1,9 @@ from django.conf.urls import patterns, url -from .views import AboutView +from .views import AboutView, StatsView urlpatterns = patterns('', url(r'^$', AboutView.as_view(), name='index'), + url(r'^stats/$', StatsView.as_view(), name='stats'), ) diff --git a/src/about/views.py b/src/about/views.py index 2ad19e5..554783d 100644 --- a/src/about/views.py +++ b/src/about/views.py @@ -1,7 +1,11 @@ +from datetime import timedelta +from django.utils import timezone + from django.views import generic from .utils import load_readme +from gameservers.models import Server, ServerHistory class AboutView(generic.TemplateView): @@ -14,4 +18,46 @@ class AboutView(generic.TemplateView): context['about_md'] = self.readme_md return context +class StatsView(generic.TemplateView): + template_name = 'about/stats.html' + delta_hour = timedelta(hours=1) + delta_day = timedelta(days=1) + + def get_context_data(self, **kwargs): + context = super(StatsView, self).get_context_data(**kwargs) + + now = timezone.now() + last_update = now - self.delta_day + total_players = 0 + servers_total = 0 + servers_with_players = 0 + servers_online = 0 + servers_warning = 0 + servers_offline = 0 + + for server in Server.objects.all(): + servers_total += 1 + last_update = max(last_update, server.last_updated) + + if server.players_current > 0: + total_players += server.players_current + servers_with_players += 1 + + delta = now - server.last_updated + if delta < self.delta_hour: + servers_online += 1 + elif delta < self.delta_day: + servers_warning += 1 + else: + servers_offline += 1 + + context['last_update'] = last_update + context['total_players'] = total_players + context['servers_with_players'] = servers_with_players + context['servers_total'] = servers_total + context['servers_online'] = servers_online + context['servers_warning'] = servers_warning + context['servers_offline'] = servers_offline + + return context diff --git a/src/templates/about/stats.html b/src/templates/about/stats.html new file mode 100644 index 0000000..1cc008c --- /dev/null +++ b/src/templates/about/stats.html @@ -0,0 +1,37 @@ +{% extends "base_site.html" %} + +{% block title %} + Stats +{% endblock %} + +{% block content %} + +

Statistics

+ Database was last updated + {{last_update|timesince}} + ago. + +

Players

+

There are currently + {{total_players}} players + online, spread out on + {{servers_with_players}} active servers. +

+ +

Servers

+

In total there are + {{servers_total}} servers + in the database.

+ +

Within the last hour, + {{servers_online}} ({% widthratio servers_online servers_total 100 %}%) servers + has been updated.

+ +

+ {{servers_warning}} ({% widthratio servers_warning servers_total 100 %}%) servers + has not been updated for over an hour and are currently in an unknown state.

+ +

Lasty there are + {{servers_offline}} ({% widthratio servers_offline servers_total 100 %}%) servers + that has not been updated for over a day and will be removed automatically after a week of inactivity.

+{% endblock %}