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
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)

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')
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)}

10
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'

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 'Distance(m)' %}</b>: {{ onu_details.distance }}<br>
<b>{% trans 'Signal' %}</b>: {{ onu_details.signal }}<br>
<b>{% trans 'Uptime' %}</b>: {{ onu_details.uptime }}<br>
{% if dev.mac_addr != onu_details.mac %}
<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 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

27
dialing_app/templates/index.html

@ -17,17 +17,34 @@
<th>{% trans 'end' %}</th>
<th>{% trans 'disposition' %}</th>
</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>
<tbody>
{% for log in logs %}
<tr>
{% with lurl=log.url %}
<tr>
{% with lurl=log.url %}
<td class="btn-group btn-group-xs btn-group-justify">
<button class="btn btn-default player-btn disabled">
<span class="glyphicon glyphicon-play"></span>
<audio preload="metadata" src="{{ lurl }}"></audio>
</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>
</a>
</td>
@ -39,8 +56,8 @@
<td>{{ log.answer|date:'d M, H:i:s' }}</td>
<td>{{ log.end|date:'d M, H:i:s' }}</td>
<td>{{ log.locate_disposition }}</td>
{% endwith %}
</tr>
{% endwith %}
</tr>
{% empty %}
<tr>
<td colspan="9">{% trans 'Calls was not found' %}</td>

1
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<tel>\+?\d+)$', views.to_abon, name='to_abon'),
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.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
})
Loading…
Cancel
Save