Loop over offline servers and fill in "empty" history for them.

This commit is contained in:
A. Svensson 2015-03-10 21:17:13 +01:00
parent dd3023d9f1
commit a8f37d7e28
3 changed files with 45 additions and 8 deletions

View File

@ -3,6 +3,7 @@
import re import re
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.utils import timezone
from gameservers.models import Server, ServerHistory from gameservers.models import Server, ServerHistory
@ -88,12 +89,23 @@ class ServerParser(object):
class Command(BaseCommand): class Command(BaseCommand):
help = 'Update history stats for all ss13 servers.' help = 'Update history stats for all ss13 servers.'
def _update_stats(self, server, players, time):
# Create a new record in the history
history = ServerHistory(server=server, players=players)
# Update "live stats"
server.update_stats(players, time=time)
server.save()
return history
def handle(self, *args, **kwargs): def handle(self, *args, **kwargs):
parser = ServerParser() parser = ServerParser()
#parser.url = './dump.html' # Use a local file instead when testing #parser.url = './dump.html' # Use a local file instead when testing
servers = parser.run() servers = parser.run()
servers_handled = [] servers_handled = []
new_items = [] new_items = []
now = timezone.now()
for data in servers: for data in servers:
# Prevent empty servers with identical names to other, active servers # Prevent empty servers with identical names to other, active servers
@ -112,13 +124,13 @@ class Command(BaseCommand):
) )
) )
# Create a new record in the history tmp = self._update_stats(server, data['player_count'], now)
history = ServerHistory(server=server, players=data['player_count']) new_items.append(tmp)
new_items.append(history)
# Update "live stats" # Make sure to update servers not available on the page.
server.update_stats(data['player_count']) for server in Server.objects.exclude(last_updated__exact=now):
server.save() tmp = self._update_stats(server, 0, None)
new_items.append(tmp)
ServerHistory.objects.bulk_create(new_items) ServerHistory.objects.bulk_create(new_items)
Server.remove_old_servers() Server.remove_old_servers()

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('gameservers', '0012_auto_20150309_1442'),
]
operations = [
migrations.AlterField(
model_name='server',
name='last_updated',
field=models.DateTimeField(default=django.utils.timezone.now, editable=False),
preserve_default=True,
),
]

View File

@ -22,7 +22,7 @@ class Server(models.Model):
game_url = models.CharField(max_length=255) game_url = models.CharField(max_length=255)
site_url = models.URLField(blank=True) site_url = models.URLField(blank=True)
last_updated = models.DateTimeField(auto_now=True, default=timezone.now) last_updated = models.DateTimeField(default=timezone.now, editable=False)
players_current = models.PositiveIntegerField(default=0, editable=False) players_current = models.PositiveIntegerField(default=0, editable=False)
players_avg = models.PositiveIntegerField(default=0, editable=False) players_avg = models.PositiveIntegerField(default=0, editable=False)
players_min = models.PositiveIntegerField(default=0, editable=False) players_min = models.PositiveIntegerField(default=0, editable=False)
@ -80,7 +80,11 @@ class Server(models.Model):
weekdays.insert(len(weekdays), weekdays.pop(0)) weekdays.insert(len(weekdays), weekdays.pop(0))
return weekdays return weekdays
def update_stats(self, player_count=0): def update_stats(self, player_count=0, time=None):
# TODO: default to setting current time
if time:
self.last_updated = time
self.players_current = player_count self.players_current = player_count
tmp = self.measure_players(days=31) tmp = self.measure_players(days=31)