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
|
||||
requests
|
||||
beautifulsoup4
|
||||
redis
|
||||
gunicorn
|
||||
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.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)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user