Dmitry Novikov 8 years ago
parent
commit
2bd849e42f
  1. 3
      abonapp/views.py
  2. 18
      devapp/dev_types.py
  3. 10
      devapp/models.py
  4. 1
      devapp/templates/devapp/custom_dev_page/onu.html
  5. 21
      devapp/views.py
  6. 27
      dialing_app/templates/index.html
  7. 1
      dialing_app/urls.py
  8. 15
      dialing_app/views.py

3
abonapp/views.py

@ -18,7 +18,7 @@ from . import forms
from . import models from . import models
import mydefs import mydefs
from devapp.models import Device, Port as DevPort 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 taskapp.models import Task
from dialing_app.models import AsteriskCDR from dialing_app.models import AsteriskCDR
from statistics.models import getModel, get_dates from statistics.models import getModel, get_dates
@ -389,6 +389,7 @@ def pick_tariff(request, gid, uid):
abon.pick_tariff(trf, request.user) abon.pick_tariff(trf, request.user)
else: else:
deadline = datetime.strptime(deadline, '%Y-%m-%d') deadline = datetime.strptime(deadline, '%Y-%m-%d')
deadline += timedelta(hours=23, minutes=59, seconds=59)
abon.pick_tariff(trf, request.user, deadline=deadline) abon.pick_tariff(trf, request.user, deadline=deadline)
messages.success(request, _('Tariff has been picked')) messages.success(request, _('Tariff has been picked'))
return redirect('abonapp:abon_services', gid=gid, uid=abon.id) return redirect('abonapp:abon_services', gid=gid, uid=abon.id)

18
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') return self.get_item('.1.3.6.1.4.1.2021.8.1.101.1')
def get_ports(self): 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') speeds = self.get_list('.1.3.6.1.2.1.31.1.1.1.15')
res = [] res = []
ln = len(speeds)
for n in range(ln):
for n, speed in enumerate(speeds):
status = True if int(stats[n]) == 1 else False status = True if int(stats[n]) == 1 else False
res.append(DLinkPort( res.append(DLinkPort(
n+1, n+1,
nams[n] if len(nams) > 0 else _('does not fetch the name'), nams[n] if len(nams) > 0 else _('does not fetch the name'),
status, status,
macs[n] if len(macs) > 0 else _('does not fetch the mac'), 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)) self))
return res return res
@ -200,11 +199,10 @@ class OnuDevice(DevBase, SNMPBaseWorker):
'signal': int(signal) / 10 if signal != 'NOSUCHINSTANCE' else 0, '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), 'name': self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % num),
'mac': mac, '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)}

10
devapp/models.py

@ -23,6 +23,10 @@ class DeviceDBException(Exception):
pass pass
class DeviceMonitoringException(Exception):
pass
class DeviceManager(models.Manager): class DeviceManager(models.Manager):
@staticmethod @staticmethod
def wrap_monitoring_info(devices_queryset): def wrap_monitoring_info(devices_queryset):
@ -32,8 +36,8 @@ class DeviceManager(models.Manager):
url = '%s/host/status/arr?%s' % (nag_url, '&'.join(addrs)) url = '%s/host/status/arr?%s' % (nag_url, '&'.join(addrs))
try: try:
res = requests.get(url).json() 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: for dev in devices_queryset:
inf = [x for x in res if x.get('address') == dev.ip_address] inf = [x for x in res if x.get('address') == dev.ip_address]
if len(inf) > 0: if len(inf) > 0:
@ -113,7 +117,7 @@ class Device(models.Model):
code = 'psh' code = 'psh'
elif grp == 92: elif grp == 92:
code = 'str' code = 'str'
elif grp == 80:
elif grp == 80 or grp == 94:
code = 'uy' code = 'uy'
elif grp == 79 or grp == 91: elif grp == 79 or grp == 91:
code = 'zrk' code = 'zrk'

1
devapp/templates/devapp/custom_dev_page/onu.html

@ -71,7 +71,6 @@
<b>{% trans 'Name on OLT' %}</b>: {{ onu_details.name }}<br> <b>{% trans 'Name on OLT' %}</b>: {{ onu_details.name }}<br>
<b>{% trans 'Distance(m)' %}</b>: {{ onu_details.distance }}<br> <b>{% trans 'Distance(m)' %}</b>: {{ onu_details.distance }}<br>
<b>{% trans 'Signal' %}</b>: {{ onu_details.signal }}<br> <b>{% trans 'Signal' %}</b>: {{ onu_details.signal }}<br>
<b>{% trans 'Uptime' %}</b>: {{ onu_details.uptime }}<br>
{% if dev.mac_addr != onu_details.mac %} {% if dev.mac_addr != onu_details.mac %}
<span class="text-danger"> <span class="text-danger">

