|
|
@ -2,7 +2,7 @@ |
|
|
from json import dumps |
|
|
from json import dumps |
|
|
from django.contrib.gis.shortcuts import render_to_text |
|
|
from django.contrib.gis.shortcuts import render_to_text |
|
|
from django.core.exceptions import PermissionDenied, MultipleObjectsReturned |
|
|
from django.core.exceptions import PermissionDenied, MultipleObjectsReturned |
|
|
from django.db import IntegrityError |
|
|
|
|
|
|
|
|
from django.db import IntegrityError, ProgrammingError |
|
|
from django.db.models import Count |
|
|
from django.db.models import Count |
|
|
from django.shortcuts import render, redirect, get_object_or_404, resolve_url |
|
|
from django.shortcuts import render, redirect, get_object_or_404, resolve_url |
|
|
from django.contrib.auth.decorators import login_required, permission_required |
|
|
from django.contrib.auth.decorators import login_required, permission_required |
|
|
@ -562,6 +562,7 @@ def debtors(request): |
|
|
'invoices': invs |
|
|
'invoices': invs |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
@login_required |
|
|
@mydefs.only_admins |
|
|
@mydefs.only_admins |
|
|
def update_nas(request, group_id): |
|
|
def update_nas(request, group_id): |
|
|
@ -644,6 +645,48 @@ def chgroup_tariff(request, gid): |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required |
|
|
|
|
|
@mydefs.only_admins |
|
|
|
|
|
def charts(request, gid, uid): |
|
|
|
|
|
from statistics.models import getModel |
|
|
|
|
|
from datetime import datetime, date, time, timedelta |
|
|
|
|
|
try: |
|
|
|
|
|
StatElem = getModel() |
|
|
|
|
|
abon = models.Abon.objects.get(pk=uid) |
|
|
|
|
|
if abon.group is None: |
|
|
|
|
|
abon.group = models.AbonGroup.objects.get(pk=gid) |
|
|
|
|
|
abon.save(update_fields=['group']) |
|
|
|
|
|
abongroup = abon.group |
|
|
|
|
|
|
|
|
|
|
|
if abon.ip_address is None: |
|
|
|
|
|
charts_data = None |
|
|
|
|
|
else: |
|
|
|
|
|
charts_data = StatElem.objects.filter(ip=abon.ip_address.ip) |
|
|
|
|
|
oct_limit = StatElem.percentile([cd.octets for cd in charts_data], 0.05) |
|
|
|
|
|
charts_data = ["{x:%d,y:%d}" % (cd.cur_time.timestamp(), cd.octets) for cd in charts_data if |
|
|
|
|
|
cd.octets < oct_limit and cd.octets > 102400] |
|
|
|
|
|
|
|
|
|
|
|
except models.Abon.DoesNotExist: |
|
|
|
|
|
messages.error(request, _('Abon does not exist')) |
|
|
|
|
|
return redirect('abonapp:people_list', gid) |
|
|
|
|
|
except models.AbonGroup.DoesNotExist: |
|
|
|
|
|
messages.error(request, _("Group what you want doesn't exist")) |
|
|
|
|
|
return redirect('abonapp:group_list') |
|
|
|
|
|
except ProgrammingError as e: |
|
|
|
|
|
messages.error(request, e) |
|
|
|
|
|
return redirect('abonapp:abon_home', gid=gid, uid=uid) |
|
|
|
|
|
|
|
|
|
|
|
midnight = datetime.combine(date.today(), time.min) |
|
|
|
|
|
|
|
|
|
|
|
return render(request, 'abonapp/charts.html', { |
|
|
|
|
|
'abon_group': abongroup, |
|
|
|
|
|
'abon': abon, |
|
|
|
|
|
'charts_data': ','.join(charts_data), |
|
|
|
|
|
'time_min': midnight.timestamp(), |
|
|
|
|
|
'time_max': (midnight + timedelta(hours=23, minutes=59, seconds=59)).timestamp() |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# API's |
|
|
# API's |
|
|
|
|
|
|
|
|
def abons(request): |
|
|
def abons(request): |
|
|
|