diff --git a/apps/assets/forms.py b/apps/assets/forms.py
index 101ad854b..9af1896ae 100644
--- a/apps/assets/forms.py
+++ b/apps/assets/forms.py
@@ -12,11 +12,13 @@ class AssetForm(forms.ModelForm):
fields = [
"ip", "other_ip", "remote_card_ip", "hostname", "port", "groups", "username", "password",
"idc", "mac_address", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos",
- "number", "status", "type", "env", "sn", "is_active", "comment"
+ "number", "status", "type", "env", "sn", "is_active", "comment", "admin_user", "system_user"
]
widgets = {
- 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select asset groups')}),
+ 'groups': forms.SelectMultiple(attrs={'class': 'select2-groups', 'data-placeholder': _('Select asset groups')}),
+ 'system_user': forms.SelectMultiple(attrs={'class': 'select2-system-user', 'data-placeholder': _('Select asset system user')}),
+ # 'admin_user': forms.SelectMultiple(attrs={'class': 'select2-admin-user', 'data-placeholder': _('Select asset admin user')}),
}
diff --git a/apps/assets/models.py b/apps/assets/models.py
index 010b8b20e..52c11fb8c 100644
--- a/apps/assets/models.py
+++ b/apps/assets/models.py
@@ -7,18 +7,6 @@ from django.utils.translation import ugettext_lazy as _
from common.utils import encrypt, decrypt
-
-class AssetGroup(models.Model):
- name = models.CharField(max_length=64, unique=True, verbose_name=_('Name'))
- created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
- comment = models.TextField(null=True, blank=True, verbose_name=_('Comment'))
-
- def __unicode__(self):
- return self.name
-
- class Meta:
- db_table = 'asset_group'
-
logger = logging.getLogger(__name__)
@@ -66,8 +54,8 @@ class IDC(models.Model):
class AssetExtend(models.Model):
- key = models.CharField(max_length=64, verbose_name=_('KEY'))
- value = models.CharField(max_length=64, verbose_name=_('VALUE'))
+ key = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('KEY'))
+ value = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('VALUE'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by"))
date_created = models.DateTimeField(auto_now=True, null=True, blank=True)
comment = models.TextField(blank=True, verbose_name=_('Comment'))
@@ -272,14 +260,14 @@ class Asset(models.Model):
other_ip = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('Other IP'))
remote_card_ip = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Remote card IP'))
hostname = models.CharField(max_length=128, unique=True, null=True, blank=True, verbose_name=_('Hostname'))
- port = models.IntegerField(null=True, blank=True, verbose_name=_('Port'))
- groups = models.ManyToManyField(AssetGroup, related_name='assets', verbose_name=_('Asset groups'))
+ port = models.IntegerField(default=22, null=True, blank=True, verbose_name=_('Port'))
+ groups = models.ManyToManyField(AssetGroup, blank=True, related_name='assets', verbose_name=_('Asset groups'))
username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Admin user'))
password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_("Admin password"))
- admin_user = models.ForeignKey(AdminUser, null=True, related_name='assets',
+ admin_user = models.ForeignKey(AdminUser, null=True, blank=True, related_name='assets',
on_delete=models.SET_NULL, verbose_name=_("Admin user"))
system_user = models.ManyToManyField(SystemUser, blank=True, related_name='assets', verbose_name=_("System User"))
- idc = models.ForeignKey(IDC, null=True, related_name='assets', on_delete=models.SET_NULL, verbose_name=_('IDC'))
+ idc = models.ForeignKey(IDC, null=True, blank=True, related_name='assets', on_delete=models.SET_NULL, verbose_name=_('IDC'))
mac_address = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address"))
brand = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Brand'))
cpu = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('CPU'))
@@ -288,15 +276,15 @@ class Asset(models.Model):
os = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('OS'))
cabinet_no = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Cabinet number'))
cabinet_pos = models.IntegerField(null=True, blank=True, verbose_name=_('Cabinet position'))
- number = models.CharField(max_length=32, blank=True, verbose_name=_('Asset number'))
- status = models.ForeignKey(AssetExtend, null=True, blank=True,
- related_name="asset_status_extend", verbose_name=_('Asset status'))
- type = models.ForeignKey(AssetExtend, null=True, blank=True,
- related_name="asset_type_extend", verbose_name=_('Asset type'))
- env = models.ForeignKey(AssetExtend, null=True, blank=True,
- related_name="asset_env_extend", verbose_name=_('Asset environment'))
- sn = models.CharField(max_length=128, blank=True, verbose_name=_('Serial number'))
- created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by'))
+ number = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Asset number'))
+ status = models.ForeignKey(AssetExtend, null=True, blank=True, related_name="asset_status_extend",
+ verbose_name=_('Asset status'))
+ type = models.ForeignKey(AssetExtend, null=True, blank=True, related_name="asset_type_extend",
+ verbose_name=_('Asset type'))
+ env = models.ForeignKey(AssetExtend, null=True, blank=True, related_name="asset_env_extend",
+ verbose_name=_('Asset environment'))
+ sn = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Serial number'))
+ created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
is_active = models.BooleanField(default=True, verbose_name=_('Is active'))
date_created = models.DateTimeField(auto_now=True, null=True, blank=True, verbose_name=_('Date added'))
comment = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Comment'))
@@ -332,15 +320,15 @@ class Asset(models.Model):
class Label(models.Model):
- key = models.CharField(max_length=64, verbose_name=_('KEY'))
- value = models.CharField(max_length=64, verbose_name=_('VALUE'))
+ key = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('KEY'))
+ value = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('VALUE'))
asset = models.ForeignKey(Asset, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('Asset'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by"))
date_created = models.DateTimeField(auto_now=True, null=True)
comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment'))
def __unicode__(self):
- return self.name
+ return self.key
class Meta:
db_table = 'label'
@@ -348,4 +336,4 @@ class Label(models.Model):
def generate_fake():
for cls in (Asset, AssetGroup, IDC):
- cls.generate_fake()
+ cls.generate_fake()
\ No newline at end of file
diff --git a/apps/assets/templates/assets/asset_create.html b/apps/assets/templates/assets/asset_create.html
index ccbc25372..f47cfb880 100644
--- a/apps/assets/templates/assets/asset_create.html
+++ b/apps/assets/templates/assets/asset_create.html
@@ -27,67 +27,68 @@
-
@@ -100,7 +101,9 @@
{% block custom_foot_js %}
{% endblock %}
\ No newline at end of file
diff --git a/apps/assets/templates/assets/asset_detail.html b/apps/assets/templates/assets/asset_detail.html
index 51be7b1db..16ce7e32c 100644
--- a/apps/assets/templates/assets/asset_detail.html
+++ b/apps/assets/templates/assets/asset_detail.html
@@ -1,374 +1,247 @@
{% extends 'base.html' %}
+{% load common_tags %}
+{% load static %}
+{% load i18n %}
+
+{% block custom_head_css_js %}
+
+
+
+
+{% endblock %}
{% block content %}
-
+
-
-
{{ asset.ip }}
-
+
-
-
主机详细信息
- 此主机详细信息.
-
-
-
-
-
-
- 主机名 |
- {{ asset.hostname|default_if_none:"" }} |
-
-
- IP |
- {{ asset.ip|default_if_none:"" }} |
-
-
- 其他IP |
-
-
- {% if asset.other_ip %}
- {% for ip in asset.other_ip %}
-
- {{ ip }} |
-
- {% endfor %}
- {% endif %}
-
- |
-
-
- 远控IP |
- {{ asset.remote_ip|default_if_none:"" }} |
-
-
- 端口 |
- {{ asset.port|default_if_none:"" }} |
-
-
-
- 主机组 |
-
-
- {% for asset_group in asset.group.all %}
-
- {{ asset_group.name|default_if_none:"" }} |
-
- {% endfor %}
-
- |
-
-
- 使用默认管理账号 |
-{# {{ asset.use_default_auth|bool2str }} | #}
-{# {{ asset.use_default_auth|bool2str }} {% if not asset.use_default_auth %} {{ asset.username }} {% endif %} | #}
-
-
- 机房 |
- {{ asset.idc.name|default_if_none:"" }} |
-
-
- 硬件厂商型号 |
- {{ asset.brand|default_if_none:"" }} |
-
-
- CPU |
- {{ asset.cpu|default_if_none:"" }} |
-
-
- 内存 |
- {{ asset.memory|default_if_none:"" }}{% if asset.memory %}G{% endif %} |
-
-
- 硬盘 |
-
-
- {% if asset.disk %}
- {% for disk, value in asset.disk %}
-
- {{ disk|default_if_none:"" }}     {{ value|default_if_none:"" }} |
-
- {% endfor %}
- {% endif %}
-
- |
-
-
- 资产编号 |
- {{ asset.number|default_if_none:"" }} |
-
-
- SN |
- {{ asset.sn|default_if_none:"" }} |
-
-
- 主机类型 |
- {{ asset.get_asset_type_display|default_if_none:"" }} |
-
-
- 系统版本 |
- {{ asset.system_type|default_if_none:"" }} {{ asset.system_version|default_if_none:"" }} |
-
-
- 系统平台 |
- {{ asset.system_arch|default_if_none:"" }} |
-
-
- 运行环境 |
- {{ asset.get_env_display|default_if_none:"" }} |
-
-
- 机器状态 |
- {{ asset.get_status_display|default_if_none:"" }} |
-
-
- 机柜号 |
- {{ asset.cabinet|default_if_none:"" }} |
-
-
- 机柜位置 |
- {{ asset.position|default_if_none:"" }} |
-
-
- 激活 |
- {{ asset.is_active }} |
-
-
- 添加日期 |
- {{ asset.date_created|date:"Y-m-d H:i:s" }} |
-
-
- 备注 |
- {{ asset.comment|default_if_none:"" }} |
-
-
+
+
+
+
+
{{ asset.hostname }}
+
+
+
+
+
+
+{# #}
+{# #}
+{# | #}
+
+
+ {% trans 'Hostname' %}: |
+ {{ asset.hostname }} |
+
+
+ {% trans 'IP' %}: |
+ {{ asset.ip }} |
+
+
+ {% trans 'Other IP' %}: |
+ {{ asset.other_ip }} |
+
+
+ {% trans 'Remote card IP' %}: |
+ {{ asset.remote_card_ip }} |
+
+
+ {% trans 'Port' %}: |
+ {{ asset.port }} |
+
+
+ {% trans 'Mac address' %}: |
+ {{ asset.mac_addr }} |
+
+
+ {% trans 'CPU' %}: |
+ {{ asset.cpu }} |
+
+
+ {% trans 'Memory' %}: |
+ {{ asset.memory }} |
+
+
+ {% trans 'Disk' %}: |
+ {{ asset.disk }} |
+
+
+ {% trans 'Label' %}: |
+ {% for label in asset.label_set.all %}
+ {{ label.key }} - {{ label.value }} |
+ {% endfor %}
+
+
+ {% trans 'OS' %}: |
+ {{ asset.os }} |
+
+
+ {% trans 'Mac address' %}: |
+ {{ asset.mac_addr }} |
+
+
+ {% trans 'Asset status' %}: |
+ {{ asset.status }} |
+
+
+ {% trans 'Is active' %}: |
+ {{ asset.is_active }} |
+
+
+ {% trans 'Asset type' %}: |
+ {{ asset.type }} |
+
+
+ {% trans 'Asset environment' %}: |
+ {{ asset.env }} |
+
+
+ {% trans 'Serial number' %}: |
+ {{ asset.sn }} |
+
+
+ {% trans 'Asset number' %}: |
+ {{ asset.number }} |
+
+
+ {% trans 'Created by' %}: |
+ {{ asset.created_by }} |
+
+
+ {% trans 'Date joined' %}: |
+ {{ asset.date_joined|date:"Y-m-j H:i:s" }} |
+
+
+ {% trans 'Comment' %}: |
+ {{ asset.comment }} |
+
+
+
+
-
-
-
-
-
-
-
-
主机所有授权的信息
- 包含了此主机所有授权的信息.
-
-
-
-
- {% if perm_info %}
- {% if user_perm %}
-
- 授权用户信息
- 授权用户 |
- 关联用户 |
- {% for perm in user_perm %}
+
+
+
+ {% trans 'Quick modify' %}
+
+
+
+
+
+ {% trans 'Active' %}: |
+
+
+ |
+
+
+ {% trans 'Enable OTP' %}: |
+
+
+ |
+
+
+ {% trans 'Reset password' %}: |
+
+
+
+
+ |
+
+
+ {% trans 'Reset ssh key' %}: |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ {% trans 'Asset group' %}
+
+
+
+
+
- {% endif %}
- {% if user_group_perm %}
-
- 授权用户组信息
- 授权用户组 |
- 组详情 |
- {% for user_group in user_group_perm %}
-
- {{ user_group }} |
- 详情 |
-
- {% endfor %}
-
- {% endif %}
+
+
+
+ |
+
+
- {% if user_rule_perm %}
-
- 授权规则信息
- 授权规则 |
- 详情 |
- {% for rule in user_rule_perm %}
-
- {{ rule }} |
- 详情 |
-
- {% endfor %}
-
- {% endif %}
- {% else %}
-
(暂无)
- {% endif %}
+ {% for group in asset.groups.all %}
+
+ {{ group.name }} |
+
+
+ |
+
+ {% endfor %}
+
+
+
-
-
-
主机修改记录
- 包含了此主机所有历史修改记录.
-
-
-
- {% if asset_record %}
-{# {% for r in asset_record %}#}
-{#
#}
-{#
#}
-{#
{{ r.alert_time|naturaltime }}#}
-{#
{{ r.username }}#}
-{# {% for i in r.content|str_to_list %}#}
-{#
{{ i.0 }} 由 {{ i.1|str_to_code }} 改为 {{ i.2|str_to_code }}
#}
-{# {% endfor %}#}
-{#
{{ r.alert_time }}#}
-{#
#}
-{#
#}
-{# {% endfor %}#}
- {% else %}
-
(暂无)
- {% endif %}
-
-
-
-
-
-
-
-
-
-
最近一周登录记录
- 此主机最近一周用户登录信息.
-
-
- {% if log %}
- {% for l in log %}
-
-
-
-
- {{ l.user }}
-
-
-
-
详细信息
-
来源IP: {{ l.remote_ip }}
-
开始: {{ l.start_time |date:"Y-m-d H:i:s" }}
-
结束: {{ l.end_time |date:"Y-m-d H:i:s" }}
-
-
-
- {% endfor %}
-
-
-
- {% for l in log_more %}
-
-
-
-
- {{ l.user }}
-
-
-
-
详细信息
-
来源IP: {{ l.remote_ip }}
-
开始: {{ l.start_time |date:"Y-m-d H:i:s" }}
-
结束: {{ l.end_time |date:"Y-m-d H:i:s" }}
-
-
-
- {% endfor %}
- {% else %}
-
(暂无)
- {% endif %}
-
-
-
-
+{% endblock %}
+{% block custom_foot_js %}
-
-
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/apps/assets/templates/assets/asset_list.html b/apps/assets/templates/assets/asset_list.html
index 4895f454c..ca3feca9b 100644
--- a/apps/assets/templates/assets/asset_list.html
+++ b/apps/assets/templates/assets/asset_list.html
@@ -117,7 +117,7 @@
|
-
{{ asset.hostname }} |
+
{{ asset.hostname }} |
{{ asset.ip }} |
{{ asset.system_type }} |
{{ asset.cpu }} | {{ asset.memory }} | {{ asset.disk }} |
diff --git a/apps/assets/views.py b/apps/assets/views.py
index 797366408..ec953f028 100644
--- a/apps/assets/views.py
+++ b/apps/assets/views.py
@@ -10,22 +10,31 @@ from django.urls import reverse_lazy
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.detail import DetailView, SingleObjectMixin
-from .models import Asset, AssetGroup, IDC, AssetExtend, AdminUser, SystemUser
+from .models import Asset, AssetGroup, IDC, AssetExtend, AdminUser, SystemUser, Label
from .forms import AssetForm, AssetGroupForm, IDCForm, AdminUserForm, SystemUserForm
from .hands import AdminUserRequiredMixin
-class AssetCreateView(CreateView):
+class AssetCreateView(AdminUserRequiredMixin, CreateView):
model = Asset
form_class = AssetForm
template_name = 'assets/asset_create.html'
success_url = reverse_lazy('assets:asset-list')
- def form_invalid(self, form):
+ def form_valid(self, form):
asset = form.save(commit=False)
- asset.is_active = 1
+ key = self.request.POST.get('key', '')
+ value = self.request.POST.get('value', '')
asset.save()
- return super(AssetCreateView, self).form_invalid(form)
+ Label.objects.create(key=key, value=value, asset=asset)
+ return super(AssetCreateView, self).form_valid(form)
+
+ def get_context_data(self, **kwargs):
+ context = super(AssetCreateView, self).get_context_data(**kwargs)
+ context.update({'admin_users': AdminUser.objects.all()})
+ assert isinstance(context, object)
+ print(context)
+ return context
class AssetUpdateView(UpdateView):
diff --git a/apps/static/css/style.css b/apps/static/css/style.css
index fb30bde06..4fb38fa03 100644
--- a/apps/static/css/style.css
+++ b/apps/static/css/style.css
@@ -1,5 +1,7 @@
+/*
@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700");
@import url("https://fonts.googleapis.com/css?family=Roboto:400,300,500,700");
+*/
/*
*
* INSPINIA - Responsive Admin Theme