From 2bd849e42f48207c24fa56ab4c645d7878a5cbf3 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Mon, 20 Nov 2017 16:31:20 +0300 Subject: [PATCH] fix --- abonapp/views.py | 3 ++- devapp/dev_types.py | 18 ++++++------- devapp/models.py | 10 ++++--- .../templates/devapp/custom_dev_page/onu.html | 1 - devapp/views.py | 21 +++++++++------ dialing_app/templates/index.html | 27 +++++++++++++++---- dialing_app/urls.py | 1 + dialing_app/views.py | 15 +++++++++++ 8 files changed, 68 insertions(+), 28 deletions(-) diff --git a/abonapp/views.py b/abonapp/views.py index 9c14a34..c5a860d 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -18,7 +18,7 @@ from . import forms from . import models import mydefs from devapp.models import Device, Port as DevPort -from datetime import datetime, date +from datetime import datetime, date, timedelta from taskapp.models import Task from dialing_app.models import AsteriskCDR from statistics.models import getModel, get_dates @@ -389,6 +389,7 @@ def pick_tariff(request, gid, uid): abon.pick_tariff(trf, request.user) else: deadline = datetime.strptime(deadline, '%Y-%m-%d') + deadline += timedelta(hours=23, minutes=59, seconds=59) abon.pick_tariff(trf, request.user, deadline=deadline) messages.success(request, _('Tariff has been picked')) return redirect('abonapp:abon_services', gid=gid, uid=abon.id) diff --git a/devapp/dev_types.py b/devapp/dev_types.py index 3aeea68..ffbf7ae 100644 --- a/devapp/dev_types.py +++ b/devapp/dev_types.py @@ -41,20 +41,19 @@ class DLinkDevice(DevBase, SNMPBaseWorker): return self.get_item('.1.3.6.1.4.1.2021.8.1.101.1') def get_ports(self): - nams = self.get_list('.1.3.6.1.4.1.171.10.134.2.1.1.100.2.1.3') - stats = self.get_list('.1.3.6.1.2.1.2.2.1.7') - macs = self.get_list('.1.3.6.1.2.1.2.2.1.6') + nams = list(self.get_list('.1.3.6.1.4.1.171.10.134.2.1.1.100.2.1.3')) + stats = list(self.get_list('.1.3.6.1.2.1.2.2.1.7')) + macs = list(self.get_list('.1.3.6.1.2.1.2.2.1.6')) speeds = self.get_list('.1.3.6.1.2.1.31.1.1.1.15') res = [] - ln = len(speeds) - for n in range(ln): + for n, speed in enumerate(speeds): status = True if int(stats[n]) == 1 else False res.append(DLinkPort( n+1, nams[n] if len(nams) > 0 else _('does not fetch the name'), status, macs[n] if len(macs) > 0 else _('does not fetch the mac'), - int(speeds[n]) if len(speeds) > 0 else 0, + int(speed or 0), self)) return res @@ -200,11 +199,10 @@ class OnuDevice(DevBase, SNMPBaseWorker): 'signal': int(signal) / 10 if signal != 'NOSUCHINSTANCE' else 0, 'name': self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % num), 'mac': mac, - 'distance': int(distance) / 10 if distance != 'NOSUCHINSTANCE' else 0, - 'uptime': RuTimedelta(timedelta(seconds=int(uptime) / 100)) if uptime != 'NOSUCHINSTANCE' else 0 + 'distance': int(distance) / 10 if distance != 'NOSUCHINSTANCE' else 0 } - except EasySNMPTimeoutError: - return {'err': _('ONU not connected')} + except EasySNMPTimeoutError as e: + return {'err': "%s: %s" % (_('ONU not connected'), e)} diff --git a/devapp/models.py b/devapp/models.py index 7d0ed6c..8611632 100644 --- a/devapp/models.py +++ b/devapp/models.py @@ -23,6 +23,10 @@ class DeviceDBException(Exception): pass +class DeviceMonitoringException(Exception): + pass + + class DeviceManager(models.Manager): @staticmethod def wrap_monitoring_info(devices_queryset): @@ -32,8 +36,8 @@ class DeviceManager(models.Manager): url = '%s/host/status/arr?%s' % (nag_url, '&'.join(addrs)) try: res = requests.get(url).json() - except (requests.exceptions.ConnectionError, JSONDecodeError): - return + except (requests.exceptions.ConnectionError, JSONDecodeError) as e: + raise DeviceMonitoringException(e) for dev in devices_queryset: inf = [x for x in res if x.get('address') == dev.ip_address] if len(inf) > 0: @@ -113,7 +117,7 @@ class Device(models.Model): code = 'psh' elif grp == 92: code = 'str' - elif grp == 80: + elif grp == 80 or grp == 94: code = 'uy' elif grp == 79 or grp == 91: code = 'zrk' diff --git a/devapp/templates/devapp/custom_dev_page/onu.html b/devapp/templates/devapp/custom_dev_page/onu.html index e1cc350..3bcf65e 100644 --- a/devapp/templates/devapp/custom_dev_page/onu.html +++ b/devapp/templates/devapp/custom_dev_page/onu.html @@ -71,7 +71,6 @@ {% trans 'Name on OLT' %}: {{ onu_details.name }}
{% trans 'Distance(m)' %}: {{ onu_details.distance }}
{% trans 'Signal' %}: {{ onu_details.signal }}
- {% trans 'Uptime' %}: {{ onu_details.uptime }}
{% if dev.mac_addr != onu_details.mac %} diff --git a/devapp/views.py b/devapp/views.py index 90ce85b..dc0fa33 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _ from easysnmp import EasySNMPTimeoutError, EasySNMPError from json import dumps -from .models import Device, Port, DeviceDBException +from .models import Device, Port, DeviceDBException, DeviceMonitoringException from mydefs import pag_mn, res_success, res_error, only_admins, ping, order_helper from .forms import DeviceForm, PortForm from abonapp.models import AbonGroup, Abon @@ -25,17 +25,22 @@ def devices(request, grp): group = get_object_or_404(AbonGroup, pk=grp) if not request.user.has_perm('abonapp.can_view_abongroup', group): raise PermissionDenied - devs = Device.objects.filter(user_group=grp).select_related('user_group').only('comment', 'mac_addr', 'devtype', 'user_group', 'pk', 'ip_address') + try: + devs = Device.objects.filter(user_group=group).select_related('user_group').only('comment', 'mac_addr', 'devtype', 'user_group', 'pk', 'ip_address') - # фильтр - dr, field = order_helper(request) - if field: - devs = devs.order_by(field) + # фильтр + dr, field = order_helper(request) + if field: + devs = devs.order_by(field) - devs = pag_mn(request, devs) + devs = pag_mn(request, devs) + devs = Device.objects.wrap_monitoring_info(devs) + + except (DeviceDBException, DeviceMonitoringException) as e: + messages.error(request, e) return render(request, 'devapp/devices.html', { - 'devices': Device.objects.wrap_monitoring_info(devs), + 'devices': devs, 'dir': dr, 'order_by': request.GET.get('order_by'), 'group': group diff --git a/dialing_app/templates/index.html b/dialing_app/templates/index.html index d8a9a92..ae01974 100644 --- a/dialing_app/templates/index.html +++ b/dialing_app/templates/index.html @@ -17,17 +17,34 @@ {% trans 'end' %} {% trans 'disposition' %} + + +
+
+ +
+ +
+ +
+
+
+
+ + {% for log in logs %} - - {% with lurl=log.url %} + + {% with lurl=log.url %} - + @@ -39,8 +56,8 @@ {{ log.answer|date:'d M, H:i:s' }} {{ log.end|date:'d M, H:i:s' }} {{ log.locate_disposition }} - {% endwith %} - + {% endwith %} + {% empty %} {% trans 'Calls was not found' %} diff --git a/dialing_app/urls.py b/dialing_app/urls.py index a35f0e2..3e81add 100644 --- a/dialing_app/urls.py +++ b/dialing_app/urls.py @@ -4,6 +4,7 @@ from . import views urlpatterns = [ url(r'^$', views.home, name='home'), + url(r'^filter$', views.vfilter, name='vfilter'), url(r'^to_abon(?P\+?\d+)$', views.to_abon, name='to_abon'), url(r'^voicemail$', views.vmail, name='vmail') ] diff --git a/dialing_app/views.py b/dialing_app/views.py index 16c3a0a..f3ceebd 100644 --- a/dialing_app/views.py +++ b/dialing_app/views.py @@ -3,6 +3,7 @@ from django.contrib import messages from django.shortcuts import render, redirect from django.utils.translation import ugettext_lazy as _ from guardian.decorators import permission_required_or_403 as permission_required +from django.db.models import Q from abonapp.models import Abon from mydefs import only_admins, pag_mn @@ -49,3 +50,17 @@ def vmail(request): 'title': title, 'vmessages': cdr }) + + +@login_required +@only_admins +def vfilter(request): + s = request.GET.get('s') + cdr_q = Q(src__icontains=s) | Q(dst__icontains=s) + cdr = AsteriskCDR.objects.filter(cdr_q) + return render(request, 'index.html', { + 'logs': cdr, + 'title': _('Find dials'), + 's': s + }) +