diff --git a/requirements.txt b/requirements.txt index 49520f6..60efde2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,5 @@ django django-debug-toolbar requests beautifulsoup4 -redis gunicorn fabric diff --git a/src/gameservers/migrations/0011_serverhistory.py b/src/gameservers/migrations/0011_serverhistory.py new file mode 100644 index 0000000..8b432a7 --- /dev/null +++ b/src/gameservers/migrations/0011_serverhistory.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('gameservers', '0010_auto_20150223_1927'), + ] + + operations = [ + migrations.CreateModel( + name='ServerHistory', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateTimeField(default=django.utils.timezone.now)), + ('players', models.PositiveIntegerField(default=0)), + ('server', models.ForeignKey(to='gameservers.Server')), + ], + options={ + 'ordering': ['-created', 'server'], + }, + bases=(models.Model,), + ), + ] diff --git a/src/gameservers/models.py b/src/gameservers/models.py index 1f270ca..eecc1dc 100644 --- a/src/gameservers/models.py +++ b/src/gameservers/models.py @@ -2,8 +2,6 @@ from django.db import models from django.utils import timezone -import redis - class Server(models.Model): title = models.CharField(max_length=255) @@ -28,32 +26,14 @@ class Server(models.Model): server.delete() -class PlayerHistory(object): - def __init__(self, redis_settings=dict(host='localhost', port=6379, db=0)): - self.redis = redis.StrictRedis(**redis_settings) +class ServerHistory(models.Model): + server = models.ForeignKey(Server) + created = models.DateTimeField(default=timezone.now) + players = models.PositiveIntegerField(default=0) - # 32256 = 4 times per hour * 24 hours * 7 days * 4 weeks * 12 months - self.max_items = 32256 + class Meta: + ordering = ['-created', 'server'] - def add_point(self, server, time, players): - '''Add a new point in the player history.''' - self.redis.lpush(server, '{},{}'.format(time, players)) - - def trim_points(self, server): - '''Trim away too old points and servers in the player history.''' - self.redis.ltrim(server, 0, self.max_items) - # let the list expire after a week without updates - self.redis.expire(server, 604800) - - def get_history(self, server, days=7): - '''Get a range of days in a server's player history.''' - # 96 = 4 times per hour * 24 hours - max_items = days * 96 - - items = [] - for tmp in self.redis.lrange(server, 0, max_items): - time, players = tmp.split(',') - time, players = float(time), int(players) - items.append((time, players)) - return items + def __str__(self): + return 'History for {} at {}.'.format(self.server, self.created)