platform/stats/management/commands/fetch_stats.py
emmatveev 7238b50ee6
All checks were successful
Deploy Prod / Build (pull_request) Successful in 7s
Deploy Prod / Push (pull_request) Successful in 10s
Deploy Prod / Deploy prod (pull_request) Successful in 14s
Update stats/management/commands/fetch_stats.py
2024-12-02 15:13:32 +03:00

34 lines
1.1 KiB
Python

import datetime
from time import sleep
import croniter
from django.core.management import BaseCommand
from django.utils import timezone
from requests import get
from stats.models import Snapshot
from web.models import Project
class Command(BaseCommand):
def handle(self, *args, **options):
while True:
for project in Project.objects.filter(next_stats_fetch_time__lte=timezone.now()):
if project.stats_enabled:
if not project.stats_link:
continue
try:
response = get(project.stats_link)
except:
continue
if response.status_code != 200:
continue
Snapshot.objects.create(project=project, data=response.json())
if not project.stats_cron:
continue
cron = croniter.croniter(project.stats_cron, timezone.now())
next_date = cron.get_next(datetime.datetime)
project.next_stats_fetch_time = next_date
project.save()
sleep(5 * 60)