Added player averages for each week day.
This commit is contained in:
parent
fa49c0b829
commit
581195ebae
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
import calendar
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@ -41,6 +42,23 @@ class Server(models.Model):
|
|||||||
models.Max('players'),
|
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):
|
class ServerHistory(models.Model):
|
||||||
server = models.ForeignKey(Server)
|
server = models.ForeignKey(Server)
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.views import generic
|
from django.views import generic
|
||||||
|
|
||||||
from .models import Server, ServerHistory
|
from .models import Server
|
||||||
|
|
||||||
class ServerListView(generic.ListView):
|
class ServerListView(generic.ListView):
|
||||||
model = Server
|
model = Server
|
||||||
@ -29,5 +29,7 @@ class ServerDetailView(generic.DetailView):
|
|||||||
context['monthly_average'] = stats['players__avg']
|
context['monthly_average'] = stats['players__avg']
|
||||||
context['monthly_min'] = stats['players__min']
|
context['monthly_min'] = stats['players__min']
|
||||||
context['monthly_max'] = stats['players__max']
|
context['monthly_max'] = stats['players__max']
|
||||||
|
|
||||||
|
context['weekday_averages'] = server.weekday_averages()
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|||||||
@ -68,6 +68,11 @@ body {
|
|||||||
height:200px;
|
height:200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#weekday_averages {
|
||||||
|
width:800px;
|
||||||
|
height:200px;
|
||||||
|
}
|
||||||
|
|
||||||
#tooltip {
|
#tooltip {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: none;
|
display: none;
|
||||||
|
|||||||
@ -56,6 +56,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<h3>Players, last week</h3>
|
||||||
<div id="chart"></div>
|
<div id="chart"></div>
|
||||||
<div id="tooltip"></div>
|
<div id="tooltip"></div>
|
||||||
<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
|
<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
|
||||||
@ -102,5 +103,48 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</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 %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user