Skip to content

Commit

Permalink
device scan
Browse files Browse the repository at this point in the history
  • Loading branch information
RobbieHan committed Jan 13, 2019
1 parent 9c20493 commit eb10ffe
Show file tree
Hide file tree
Showing 4 changed files with 496 additions and 3 deletions.
6 changes: 6 additions & 0 deletions apps/cmdb/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,10 @@
path('portal/code/delete/', views_code.CodeDeleteView.as_view(), name='portal-code-delete'),

path('portal/scan_config/', views_scan.ScanConfigView.as_view(), name='portal-scan_config'),
path('portal/device_scan/', views_scan.DeviceScanView.as_view(), name='portal-device_scan'),
path('portal/device_scan/list/', views_scan.DeviceScanListView.as_view(), name='portal-device_scan-list'),
path('portal/device_scan/detail/', views_scan.DeviceScanDetailView.as_view(), name='portal-device_scan-detail'),
path('portal/device_scan/delete/', views_scan.DeviceScanDeleteView.as_view(), name='portal-device_scan-delete'),
path('portal/device_scan/exec/', views_scan.DeviceScanExecView.as_view(), name='portal-device_scan-exec'),

]
82 changes: 79 additions & 3 deletions apps/cmdb/views_scan.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,16 @@
import logging
from ruamel import yaml

from django.views.generic import View
from django.views.generic import View, TemplateView
from django.http import JsonResponse
from django.shortcuts import render
from django.shortcuts import render, get_object_or_404


from system.mixin import LoginRequiredMixin
from custom import BreadcrumbMixin
from custom import BreadcrumbMixin, SandboxListView, SandboxDeleteView
from utils.sandbox_utils import ConfigFileMixin
from system.models import Menu
from .models import DeviceScanInfo

error_logger = logging.getLogger('sandbox_error')

Expand Down Expand Up @@ -52,3 +53,78 @@ def post(self, request):
error_logger.error(e)

return JsonResponse(ret)


class DeviceScanView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
template_name = 'cmdb/device_scan.html'


class DeviceScanListView(SandboxListView):
model = DeviceScanInfo
fields = ['id', 'sys_hostname', 'hostname', 'mac_address', 'auth_type', 'status', 'os_type', 'device_type']


class DeviceScanDetailView(LoginRequiredMixin, View):

def get(self, request):
ret = Menu.get_menu_by_request_url(request.path_info)
if 'id' in request.GET and request.GET['id']:
device = get_object_or_404(DeviceScanInfo, pk=int(request.GET['id']))
ret['device'] = device
return render(request, 'cmdb/device_scan_detail.html', ret)


class DeviceScanDeleteView(SandboxDeleteView):
model = DeviceScanInfo


class DeviceScanExecView(LoginRequiredMixin, View):

def get(self, request):
import time
from utils.sandbox_utils import SandboxScan, LoginExecution
info_logger = logging.getLogger('sandbox_info')
ret = dict(result=False)
scan = SandboxScan()
execution = LoginExecution()
scan_type = execution.get_scan_type()
auth_type = execution.get_auth_type()
start_time = time.time()
if scan_type == 'basic_scan':
hosts = scan.basic_scan()
for host in hosts:
DeviceScanInfo.objects.update_or_create(
hostname=host,
)
else:
hosts = scan.os_scan()
login_hosts = [host for host in hosts if host['os'] in ['Linux', 'embedded']]
nologin_hosts = [host for host in hosts if host not in login_hosts]
for host in nologin_hosts:
DeviceScanInfo.objects.update_or_create(
hostname=host['host'],
defaults={
'os_type': host['os']
}
)
for host in login_hosts:
kwargs = {
'hostname': host['host'],
'username': execution.get_ssh_username(),
'port': execution.get_ssh_port(),
'password': execution.get_ssh_password(),
'private_key': execution.get_ssh_private_key()
}
defaults = execution.login_execution(auth_type=auth_type, **kwargs)
DeviceScanInfo.objects.update_or_create(
hostname=host['host'],
defaults=defaults
)
end_time = time.time()
msg = 'Scan task has been completed, execution time: %(time)s, %(num)s hosts are up.' % {
'time': end_time - start_time,
'num': len(hosts)
}
info_logger.info(msg)
ret['result'] = True
return JsonResponse(ret)
Loading

0 comments on commit eb10ffe

Please sign in to comment.