Removed the redis stuff and replaced with new django model.
--HG-- branch : history_model
This commit is contained in:
parent
2630afa14d
commit
afa8e74b6f
@ -3,6 +3,5 @@ django
|
|||||||
django-debug-toolbar
|
django-debug-toolbar
|
||||||
requests
|
requests
|
||||||
beautifulsoup4
|
beautifulsoup4
|
||||||
redis
|
|
||||||
gunicorn
|
gunicorn
|
||||||
fabric
|
fabric
|
||||||
|
|||||||
28
src/gameservers/migrations/0011_serverhistory.py
Normal file
28
src/gameservers/migrations/0011_serverhistory.py
Normal 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,),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -2,8 +2,6 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
import redis
|
|
||||||
|
|
||||||
|
|
||||||
class Server(models.Model):
|
class Server(models.Model):
|
||||||
title = models.CharField(max_length=255)
|
title = models.CharField(max_length=255)
|
||||||
@ -28,32 +26,14 @@ class Server(models.Model):
|
|||||||
server.delete()
|
server.delete()
|
||||||
|
|
||||||
|
|
||||||
class PlayerHistory(object):
|
class ServerHistory(models.Model):
|
||||||
def __init__(self, redis_settings=dict(host='localhost', port=6379, db=0)):
|
server = models.ForeignKey(Server)
|
||||||
self.redis = redis.StrictRedis(**redis_settings)
|
created = models.DateTimeField(default=timezone.now)
|
||||||
|
players = models.PositiveIntegerField(default=0)
|
||||||
|
|
||||||
# 32256 = 4 times per hour * 24 hours * 7 days * 4 weeks * 12 months
|
class Meta:
|
||||||
self.max_items = 32256
|
ordering = ['-created', 'server']
|
||||||
|
|
||||||
def add_point(self, server, time, players):
|
def __str__(self):
|
||||||
'''Add a new point in the player history.'''
|
return 'History for {} at {}.'.format(self.server, self.created)
|
||||||
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
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user