21
devapp/views.py

@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _
from easysnmp import EasySNMPTimeoutError, EasySNMPError from easysnmp import EasySNMPTimeoutError, EasySNMPError
from json import dumps 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 mydefs import pag_mn, res_success, res_error, only_admins, ping, order_helper
from .forms import DeviceForm, PortForm from .forms import DeviceForm, PortForm
from abonapp.models import AbonGroup, Abon from abonapp.models import AbonGroup, Abon
@ -25,17 +25,22 @@ def devices(request, grp):
group = get_object_or_404(AbonGroup, pk=grp) group = get_object_or_404(AbonGroup, pk=grp)
if not request.user.has_perm('abonapp.can_view_abongroup', group): if not request.user.has_perm('abonapp.can_view_abongroup', group):
raise PermissionDenied 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', { return render(request, 'devapp/devices.html', {
'devices': Device.objects.wrap_monitoring_info(devs),
'devices': devs,
'dir': dr, 'dir': dr,
'order_by': request.GET.get('order_by'), 'order_by': request.GET.get('order_by'),
'group': group 'group': group

27
dialing_app/templates/index.html

@ -17,17 +17,34 @@
<th>{% trans 'end' %}</th> <th>{% trans 'end' %}</th>
<th>{% trans 'disposition' %}</th> <th>{% trans 'disposition' %}</th>
</tr> </tr>
<tr>
<th colspan="9">
<form class="form-inline" action="{% url 'dialapp:vfilter' %}" method="get">
<div class="form-group">
<label class="sr-only" for="dialsearch">{% trans 'Find dials' %}</label>
<div class="input-group input-group-sm">
<input type="text" class="form-control" id="dialsearch" placeholder="{% trans 'Telephone' %}" name="s"{% if s %} value="{{ s }}"{% endif %}>
<div class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-search"></span>
</button>
</div>
</div>
</div>
</form>
</th>
</tr>
</thead> </thead>
<tbody> <tbody>
{% for log in logs %} {% for log in logs %}
<tr>
{% with lurl=log.url %}
<tr>
{% with lurl=log.url %}
<td class="btn-group btn-group-xs btn-group-justify"> <td class="btn-group btn-group-xs btn-group-justify">
<button class="btn btn-default player-btn disabled"> <button class="btn btn-default player-btn disabled">
<span class="glyphicon glyphicon-play"></span> <span class="glyphicon glyphicon-play"></span>
<audio preload="metadata" src="{{ lurl }}"></audio> <audio preload="metadata" src="{{ lurl }}"></audio>
</button> </button>
<a href="{{ lurl }}" class="btn btn-default disabled" target="_blank" title="{% trans 'Download' %}">
<a href="{{ lurl }}" class="btn btn-default disabled" target="_blank" title="{% trans 'Download' %}">
<span class="glyphicon glyphicon-download-alt"></span> <span class="glyphicon glyphicon-download-alt"></span>
</a> </a>
</td> </td>
@ -39,8 +56,8 @@
<td>{{ log.answer|date:'d M, H:i:s' }}</td> <td>{{ log.answer|date:'d M, H:i:s' }}</td>
<td>{{ log.end|date:'d M, H:i:s' }}</td> <td>{{ log.end|date:'d M, H:i:s' }}</td>
<td>{{ log.locate_disposition }}</td> <td>{{ log.locate_disposition }}</td>
{% endwith %}
</tr>
{% endwith %}
</tr>
{% empty %} {% empty %}
<tr> <tr>
<td colspan="9">{% trans 'Calls was not found' %}</td> <td colspan="9">{% trans 'Calls was not found' %}</td>

1
dialing_app/urls.py

@ -4,6 +4,7 @@ from . import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.home, name='home'), url(r'^$', views.home, name='home'),
url(r'^filter$', views.vfilter, name='vfilter'),
url(r'^to_abon(?P<tel>\+?\d+)$', views.to_abon, name='to_abon'), url(r'^to_abon(?P<tel>\+?\d+)$', views.to_abon, name='to_abon'),
url(r'^voicemail$', views.vmail, name='vmail') url(r'^voicemail$', views.vmail, name='vmail')
] ]

15
dialing_app/views.py

@ -3,6 +3,7 @@ from django.contrib import messages
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from guardian.decorators import permission_required_or_403 as permission_required from guardian.decorators import permission_required_or_403 as permission_required
from django.db.models import Q
from abonapp.models import Abon from abonapp.models import Abon
from mydefs import only_admins, pag_mn from mydefs import only_admins, pag_mn
@ -49,3 +50,17 @@ def vmail(request):
'title': title, 'title': title,
'vmessages': cdr '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
})
Loading…
Cancel
Save