Loop over offline servers and fill in "empty" history for them.
This commit is contained in:
parent
dd3023d9f1
commit
a8f37d7e28
@ -3,6 +3,7 @@
|
||||
import re
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.utils import timezone
|
||||
|
||||
from gameservers.models import Server, ServerHistory
|
||||
|
||||
@ -88,12 +89,23 @@ class ServerParser(object):
|
||||
class Command(BaseCommand):
|
||||
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):
|
||||
parser = ServerParser()
|
||||
#parser.url = './dump.html' # Use a local file instead when testing
|
||||
servers = parser.run()
|
||||
servers_handled = []
|
||||
new_items = []
|
||||
now = timezone.now()
|
||||
|
||||
for data in 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
|
||||
history = ServerHistory(server=server, players=data['player_count'])
|
||||
new_items.append(history)
|
||||
tmp = self._update_stats(server, data['player_count'], now)
|
||||
new_items.append(tmp)
|
||||
|
||||
# Update "live stats"
|
||||
server.update_stats(data['player_count'])
|
||||
server.save()
|
||||
# Make sure to update servers not available on the page.
|
||||
for server in Server.objects.exclude(last_updated__exact=now):
|
||||
tmp = self._update_stats(server, 0, None)
|
||||
new_items.append(tmp)
|
||||
|
||||
ServerHistory.objects.bulk_create(new_items)
|
||||
Server.remove_old_servers()
|
||||
|
||||
21
src/gameservers/migrations/0013_auto_20150310_1944.py
Normal file
21
src/gameservers/migrations/0013_auto_20150310_1944.py
Normal 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,
|
||||
),
|
||||
]
|
||||
@ -22,7 +22,7 @@ class Server(models.Model):
|
||||
game_url = models.CharField(max_length=255)
|
||||
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_avg = 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))
|
||||
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
|
||||
|
||||
tmp = self.measure_players(days=31)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user