From 2c3e68194258efae5584596d620ce14e4eb1bd88 Mon Sep 17 00:00:00 2001 From: wangyong <864072399@qq.com> Date: Sat, 5 Dec 2015 16:15:19 +0800 Subject: [PATCH] fix bugs --- jasset/asset_api.py | 43 +++++++----- jasset/views.py | 5 +- jumpserver/templatetags/mytags.py | 6 +- static/files/excels/asset.xlsx | Bin 0 -> 24181 bytes .../excels/cmdb_excel_2015_12_01_22_17.xlsx | Bin 5898 -> 0 bytes templates/jasset/asset_detail.html | 44 ++++++------ templates/jasset/asset_edit.html | 3 + templates/jasset/asset_list.html | 63 +++++++++--------- 8 files changed, 92 insertions(+), 72 deletions(-) create mode 100644 static/files/excels/asset.xlsx delete mode 100644 static/files/excels/cmdb_excel_2015_12_01_22_17.xlsx diff --git a/jasset/asset_api.py b/jasset/asset_api.py index 1e808306..36569a43 100644 --- a/jasset/asset_api.py +++ b/jasset/asset_api.py @@ -7,6 +7,7 @@ from jumpserver.api import * from jasset.models import ASSET_STATUS, ASSET_TYPE, ASSET_ENV, IDC, AssetRecord from jperm.ansible_api import MyRunner from jperm.perm_api import gen_resource +from jumpserver.templatetags.mytags import get_disk_info def group_add_asset(group, asset_id=None, asset_ip=None): @@ -156,7 +157,7 @@ def db_asset_alert(asset, username, alert_dic): for group_id in value[1]: group_name = AssetGroup.objects.get(id=int(group_id)).name new.append(group_name) - if old == new: + if sorted(old) == sorted(new): continue else: alert_info = [field_name, ','.join(old), ','.join(new)] @@ -198,14 +199,17 @@ def write_excel(asset_all): workbook = xlsxwriter.Workbook('static/files/excels/%s' % file_name) worksheet = workbook.add_worksheet(u'CMDBæ•°æ®') worksheet.set_first_sheet() - worksheet.set_column('A:Z', 14) - title = [u'主机å', u'IP', u'IDC', u'MAC', u'远控IP', u'CPU', u'内å˜', u'硬盘', u'æ“作系统', u'机柜ä½ç½®', + worksheet.set_column('A:E', 15) + worksheet.set_column('F:F', 40) + worksheet.set_column('G:Z', 15) + title = [u'主机å', u'IP', u'IDC', u'MAC', u'远控IP', u'CPU', u'内å˜(G)', u'硬盘(G)', u'æ“作系统', u'机柜ä½ç½®', u'所属主机组', u'机器状æ€', u'备注'] for asset in asset_all: group_list = [] for p in asset.group.all(): group_list.append(p.name) + disk = get_disk_info(asset.disk) group_all = '/'.join(group_list) status = asset.get_status_display() idc_name = asset.idc.name if asset.idc else u'' @@ -214,12 +218,13 @@ def write_excel(asset_all): system_os = unicode(system_type) + unicode(system_version) alter_dic = [asset.hostname, asset.ip, idc_name, asset.mac, asset.remote_ip, asset.cpu, asset.memory, - asset.disk, system_os, asset.cabinet, group_all, status, - asset.comment] + disk, system_os, asset.cabinet, group_all, status, asset.comment] data.append(alter_dic) format = workbook.add_format() format.set_border(1) format.set_align('center') + format.set_align('vcenter') + format.set_text_wrap() format_title = workbook.add_format() format_title.set_border(1) @@ -308,18 +313,21 @@ def excel_to_db(excel_file): def get_ansible_asset_info(asset_ip, setup_info): - disk_all = setup_info.get("ansible_devices") + print asset_ip disk_need = {} - for disk_name, disk_info in disk_all.iteritems(): - if disk_name.startswith('sd') or disk_name.startswith('hd') or disk_name.startswith('vd'): - disk_size = disk_info.get("size") - if 'M' in disk_size: - disk_format = round(float(disk_size[:-2]) / 1000, 0) - elif 'T' in disk_size: - disk_format = round(float(disk_size[:-2]) * 1000, 0) - else: - disk_format = float(disk_size) - disk_need[disk_name] = disk_format + disk_all = setup_info.get("ansible_devices") + if disk_all: + for disk_name, disk_info in disk_all.iteritems(): + print disk_name, disk_info + if disk_name.startswith('sd') or disk_name.startswith('hd') or disk_name.startswith('vd'): + disk_size = disk_info.get("size", '') + if 'M' in disk_size: + disk_format = round(float(disk_size[:-2]) / 1000, 0) + elif 'T' in disk_size: + disk_format = round(float(disk_size[:-2]) * 1000, 0) + else: + disk_format = float(disk_size[:-2]) + disk_need[disk_name] = disk_format all_ip = setup_info.get("ansible_all_ipv4_addresses") other_ip_list = all_ip.remove(asset_ip) if asset_ip in all_ip else [] other_ip = ','.join(other_ip_list) if other_ip_list else '' @@ -342,7 +350,7 @@ def get_ansible_asset_info(asset_ip, setup_info): # asset_type = setup_info.get("ansible_system") sn = setup_info.get("ansible_product_serial") asset_info = [other_ip, mac, cpu, memory_format, disk, sn, system_type, system_version, brand, system_arch] - + print asset_info return asset_info @@ -357,6 +365,7 @@ def asset_ansible_update(obj_list, name=''): continue else: asset_info = get_ansible_asset_info(asset.ip, setup_info) + print asset other_ip, mac, cpu, memory, disk, sn, system_type, system_version, brand, system_arch = asset_info asset_dic = {"other_ip": other_ip, "mac": mac, diff --git a/jasset/views.py b/jasset/views.py index ac8f166d..37023353 100644 --- a/jasset/views.py +++ b/jasset/views.py @@ -419,10 +419,9 @@ def asset_detail(request): if perm == 'user': for user, role_dic in value.items(): user_perm.append([user, role_dic.get('role', '')]) - elif perm == 'user_group': + elif perm == 'user_group' or perm == 'rule': user_group_perm = value - elif perm == 'rule': - user_rule_perm = value + print perm_info asset_record = AssetRecord.objects.filter(asset=asset).order_by('-alert_time') diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py index 880fd2b1..af41f6b0 100644 --- a/jumpserver/templatetags/mytags.py +++ b/jumpserver/templatetags/mytags.py @@ -276,7 +276,9 @@ def get_push_info(push_id, arg): @register.filter(name='get_cpu_core') def get_cpu_core(cpu_info): - return cpu_info.split('* ')[1] if cpu_info else '' + cpu_core = cpu_info.split('* ')[1] if cpu_info and '*' in cpu_info else cpu_info + return cpu_core + @register.filter(name='get_disk_info') def get_disk_info(disk_info): @@ -287,6 +289,8 @@ def get_disk_info(disk_info): for disk, size in disk_dic.items(): disk_size += size disk_size = int(disk_size) + else: + disk_size = '' except Exception: disk_size = '' return disk_size diff --git a/static/files/excels/asset.xlsx b/static/files/excels/asset.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1b92db891d85cb5736e2ed99e166078360ea90d1 GIT binary patch literal 24181 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 literal 0 HcmV?d00001 diff --git a/static/files/excels/cmdb_excel_2015_12_01_22_17.xlsx b/static/files/excels/cmdb_excel_2015_12_01_22_17.xlsx deleted file mode 100644 index 37718bab375fd8f0f1228321a03d78923e381f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5898 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 D8uumu diff --git a/templates/jasset/asset_detail.html b/templates/jasset/asset_detail.html index dd5305d8..53f9f357 100644 --- a/templates/jasset/asset_detail.html +++ b/templates/jasset/asset_detail.html @@ -193,27 +193,29 @@ <div> <div class="text-left"> {% if perm_info %} - <table class="table"> - <p>授æƒç”¨æˆ·ä¿¡æ¯</p> - <td class="text-navy">授æƒç”¨æˆ·</td> - <td class="text-navy">系统角色</td> - {% for perm in user_perm %} - <tr> - <td class="text-navy"><a href="/juser/user_detail/?id={{ perm.0.id }}">{{ perm.0 }}</a></td> - <td> - <table class="table"> - {% if perm.1 %} - {% for role in perm.1 %} - <tr> - <td class="text-navy"><a href="/jperm/role/perm_role_detail/?id={{ role.id }}">{{ role }}</a></td> - </tr> - {% endfor %} - {% endif %} - </table> - </td> - </tr> - {% endfor %} - </table> + {% if user_perm %} + <table class="table"> + <p>授æƒç”¨æˆ·ä¿¡æ¯</p> + <td class="text-navy">授æƒç”¨æˆ·</td> + <td class="text-navy">系统角色</td> + {% for perm in user_perm %} + <tr> + <td class="text-navy"><a href="/juser/user_detail/?id={{ perm.0.id }}">{{ perm.0 }}</a></td> + <td> + <table class="table"> + {% if perm.1 %} + {% for role in perm.1 %} + <tr> + <td class="text-navy"><a href="/jperm/role/perm_role_detail/?id={{ role.id }}">{{ role }}</a></td> + </tr> + {% endfor %} + {% endif %} + </table> + </td> + </tr> + {% endfor %} + </table> + {% endif %} {% if user_group_perm %} <table class="table"> <p>授æƒç”¨æˆ·ç»„ä¿¡æ¯</p> diff --git a/templates/jasset/asset_edit.html b/templates/jasset/asset_edit.html index a2db11d0..87057973 100644 --- a/templates/jasset/asset_edit.html +++ b/templates/jasset/asset_edit.html @@ -46,6 +46,9 @@ <div class="hr-line-dashed"></div> {{ af.remote_ip|bootstrap_horizontal }} + <div class="hr-line-dashed"></div> + {{ af.mac|bootstrap_horizontal }} + {# <div class="hr-line-dashed"></div>#} {# {{ af.port|bootstrap_horizontal }}#} diff --git a/templates/jasset/asset_list.html b/templates/jasset/asset_list.html index dac011e4..175271e7 100644 --- a/templates/jasset/asset_list.html +++ b/templates/jasset/asset_list.html @@ -127,7 +127,7 @@ <td class="text-center">{{ asset.group.all|group_str2 }}</td> {# <td class="text-center">{{ asset.cpu }}|{{ asset.memory }}|{{ asset.disk }}</td>#} <td class="text-center">{{ asset.system_type|default_if_none:"" }}{{ asset.system_version|default_if_none:"" }}</td> - <td class="text-center"> {{ asset.cpu }} </td> + <td class="text-center"> {{ asset.cpu|get_cpu_core|default_if_none:"" }} </td> <td class="text-center"> {{ asset.memory }}{% if asset.memory %}G{% endif %}</td> <td class="text-center"> {{ asset.disk|get_disk_info }}{% if asset.memory %}G{% endif %}</td> <td class="text-center" data-editable='false'> @@ -144,8 +144,8 @@ <input type="button" id="asset_del" class="btn btn-danger btn-sm" name="del_button" value="åˆ é™¤"/> <a value="/jasset/asset_edit_batch/" type="button" class="btn btn-sm btn-warning iframe">修改</a> <input type="button" id="asset_update" class="btn btn-info btn-sm" name="update_button" value="æ›´æ–°"/> - <input type="button" id="asset_update_all" class="btn btn-primary btn-sm" name="update_button" value="更新全部"/> - <input type="button" id="exec_cmd" class="btn btn-sm btn-danger" name="exec_cmd" value="执行命令"/> +{# <input type="button" id="asset_update_all" class="btn btn-primary btn-sm" name="update_button" value="更新全部"/>#} + <input type="button" id="exec_cmd" class="btn btn-sm btn-primary" name="exec_cmd" value="执行命令"/> </div> {% include 'paginator.html' %} </div> @@ -347,37 +347,40 @@ $('#asset_update').click(function () { var asset_id_all = getIDall(); if (asset_id_all == ''){ - alert("请至少选择一行!"); - return false; - } - layer.msg('玩命更新ä¸...', {time: 200000}); - $.ajax({ - type: "post", - data: {asset_id_all: asset_id_all}, - url: "/jasset/asset_update_batch/", - success: function () { - parent.location.reload(); + if (confirm("更新全部资产信æ¯?")) { + layer.msg('玩命更新ä¸...', {time: 200000}); + $.ajax({ + type: "post", + url: "/jasset/asset_update_batch/?arg=all", + success: function () { + parent.location.reload(); + } + }); } - }); + } + else { + layer.msg('玩命更新ä¸...', {time: 200000}); + $.ajax({ + type: "post", + data: {asset_id_all: asset_id_all}, + url: "/jasset/asset_update_batch/", + success: function () { + parent.location.reload(); + } + }); + } }); -{# function update_tips(){#} -{# layer.tips('我是å¦å¤–一个tips,åªä¸è¿‡æˆ‘长得跟之å‰é‚£ä½ç¨æœ‰äº›ä¸ä¸€æ ·ã€‚', 'å¸é™„å…ƒç´ é€‰æ‹©å™¨', {#} -{# tips: [1, '#3595CC'],#} -{# time: 4000#} +{# $('#asset_update_all').click(function () {#} +{# layer.msg('玩命更新ä¸...', {time: 200000});#} +{# $.ajax({#} +{# type: "post",#} +{# url: "/jasset/asset_update_batch/?arg=all",#} +{# success: function () {#} +{# parent.location.reload();#} +{# }#} {# });#} -{# }#} - - $('#asset_update_all').click(function () { - layer.msg('玩命更新ä¸...', {time: 200000}); - $.ajax({ - type: "post", - url: "/jasset/asset_update_batch/?arg=all", - success: function () { - parent.location.reload(); - } - }); - }); +{# });#} function change_info(){ var args = $("#asset_form").serialize(); -- 2.18.0