51 lines
1.9 KiB
Python
51 lines
1.9 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 = 20
|
|
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)
|
|
rows = [[] for _ in keys]
|
|
for snapshot in snapshots:
|
|
for index, key in enumerate(keys):
|
|
rows[index].append(snapshot.data.get(key))
|
|
self.context['keys'] = keys
|
|
self.context['data'] = rows
|
|
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'
|