platform/stats/views.py
2023-10-03 20:43:56 +03:00

54 lines
2.0 KiB
Python

import datetime
import croniter
import validators
from django.utils import timezone
from BaseLib.BaseView import BaseView
from stats.models import Snapshot
class StatsView(BaseView):
endpoint = ''
view_file = 'stats.html'
required_login = True
def get(self):
count = 12
snapshots = list(Snapshot.objects.filter(project=self.request.user.selected_project).order_by('-created_at')[:count])
keys = set()
for snapshot in snapshots:
for key in snapshot.data:
keys.add(key)
keys = list(keys)
keys.sort()
rows = [[key] for key in keys]
times = []
for snapshot in snapshots:
times.append(snapshot.created_at)
for index, key in enumerate(keys):
rows[index].append(snapshot.data.get(key))
self.context['data'] = rows
self.context['times'] = times
self.context['err'] = 'err' in self.request.GET
def post(self):
self.request.user.selected_project.stats_enabled = 'enabled' in self.request.POST
if self.request.POST['link'] == "":
self.request.user.selected_project.stats_link = None
elif validators.url(self.request.POST['link']):
self.request.user.selected_project.stats_link = self.request.POST['link']
else:
return '/stats?err=true'
if self.request.POST['cron'] == "":
self.request.user.selected_project.stats_cron = None
elif croniter.croniter.is_valid(self.request.POST['cron']):
self.request.user.selected_project.stats_cron = self.request.POST['cron']
cron = croniter.croniter(self.request.user.selected_project.stats_cron, timezone.now())
next_date = cron.get_next(datetime.datetime)
self.request.user.selected_project.next_stats_fetch_time = next_date
else:
return '/stats?err=true'
self.request.user.selected_project.save()
return '/stats'