Added player averages for each week day.
This commit is contained in:
parent
fa49c0b829
commit
581195ebae
@ -1,5 +1,6 @@
|
||||
|
||||
from datetime import timedelta
|
||||
import calendar
|
||||
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
@ -41,6 +42,23 @@ class Server(models.Model):
|
||||
models.Max('players'),
|
||||
)
|
||||
|
||||
def weekday_averages(self):
|
||||
weekdays = []
|
||||
for i, day in enumerate(calendar.day_name):
|
||||
# HACK: do some number juggling to convert from calendar to django,
|
||||
# because SOMEONE didn't bother to follow THE FUCKING STANDARD
|
||||
#
|
||||
# calendar is zero indexed, first day of week defaults to monday
|
||||
# (monday = 0, tuesday = 1 etc.)
|
||||
#
|
||||
# django isn't zero indexed, first day of week defaults to sunday
|
||||
# (sunday = 1, monday = 2 etc.)
|
||||
i += 2
|
||||
if i > 7: i = 1
|
||||
tmp = ServerHistory.objects.filter(server=self, created__week_day=i)
|
||||
avg = tmp.aggregate(models.Avg('players'))['players__avg']
|
||||
weekdays.append((day, int(avg)))
|
||||
return weekdays
|
||||
|
||||
class ServerHistory(models.Model):
|
||||
server = models.ForeignKey(Server)
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
from django.shortcuts import render
|
||||
from django.views import generic
|
||||
|
||||
from .models import Server, ServerHistory
|
||||
from .models import Server
|
||||
|
||||
class ServerListView(generic.ListView):
|
||||
model = Server
|
||||
@ -29,5 +29,7 @@ class ServerDetailView(generic.DetailView):
|
||||
context['monthly_average'] = stats['players__avg']
|
||||
context['monthly_min'] = stats['players__min']
|
||||
context['monthly_max'] = stats['players__max']
|
||||
|
||||
context['weekday_averages'] = server.weekday_averages()
|
||||
return context
|
||||
|
||||
|
||||
@ -68,6 +68,11 @@ body {
|
||||
height:200px;
|
||||
}
|
||||
|
||||
#weekday_averages {
|
||||
width:800px;
|
||||
height:200px;
|
||||
}
|
||||
|
||||
#tooltip {
|
||||
position: absolute;
|
||||
display: none;
|
||||
|
||||
@ -56,6 +56,7 @@
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>Players, last week</h3>
|
||||
<div id="chart"></div>
|
||||
<div id="tooltip"></div>
|
||||
<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
|
||||
@ -102,5 +103,48 @@
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<h3>Players, average per day</h3>
|
||||
<div id="weekday_averages"></div>
|
||||
<script type="text/javascript" src="{% static 'js/jquery.flot.categories.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
var series = [
|
||||
{% for day, players in weekday_averages %}
|
||||
["{{day}}", {{players}}],
|
||||
{% endfor %}
|
||||
];
|
||||
|
||||
var options = {
|
||||
xaxis: {
|
||||
mode: "categories",
|
||||
},
|
||||
bars: {
|
||||
show: true,
|
||||
barWidth: 0.75,
|
||||
align: "center",
|
||||
},
|
||||
grid: {
|
||||
hoverable: true,
|
||||
borderWidth: 0,
|
||||
},
|
||||
};
|
||||
|
||||
$.plot("#weekday_averages", [series], options);
|
||||
|
||||
$("#weekday_averages").bind("plothover", function (event, pos, item) {
|
||||
if (item) {
|
||||
var players = item.datapoint[1];
|
||||
$("#tooltip")
|
||||
.html(players + " players")
|
||||
.css({top: item.pageY+5, left: item.pageX+5})
|
||||
.fadeIn(200);
|
||||
} else {
|
||||
$("#tooltip").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user