perf: 修改 base

pull/8605/head
ibuler 3 years ago
parent 832228e184
commit 54e772741b

@ -15,6 +15,10 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='DeviceInfo', name='DeviceInfo',
fields=[ fields=[
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')),
('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('vendor', models.CharField(blank=True, max_length=64, null=True, verbose_name='Vendor')), ('vendor', models.CharField(blank=True, max_length=64, null=True, verbose_name='Vendor')),
('model', models.CharField(blank=True, max_length=54, null=True, verbose_name='Model')), ('model', models.CharField(blank=True, max_length=54, null=True, verbose_name='Model')),
('sn', models.CharField(blank=True, max_length=128, null=True, verbose_name='Serial number')), ('sn', models.CharField(blank=True, max_length=128, null=True, verbose_name='Serial number')),
@ -29,10 +33,7 @@ class Migration(migrations.Migration):
('os_version', models.CharField(blank=True, max_length=16, null=True, verbose_name='OS version')), ('os_version', models.CharField(blank=True, max_length=16, null=True, verbose_name='OS version')),
('os_arch', models.CharField(blank=True, max_length=16, null=True, verbose_name='OS arch')), ('os_arch', models.CharField(blank=True, max_length=16, null=True, verbose_name='OS arch')),
('hostname_raw', models.CharField(blank=True, max_length=128, null=True, verbose_name='Hostname raw')), ('hostname_raw', models.CharField(blank=True, max_length=128, null=True, verbose_name='Hostname raw')),
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('host', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='assets.host', verbose_name='Host')),
('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')),
('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
], ],
options={ options={
'verbose_name': 'DeviceInfo', 'verbose_name': 'DeviceInfo',

@ -27,6 +27,7 @@ def migrate_hardware(apps, *args):
if not hosts: if not hosts:
break break
hardware_infos = []
for host in hosts: for host in hosts:
hardware = hardware_model() hardware = hardware_model()
asset = asset_mapper[host.asset_ptr_id] asset = asset_mapper[host.asset_ptr_id]
@ -34,9 +35,10 @@ def migrate_hardware(apps, *args):
hardware.date_updated = timezone.now() hardware.date_updated = timezone.now()
for name in fields: for name in fields:
setattr(hardware, name, getattr(asset, name)) setattr(hardware, name, getattr(asset, name))
hardware.save() hardware_infos.append(hardware)
host.device_info = hardware
host.save() hardware_model.objects.bulk_create(hardware_infos, ignore_conflicts=True)
created += len(hardware_infos)
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -46,10 +48,5 @@ class Migration(migrations.Migration):
] ]
operations = [ operations = [
migrations.AddField(
model_name='host',
name='device_info',
field=models.ForeignKey(null=True, on_delete=models.deletion.SET_NULL, to='assets.deviceinfo', verbose_name='Device info'),
),
migrations.RunPython(migrate_hardware) migrations.RunPython(migrate_hardware)
] ]

