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
|
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()
|
||||||
|
|||||||
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)
|
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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user