Removed the redis stuff and replaced with new django model.

--HG--
branch : history_model
This commit is contained in:
A. Svensson 2015-03-08 12:56:59 +01:00
parent 2630afa14d
commit afa8e74b6f
3 changed files with 36 additions and 29 deletions

View File

@ -3,6 +3,5 @@ django
django-debug-toolbar
requests
beautifulsoup4
redis
gunicorn
fabric

View File

@ -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,),
),
]

View File

@ -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)