| + | ID | +机柜编号 | +机柜位置 | +备注信息 | +操作 | +
|---|
+
diff --git a/apps/cmdb/urls.py b/apps/cmdb/urls.py
index f39f734..f58f0a7 100644
--- a/apps/cmdb/urls.py
+++ b/apps/cmdb/urls.py
@@ -1,7 +1,7 @@
from django.urls import path
from .views import CmdbView
-from . import views_code, views_scan
+from . import views_code, views_scan, views_eam
app_name = 'cmdb'
@@ -19,5 +19,12 @@ urlpatterns = [
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'),
+ path('portal/device_scan/inbound/', views_scan.DeviceScanInboundView.as_view(), name='portal-device_scan-inbound'),
+
+ path('eam/cabinet/', views_eam.CabinetView.as_view(), name='eam-cabinet'),
+ path('eam/cabinet/create/', views_eam.CabinetCreateView.as_view(), name='eam-cabinet-create'),
+ path('eam/cabinet/update/', views_eam.CabinetUpdateView.as_view(), name='eam-cabinet-update'),
+ path('eam/cabinet/list/', views_eam.CabinetListView.as_view(), name='eam-cabinet-list'),
+ path('eam/cabinet/delete/', views_eam.CabinetDeleteView.as_view(), name='eam-cabinet-delete'),
]
diff --git a/apps/cmdb/views_eam.py b/apps/cmdb/views_eam.py
new file mode 100644
index 0000000..68d9018
--- /dev/null
+++ b/apps/cmdb/views_eam.py
@@ -0,0 +1,38 @@
+from django.views.generic import TemplateView
+
+from system.mixin import LoginRequiredMixin
+from custom import (BreadcrumbMixin, SandboxDeleteView,
+ SandboxListView, SandboxUpdateView, SandboxCreateView)
+from .models import Cabinet
+
+
+class CabinetView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
+ template_name = 'cmdb/cabinet.html'
+
+
+class CabinetCreateView(SandboxCreateView):
+ model = Cabinet
+ fields = '__all__'
+
+
+class CabinetUpdateView(SandboxUpdateView):
+ model = Cabinet
+ fields = '__all__'
+
+
+class CabinetListView(SandboxListView):
+ model = Cabinet
+ fields = ['id', 'number', 'position', 'desc']
+
+ def get_filters(self):
+ data = self.request.GET
+ filters = {}
+ if 'number' in data and data['number']:
+ filters['number__icontains'] = data['number']
+ if 'position' in data and data['position']:
+ filters['position__icontains'] = data['position']
+ return filters
+
+
+class CabinetDeleteView(SandboxDeleteView):
+ model = Cabinet
diff --git a/apps/cmdb/views_scan.py b/apps/cmdb/views_scan.py
index 2791bb8..543dd06 100644
--- a/apps/cmdb/views_scan.py
+++ b/apps/cmdb/views_scan.py
@@ -16,7 +16,8 @@ from system.mixin import LoginRequiredMixin
from custom import BreadcrumbMixin, SandboxListView, SandboxDeleteView
from utils.sandbox_utils import ConfigFileMixin
from system.models import Menu
-from .models import DeviceScanInfo
+from .models import (DeviceScanInfo, ConnectionInfo, DeviceInfo,
+ ConnectionAbstract, DeviceAbstract)
from .tasks import scan_execution
error_logger = logging.getLogger('sandbox_error')
@@ -89,4 +90,29 @@ class DeviceScanExecView(LoginRequiredMixin, View):
ret['status'] = 'success'
except AlreadyQueued:
ret['status'] = 'already_queued'
- return JsonResponse(ret)
\ No newline at end of file
+ return JsonResponse(ret)
+
+
+class DeviceScanInboundView(LoginRequiredMixin, View):
+ def post(self, request):
+ ret = dict(result=False)
+ login_succeed = list(DeviceScanInfo.objects.filter(status='succeed').values())
+ connection_fields = [field.name for field in ConnectionAbstract._meta.fields if field.name is not 'id']
+ device_fields = [field.name for field in DeviceAbstract._meta.fields if field.name is not 'id']
+ device_fields.append('hostname')
+ for host in login_succeed:
+ connection_defaults = {key: host[key] for key in host.keys() & connection_fields}
+ device_defaults = {key: host[key] for key in host.keys() & device_fields}
+ connection_info, _ = ConnectionInfo.objects.update_or_create(
+ hostname=host['hostname'],
+ defaults=connection_defaults
+ )
+ connection_id = int(getattr(connection_info, 'id'))
+ device_defaults['dev_connection'] = connection_id
+ device_defaults['changed_by_id'] = request.user.id
+ DeviceInfo.objects.update_or_create(
+ hostname=host['hostname'],
+ defaults=device_defaults
+ )
+ ret['result'] = True
+ return JsonResponse(ret)
diff --git a/apps/custom.py b/apps/custom.py
index 0315e2c..4490fd5 100644
--- a/apps/custom.py
+++ b/apps/custom.py
@@ -84,9 +84,9 @@ class SandboxMultipleObjectMixin:
filters = self.get_filters()
fields = self.get_fields()
if filters:
- queryset = queryset.filter(**self.filters)
+ queryset = queryset.filter(**filters)
if fields:
- queryset = queryset.values(*self.fields)
+ queryset = queryset.values(*fields)
record_filter_count = queryset.count()
diff --git a/templates/cmdb/cabinet.html b/templates/cmdb/cabinet.html
new file mode 100644
index 0000000..219a504
--- /dev/null
+++ b/templates/cmdb/cabinet.html
@@ -0,0 +1,276 @@
+{% extends "base-left.html" %}
+{% load staticfiles %}
+
+{% block css %}
+
+
+
+{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+
+
+
+
+
+ ID
+ 机柜编号
+ 机柜位置
+ 备注信息
+ 操作
+
+