#_*_coding:utf-8_*_
__author__ = 'jidong'
from django.db.models import Q
# Create your views here.
from itam.api import *
from iasset import models
from iasset.forms import *
from info.models import ProductModel,Contract
from iuser.models import User
from iservice.models import ServiceInfo
from ilog.models import EventLog
from inetwork.models import IPAddress, Ports
import copy
@require_role(role='user')
def asset_index(request):
"""
资产列表首页
"""
header_title, path1, path2 = u'资产列表', u'资产', u'列表'
idc_all = models.IDC.objects.all()
asset_types = models.ASSET_TYPE_CHOICES
asset_status = models.DEVICE_STATUS
return my_render('iasset/asset/list.html', locals(), request)
def asset_list(request):
"""
资产列表
:param request:
:return:
"""
asset_obj_all = models.Asset.objects.all()
asset_obj = asset_obj_all
# 所有对象, 分页器, 本页对象, 所有页码, 本页页码,是否显示第一页,是否显示最后一页
contacts_all, paginator, rows, page_range, current_page, show_first, show_end = pages(asset_obj, request)
total = asset_obj.count()
rows_list = []
for r in rows.object_list:
r_dict = class_to_dict(r)
asset_select = models.Asset.objects.get(id=r_dict['id'])
r_dict['asset_type'] = ProductModel.objects.get(id=asset_select.model_id).get_asset_type_display()
r_dict['asset_type_key'] = ProductModel.objects.get(id=asset_select.model_id).asset_type
r_dict['status'] = asset_select.get_status_display()
r_dict['ip'] = ''
ports = asset_select.ports_set.all()
if ports.count() > 0:
for i in ports:
r_dict['ip'] += str(i.ip.ipaddress) + ';'
cabinet_obj = get_device_attr(asset_select, r_dict['asset_type_key'], "cabinet")
if cabinet_obj != '' and cabinet_obj != None:
r_dict['cabinet'] = cabinet_obj.location
r_dict['idc'] = cabinet_obj.idc.name
else:
r_dict['cabinet'] = ''
service_obj = get_device_attr(asset_select, r_dict['asset_type_key'], "service")
# print service_obj
if service_obj != '' and service_obj != None:
r_dict['service'] = service_obj.name
else:
r_dict['service'] = ''
rows_list.append(r_dict)
print "rows_list:",rows_list
return HttpResponse(json.dumps({'total': total, 'rows': rows_list}, cls=DatetimeEncoder))
# def get_cabinet(asset_obj,asset_type):
# """
# 根据资产名称返回机柜对象
# """
# asset_obj = asset_obj
# asset_type = asset_type
# if asset_type not in ["parts"]:
# cabinet = eval("asset_obj.%s.cabinet" % asset_type)
# return cabinet
# else:
# return ''
def get_device_attr(asset_obj,asset_type,attribute):
"""
根据设备对象返回设备属性
"""
# asset_obj = asset_obj
# asset_type = asset_type
# attr = attribute
# if asset_type not in ["parts"]:
# ret = eval("asset_obj.%s.%s" % (asset_type,attribute))
# return ret
# else:
# return ''
# type_dict = {
# 'server': "server",
# 'bladecenter': u'刀箱',
# 'blade': u'刀片',
# 'vm': u'虚拟机',
# 'network': u'网络设备',
# 'storage': u'存储设备',
# 'tape': u'带库' ,
# 'security': u'安全设备',
# 'parts': u'配件' ,
# 'others': u'其它类',
# }
ret = eval("asset_obj.%s.%s" % (asset_type, attribute))
return ret
@require_role(role='user')
def asset_add(request):
"""
添加资产
"""
header_title, path1, path2 = u'添加', u'资产', u'添加'
emg = ''
smg = ''
asset_types = models.ASSET_TYPE_CHOICES #设备类型
asset_status = models.DEVICE_STATUS #设备状态
asset_contract = Contract.objects.all() #合同
cabinet_all = models.Cabinet.objects.all() #机柜
service_all = ServiceInfo.objects.all() #服务
os_all = models.OS.objects.all() #操作系统
current_user = User.objects.get(username=request.user.username) #当前登录用户
bladecenter_all = models.BladeCenter.objects.all()
# hosts_all = Asset.objects.select_related().all()
if request.method == 'GET':
asset_type = request.GET['asset_type']
modals_all = ProductModel.objects.filter(asset_type=asset_type)
include_html = 'iasset/asset/add/%s.html' % asset_type
if asset_type == 'vm':
hosts_all = Asset.objects.filter(model__asset_type="server")
elif asset_type == 'blade':
hosts_all = Asset.objects.filter(model__asset_type="bladecenter")
else:
hosts_all = Asset.objects.filter(Q(model__asset_type="server") | Q(model__asset_type="bladecenter"))
# print "asset_type:", asset_type
# print "modals_all:", modals_all
# print "service_all:", service_all
# print "cabinet_all:", cabinet_all
if request.method == 'POST':
# postdata = request.POST
postdata = copy.deepcopy(request.POST) #深复制才能修改postdata的值
print "POST:", postdata
print "type(request.POST):", type(postdata)
print "request.session:",request.session
# postdata['create_person'] = current_user.id
# postdata['update_person'] = current_user.id
asset_form = AssetForm(postdata)
# print 'asset_form:',asset_form
if asset_form.is_valid():
asset_name = asset_form.cleaned_data['name']
if models.Asset.objects.filter(name=asset_name):
emg = u'添加失败, 此设备 %s 已存在!' % asset_name
else:
asset_obj = asset_form.save(commit=False)
try:
# 由于asset和contract之间是多对多关系,默认不能为空,所以要单拿出来添加,
# 如果提交的数据中contract为空,那么不添加该字段到数据库。
# 在forms.py 验证时已将contract字段排除
contract_obj = Contract.objects.get(id=postdata['contract'])
except Exception,e:
print e
else:
asset_obj.contract.add(contract_obj)
asset_obj.create_person = current_user
asset_obj.update_person = current_user
asset_obj.save()
asset_type = postdata['assettype']
# init = {'asset': models.Asset.objects.get(name=asset_name)}
print "asset_obj:",asset_obj.id
# init = {'asset_id': asset_obj.id}
postdata['asset'] = asset_obj.id
# serverformset = ServerForm(postdata, initial=init)
# if serverformset.is_valid():
# serverformset.save()
# else:
# emg = serverformset.errors.as_json()
ret = device_save(asset_type,postdata)
if ret['status'] == 0:
smg = u'设备: %s添加成功' % asset_name
else:
emg = ret['emg']
else:
# emg = asset_form.non_field_errors()
emg = asset_form.errors.as_json()
print 'error message:',emg
return HttpResponse(json.dumps({"smg": smg, "emg": emg}))
return my_render('iasset/asset/add/index.html', locals(), request)
def device_save(asset_type, postdata):
"""
设备入库
:param asset_type:
:return:
"""
asset_type_dict = {
'server': ServerForm(postdata),
'bladecenter': BladeCenterForm(postdata),
'blade': BladeForm(postdata),
'vm': VmForm(postdata),
'network': NetworkForm(postdata),
'storage': StorageForm(postdata),
'tape': TapeForm(postdata),
'securit
- 1
- 2
前往页