mirror of
https://github.com/RobbieHan/sandboxMP.git
synced 2026-02-12 07:04:57 +08:00
184 lines
8.2 KiB
Python
184 lines
8.2 KiB
Python
from datetime import datetime
|
|
|
|
from django.db import models
|
|
from django.contrib.auth import get_user_model
|
|
|
|
from simple_history.models import HistoricalRecords
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class AbstractMode(models.Model):
|
|
parent = models.ForeignKey(
|
|
'self', blank=True, null=True, on_delete=models.SET_NULL, related_name='child'
|
|
)
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
|
|
class Code(AbstractMode):
|
|
key = models.CharField(max_length=80, verbose_name='键')
|
|
value = models.CharField(max_length=80, verbose_name='值')
|
|
desc = models.CharField(max_length=100, blank=True, default='', verbose_name='备注')
|
|
|
|
class Meta:
|
|
verbose_name = '字典'
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
class TimeAbstract(models.Model):
|
|
add_time = models.DateTimeField(auto_now_add=True, verbose_name="添加时间")
|
|
modify_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
|
|
class ConnectionAbstract(models.Model):
|
|
auth_method_choices = (
|
|
('private_key', '密钥认证'),
|
|
('password', '密码认证')
|
|
)
|
|
hostname = models.CharField(max_length=50, verbose_name='设备地址(IP或域名)')
|
|
port = models.IntegerField(default=22, verbose_name='SSH端口')
|
|
username = models.CharField(max_length=15, blank=True, default='', verbose_name='SSH用户名')
|
|
password = models.CharField(max_length=80, blank=True, default='', verbose_name='SSH密码')
|
|
private_key = models.CharField(max_length=100, blank=True, default='', verbose_name='密钥路径')
|
|
auth_type = models.CharField(max_length=30, choices=auth_method_choices, default='')
|
|
status = models.CharField(max_length=10, blank=True, default='')
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
|
|
class DeviceAbstract(models.Model):
|
|
sys_hostname = models.CharField(max_length=150, blank=True, default='', verbose_name='主机名')
|
|
mac_address = models.CharField(max_length=150, blank=True, default='', verbose_name='MAC地址')
|
|
sn_number = models.CharField(max_length=150, blank=True, default='', verbose_name='SN号码')
|
|
os_type = models.CharField(max_length=150, blank=True, default='', verbose_name='系统类型')
|
|
device_type = models.CharField(max_length=150, blank=True, default='', verbose_name='设备类型')
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
|
|
class DeviceScanInfo(ConnectionAbstract, DeviceAbstract, TimeAbstract):
|
|
error_message = models.CharField(max_length=80, blank=True, default='', verbose_name='错误信息')
|
|
|
|
class Meta:
|
|
verbose_name = '扫描信息'
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
class ConnectionInfo(ConnectionAbstract, TimeAbstract):
|
|
|
|
class Meta:
|
|
verbose_name = 'SSH连接信息'
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
class Cabinet(models.Model):
|
|
number = models.CharField(max_length=50, verbose_name='机柜编号')
|
|
position = models.CharField(max_length=80, verbose_name='机柜位置')
|
|
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
|
|
|
|
class Meta:
|
|
verbose_name = '机柜信息'
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
class DeviceInfo(AbstractMode, DeviceAbstract, TimeAbstract):
|
|
hostname = models.CharField(max_length=50, verbose_name='设备地址(IP或域名)')
|
|
network_type = models.IntegerField(blank=True, null=True, verbose_name='网络类型')
|
|
service_type = models.IntegerField(blank=True, null=True, verbose_name='服务类型')
|
|
operation_type = models.IntegerField(blank=True, null=True, verbose_name='所属项目')
|
|
config = models.CharField(max_length=80, blank=True, default='', verbose_name='配置信息')
|
|
dev_cabinet = models.IntegerField(blank=True, null=True, verbose_name='机柜信息')
|
|
dev_connection = models.IntegerField(blank=True, null=True, verbose_name='连接信息')
|
|
buyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name="购买日期")
|
|
warrantyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name="到保日期")
|
|
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
|
|
changed_by = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL)
|
|
history = HistoricalRecords(excluded_fields=['add_time', 'modify_time', 'parent'])
|
|
|
|
class Meta:
|
|
verbose_name = '设备信息'
|
|
verbose_name_plural = verbose_name
|
|
|
|
@property
|
|
def _history_user(self):
|
|
return self.changed_by
|
|
|
|
@_history_user.setter
|
|
def _history_user(self, value):
|
|
self.changed_by = value
|
|
|
|
|
|
class DeviceFile(TimeAbstract):
|
|
device = models.ForeignKey('DeviceInfo', blank=True, null=True, on_delete=models.SET_NULL, verbose_name='设备')
|
|
file_content = models.FileField(upload_to="asset_file/%Y/%m", null=True, blank=True, verbose_name="资产文件")
|
|
upload_user = models.CharField(max_length=20, verbose_name="上传人")
|
|
|
|
|
|
class Supplier(models.Model):
|
|
firm = models.CharField(max_length=200, verbose_name='供应商')
|
|
contact_details = models.CharField(max_length=200, verbose_name='联系信息')
|
|
desc = models.CharField(max_length=200, blank=True, default='', verbose_name='备注信息')
|
|
|
|
class Meta:
|
|
verbose_name = '供应商管理'
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
class NetworkAsset(models.Model):
|
|
name = models.CharField(max_length=100, verbose_name='资产名称')
|
|
ip_address = models.CharField(max_length=100, blank=True, default='', verbose_name='IP地址')
|
|
management = models.CharField(max_length=100, blank=True, default='', verbose_name='管理地址')
|
|
show_on_top = models.BooleanField(default=False, verbose_name='首页展示')
|
|
provider = models.ForeignKey('Supplier', blank=True, null=True, on_delete=models.SET_NULL, verbose_name='服务商')
|
|
state = models.BooleanField(default=True, verbose_name='状态')
|
|
buyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='购买日期')
|
|
warrantyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='到保日期')
|
|
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
|
|
|
|
class Meta:
|
|
verbose_name = '网络资产'
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
class NatRule(models.Model):
|
|
internet_ip = models.CharField(max_length=80, blank=True, default='', verbose_name='互联网IP')
|
|
src_port = models.IntegerField(blank=True, default='', verbose_name='源端口')
|
|
lan_ip = models.CharField(max_length=80, blank=True, default='', verbose_name='内网IP')
|
|
dest_port = models.IntegerField(blank=True, default='', verbose_name='目的端口')
|
|
state = models.BooleanField(default=True, verbose_name='状态')
|
|
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
|
|
|
|
class Meta:
|
|
verbose_name = 'NAT规则'
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
class DomainName(AbstractMode):
|
|
dn_type_choices = (('1', '主域名'),('2', '二级域名'))
|
|
domain = models.CharField(max_length=200, verbose_name='域名')
|
|
dn_type = models.CharField(max_length=20, choices=dn_type_choices, default='1')
|
|
addr_resolution = models.ForeignKey('NatRule', blank=True, null=True,
|
|
on_delete=models.SET_NULL, verbose_name='解析地址')
|
|
resolution_server = models.ForeignKey('Supplier', related_name='res_server',
|
|
blank=True, null=True, on_delete=models.SET_NULL, verbose_name='解析服务')
|
|
domain_provider = models.ForeignKey('Supplier', related_name='do_provider',
|
|
blank=True, null=True, on_delete=models.SET_NULL, verbose_name='解析服务')
|
|
state = models.BooleanField(default=True, verbose_name='状态')
|
|
ssl = models.FileField(upload_to="ssl_file/%Y/%m", null=True, blank=True, verbose_name="SSL证书")
|
|
buyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='购买日期')
|
|
warrantyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='到保日期')
|
|
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
|
|
|
|
class Meta:
|
|
verbose_name = '域名管理'
|
|
verbose_name_plural = verbose_name
|
|
|
|
|