You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

117 lines
3.4 KiB

# -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required, permission_required
from django.core.exceptions import PermissionDenied
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.utils.translation import ugettext as _
from easysnmp import EasySNMPTimeoutError
from .models import Device
from mydefs import pag_mn, res_success, res_error, only_admins, ping, order_helper
from .forms import DeviceForm
@login_required
@only_admins
def devices(request):
devs = Device.objects.all()
# фильтр
dr, field = order_helper(request)
if field:
devs = devs.order_by(field)
print(type(request.GET), request.GET)
import django.http.request
devs = pag_mn(request, devs)
return render(request, 'devapp/devices.html', {
'devices': devs,
'dir': dr,
'order_by': request.GET.get('order_by')
})
@login_required
@permission_required('devapp.delete_device')
def devdel(request, did):
try:
Device.objects.get(pk=did).delete()
return res_success(request, 'devapp:devs')
except Device.DoesNotExist:
return res_error(request, _('Delete failed'))
@login_required
@only_admins
def dev(request, devid=0):
devinst = get_object_or_404(Device, id=devid) if devid != 0 else None
if request.method == 'POST':
if devid == 0:
if not request.user.has_perm('devapp.add_device'):
raise PermissionDenied
else:
if not request.user.has_perm('devapp.change_device'):
raise PermissionDenied
frm = DeviceForm(request.POST, instance=devinst)
if frm.is_valid():
frm.save()
messages.success(request, _('Device info has been saved'))
else:
messages.error(request, _('Form is invalid, check fields and try again'))
else:
frm = DeviceForm(instance=devinst)
return render(request, 'devapp/dev.html', {
'form': frm,
'dev': devinst
})
@login_required
@only_admins
def devview(request, did):
ports = None
uptime = 0
dev = get_object_or_404(Device, id=did)
try:
if ping(dev.ip_address):
if dev.man_passw:
manager = dev.get_manager_klass()(dev.ip_address, dev.man_passw)
uptime = manager.uptime()
ports = manager.get_ports()
else:
messages.warning(request, _('Not Set snmp device password'))
else:
messages.error(request, _('Dot was not pinged'))
except EasySNMPTimeoutError:
messages.error(request, _('wait for a reply from the SNMP Timeout'))
return render(request, 'devapp/ports.html', {
'dev': dev,
'ports': ports,
'uptime': uptime
})
@login_required
@only_admins
def toggle_port(request, did, portid, status=0):
portid = int(portid)
status = int(status)
dev = get_object_or_404(Device, id=int(did))
if ping(dev.ip_address):
if dev.man_passw:
manager = dev.get_manager_klass()(dev.ip_address, dev.man_passw)
ports = manager.get_ports()
if status:
ports[portid-1].enable()
else:
ports[portid-1].disable()
else:
messages.warning(request, _('Not Set snmp device password'))
else:
messages.error(request, _('Dot was not pinged'))
return redirect('devapp:view', did=did)