Add Minecraft players to /stats/ API
This commit is contained in:
parent
459bff6756
commit
118c32ca7c
20
apiserver/apiserver/api/management/commands/run_minutely.py
Normal file
20
apiserver/apiserver/api/management/commands/run_minutely.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
from django.utils.timezone import now
|
||||||
|
from apiserver.api import models, utils, utils_stats
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Tasks to run on the portal minutely.'
|
||||||
|
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
self.stdout.write('{} - Beginning minutely tasks'.format(str(now())))
|
||||||
|
start = time.time()
|
||||||
|
|
||||||
|
players = utils_stats.check_minecraft_server()
|
||||||
|
self.stdout.write('Found Minecraft players: ' + str(players))
|
||||||
|
|
||||||
|
self.stdout.write('Completed tasks in {} s'.format(
|
||||||
|
str(time.time() - start)[:4]
|
||||||
|
))
|
|
@ -1,8 +1,13 @@
|
||||||
|
import logging
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
|
import requests
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from apiserver.api import models
|
from apiserver.api import models
|
||||||
|
from apiserver import secrets
|
||||||
|
|
||||||
DEFAULTS = {
|
DEFAULTS = {
|
||||||
'last_card_change': time.time(),
|
'last_card_change': time.time(),
|
||||||
|
@ -13,6 +18,7 @@ DEFAULTS = {
|
||||||
'green_count': None,
|
'green_count': None,
|
||||||
'bay_108_temp': None,
|
'bay_108_temp': None,
|
||||||
'bay_110_temp': None,
|
'bay_110_temp': None,
|
||||||
|
'minecraft_players': [],
|
||||||
}
|
}
|
||||||
|
|
||||||
def changed_card():
|
def changed_card():
|
||||||
|
@ -49,3 +55,19 @@ def calc_member_counts():
|
||||||
cache.set('member_count', num_not_paused)
|
cache.set('member_count', num_not_paused)
|
||||||
cache.set('paused_count', num_paused)
|
cache.set('paused_count', num_paused)
|
||||||
cache.set('green_count', num_current + num_prepaid)
|
cache.set('green_count', num_current + num_prepaid)
|
||||||
|
|
||||||
|
def check_minecraft_server():
|
||||||
|
if secrets.MINECRAFT:
|
||||||
|
url = 'https://api.minetools.eu/ping/' + secrets.MINECRAFT
|
||||||
|
|
||||||
|
try:
|
||||||
|
r = requests.get(url, timeout=5)
|
||||||
|
r.raise_for_status()
|
||||||
|
players = [x['name'] for x in r.json()['players']['sample']]
|
||||||
|
cache.set('minecraft_players', players)
|
||||||
|
return players
|
||||||
|
except BaseException as e:
|
||||||
|
cache.set('minecraft_players', [])
|
||||||
|
logger.error('Problem checking Minecraft: {} - {}'.format(e.__class__.__name__, str(e)))
|
||||||
|
|
||||||
|
return []
|
||||||
|
|
|
@ -36,6 +36,7 @@ DOOR_API_TOKEN = ''
|
||||||
# Protospace general info
|
# Protospace general info
|
||||||
DOOR_CODE = ''
|
DOOR_CODE = ''
|
||||||
WIFI_PASS = ''
|
WIFI_PASS = ''
|
||||||
|
MINECRAFT = ''
|
||||||
|
|
||||||
# Backup API tokens
|
# Backup API tokens
|
||||||
# These tokens allow each user to download a backup of member data.
|
# These tokens allow each user to download a backup of member data.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user