@ -4,14 +4,6 @@ from itertools import groupby
from django.db import migrations from django.db import migrations
from django.db.models import F from django.db.models import F
# ('Linux', 'Linux'),
# ('Unix', 'Unix'),
# ('MacOS', 'MacOS'),
# ('BSD', 'BSD'),
# ('Windows', 'Windows'),
# ('Other', 'Other'),
category_mapper = { category_mapper = {
'Linux': ('host', 'linux'), 'Linux': ('host', 'linux'),
'Unix': ('host', 'unix'), 'Unix': ('host', 'unix'),

@ -1,23 +0,0 @@
# Generated by Django 3.1.14 on 2022-04-12 11:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('assets', '0097_auto_20220407_1726'),
]
operations = [
migrations.RemoveField(
model_name='deviceinfo',
name='host',
),
migrations.AddField(
model_name='host',
name='device_info',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.deviceinfo', verbose_name='Device info'),
),
]

@ -1,3 +1,2 @@
from .common import * from .common import *
from .device_info import *
from .host import * from .host import *

@ -1,51 +0,0 @@
from django.utils.translation import gettext_lazy as _
from django.db import models
from common.mixins.models import CommonModelMixin
__all__ = ['DeviceInfo']
class DeviceInfo(CommonModelMixin):
# Collect
vendor = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Vendor'))
model = models.CharField(max_length=54, null=True, blank=True, verbose_name=_('Model'))
sn = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Serial number'))
cpu_model = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('CPU model'))
cpu_count = models.IntegerField(null=True, verbose_name=_('CPU count'))
cpu_cores = models.IntegerField(null=True, verbose_name=_('CPU cores'))
cpu_vcpus = models.IntegerField(null=True, verbose_name=_('CPU vcpus'))
memory = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Memory'))
disk_total = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('Disk total'))
disk_info = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('Disk info'))
os = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('OS'))
os_version = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('OS version'))
os_arch = models.CharField(max_length=16, blank=True, null=True, verbose_name=_('OS arch'))
hostname_raw = models.CharField(max_length=128, blank=True, null=True, verbose_name=_('Hostname raw'))
@property
def cpu_info(self):
info = ""
if self.cpu_model:
info += self.cpu_model
if self.cpu_count and self.cpu_cores:
info += "{}*{}".format(self.cpu_count, self.cpu_cores)
return info
@property
def hardware_info(self):
if self.cpu_count:
return '{} Core {} {}'.format(
self.cpu_vcpus or self.cpu_count * self.cpu_cores,
self.memory, self.disk_total
)
else:
return ''
def __str__(self):
return '{} of {}'.format(self.hardware_info, self.host.hostname)
class Meta:
verbose_name = _("DeviceInfo")

@ -1,9 +1,9 @@
# from django.db import models from django.db import models
# from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from common.mixins.models import CommonModelMixin
from assets.const import Category from assets.const import Category
from .common import Asset from .common import Asset
# from .device_info import DeviceInfo
class Host(Asset): class Host(Asset):
@ -12,3 +12,48 @@ class Host(Asset):
return super().save(*args, **kwargs) return super().save(*args, **kwargs)
class DeviceInfo(CommonModelMixin):
host = models.ForeignKey(Host, on_delete=models.CASCADE, verbose_name=_("Host"))
# Collect
vendor = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Vendor'))
model = models.CharField(max_length=54, null=True, blank=True, verbose_name=_('Model'))
sn = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Serial number'))
cpu_model = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('CPU model'))
cpu_count = models.IntegerField(null=True, verbose_name=_('CPU count'))
cpu_cores = models.IntegerField(null=True, verbose_name=_('CPU cores'))
cpu_vcpus = models.IntegerField(null=True, verbose_name=_('CPU vcpus'))
memory = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Memory'))
disk_total = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('Disk total'))
disk_info = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('Disk info'))
os = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('OS'))
os_version = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('OS version'))
os_arch = models.CharField(max_length=16, blank=True, null=True, verbose_name=_('OS arch'))
hostname_raw = models.CharField(max_length=128, blank=True, null=True, verbose_name=_('Hostname raw'))
@property
def cpu_info(self):
info = ""
if self.cpu_model:
info += self.cpu_model
if self.cpu_count and self.cpu_cores:
info += "{}*{}".format(self.cpu_count, self.cpu_cores)
return info
@property
def hardware_info(self):
if self.cpu_count:
return '{} Core {} {}'.format(
self.cpu_vcpus or self.cpu_count * self.cpu_cores,
self.memory, self.disk_total
)
else:
return ''
def __str__(self):
return '{} of {}'.format(self.hardware_info, self.host.hostname)
class Meta:
verbose_name = _("DeviceInfo")

@ -4,6 +4,7 @@ from django.utils.translation import gettext_lazy as _
from assets.const import Category, AllTypes from assets.const import Category, AllTypes
from common.fields.model import JsonDictTextField from common.fields.model import JsonDictTextField
__all__ = ['Platform'] __all__ = ['Platform']

@ -0,0 +1,5 @@
from common.db.models import JMSBaseModel
class Protocol(JMSBaseModel):
pass
Loading…
Cancel
Save