mirror of https://github.com/jumpserver/jumpserver
perf: 优化一波 migrations
parent
23238ca8e0
commit
98355ce468
|
@ -1,16 +0,0 @@
|
||||||
from rest_framework import serializers
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from ..application_category import DBSerializer
|
|
||||||
|
|
||||||
__all__ = ['ClickHouseSerializer']
|
|
||||||
|
|
||||||
|
|
||||||
class ClickHouseSerializer(DBSerializer):
|
|
||||||
port = serializers.IntegerField(
|
|
||||||
default=9000, label=_('Port'), allow_null=True,
|
|
||||||
help_text=_(
|
|
||||||
'Typically, the port is 9000,'
|
|
||||||
'the HTTP interface and the native interface use different ports'
|
|
||||||
),
|
|
||||||
)
|
|
|
@ -117,6 +117,9 @@ class Migration(migrations.Migration):
|
||||||
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
|
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
|
||||||
primary_key=True, serialize=False, to='assets.asset')),
|
primary_key=True, serialize=False, to='assets.asset')),
|
||||||
],
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Host',
|
||||||
|
},
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Database',
|
name='Database',
|
||||||
|
@ -145,6 +148,7 @@ class Migration(migrations.Migration):
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'abstract': False,
|
'abstract': False,
|
||||||
|
'verbose_name': 'Device',
|
||||||
},
|
},
|
||||||
bases=('assets.asset',),
|
bases=('assets.asset',),
|
||||||
),
|
),
|
||||||
|
@ -157,6 +161,7 @@ class Migration(migrations.Migration):
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'abstract': False,
|
'abstract': False,
|
||||||
|
'verbose_name': 'Cloud',
|
||||||
},
|
},
|
||||||
bases=('assets.asset',),
|
bases=('assets.asset',),
|
||||||
),
|
),
|
||||||
|
@ -178,6 +183,7 @@ class Migration(migrations.Migration):
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'abstract': False,
|
'abstract': False,
|
||||||
|
'verbose_name': 'Web',
|
||||||
},
|
},
|
||||||
bases=('assets.asset',),
|
bases=('assets.asset',),
|
||||||
),
|
),
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .common import Asset
|
from .common import Asset
|
||||||
|
|
||||||
|
@ -5,3 +6,6 @@ from .common import Asset
|
||||||
class Cloud(Asset):
|
class Cloud(Asset):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _("Cloud")
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .common import Asset
|
from .common import Asset
|
||||||
|
|
||||||
|
|
||||||
class Device(Asset):
|
class Device(Asset):
|
||||||
pass
|
class Meta:
|
||||||
|
verbose_name = _("Device")
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from .common import Asset
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
__all__ = ['Host']
|
from .common import Asset
|
||||||
|
|
||||||
|
|
||||||
class Host(Asset):
|
class Host(Asset):
|
||||||
pass
|
class Meta:
|
||||||
|
verbose_name = _("Host")
|
||||||
|
|
|
@ -11,3 +11,6 @@ class Web(Asset):
|
||||||
password_selector = models.CharField(max_length=128, blank=True, default='', verbose_name=_("Password selector"))
|
password_selector = models.CharField(max_length=128, blank=True, default='', verbose_name=_("Password selector"))
|
||||||
submit_selector = models.CharField(max_length=128, blank=True, default='', verbose_name=_("Submit selector"))
|
submit_selector = models.CharField(max_length=128, blank=True, default='', verbose_name=_("Submit selector"))
|
||||||
script = models.JSONField(blank=True, default=list, verbose_name=_("Script"))
|
script = models.JSONField(blank=True, default=list, verbose_name=_("Script"))
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _("Web")
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
|
@ -87,11 +87,10 @@ class OperateLogSerializer(serializers.ModelSerializer):
|
||||||
fields_mini = ["id"]
|
fields_mini = ["id"]
|
||||||
fields_small = fields_mini + [
|
fields_small = fields_mini + [
|
||||||
"user", "action", "resource_type",
|
"user", "action", "resource_type",
|
||||||
"resource_type_display", "resource",
|
"resource", "remote_addr", "datetime",
|
||||||
"remote_addr", "datetime", "org_id",
|
"org_id",
|
||||||
]
|
]
|
||||||
fields = fields_small
|
fields = fields_small
|
||||||
extra_kwargs = {"resource_type_display": {"label": _("Resource Type")}}
|
|
||||||
|
|
||||||
|
|
||||||
class PasswordChangeLogSerializer(serializers.ModelSerializer):
|
class PasswordChangeLogSerializer(serializers.ModelSerializer):
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.dispatch import receiver
|
|
||||||
from django.db.models.signals import post_save, pre_save, m2m_changed, pre_delete
|
from django.db.models.signals import post_save, pre_save, m2m_changed, pre_delete
|
||||||
|
from django.dispatch import receiver
|
||||||
|
|
||||||
from audits.handler import (
|
from audits.handler import (
|
||||||
get_instance_current_with_cache_diff, cache_instance_before_data,
|
get_instance_current_with_cache_diff, cache_instance_before_data,
|
||||||
|
@ -13,10 +13,8 @@ from audits.handler import (
|
||||||
from audits.utils import model_to_dict_for_operate_log as model_to_dict
|
from audits.utils import model_to_dict_for_operate_log as model_to_dict
|
||||||
from common.const.signals import POST_ADD, POST_REMOVE, POST_CLEAR, SKIP_SIGNAL
|
from common.const.signals import POST_ADD, POST_REMOVE, POST_CLEAR, SKIP_SIGNAL
|
||||||
from common.signals import django_ready
|
from common.signals import django_ready
|
||||||
|
|
||||||
from ..const import MODELS_NEED_RECORD, ActionChoices
|
from ..const import MODELS_NEED_RECORD, ActionChoices
|
||||||
|
|
||||||
|
|
||||||
M2M_ACTION = {
|
M2M_ACTION = {
|
||||||
POST_ADD: ActionChoices.create,
|
POST_ADD: ActionChoices.create,
|
||||||
POST_REMOVE: ActionChoices.delete,
|
POST_REMOVE: ActionChoices.delete,
|
||||||
|
@ -169,6 +167,7 @@ def on_django_start_set_operate_log_monitor_models(sender, **kwargs):
|
||||||
'PermedAsset', 'PermedAccount', 'MenuPermission',
|
'PermedAsset', 'PermedAccount', 'MenuPermission',
|
||||||
'Permission', 'TicketSession', 'ApplyLoginTicket',
|
'Permission', 'TicketSession', 'ApplyLoginTicket',
|
||||||
'ApplyCommandTicket', 'ApplyLoginAssetTicket',
|
'ApplyCommandTicket', 'ApplyLoginAssetTicket',
|
||||||
|
'FavoriteAsset',
|
||||||
}
|
}
|
||||||
for i, app in enumerate(apps.get_models(), 1):
|
for i, app in enumerate(apps.get_models(), 1):
|
||||||
app_name = app._meta.app_label
|
app_name = app._meta.app_label
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# Generated by Django 3.2.14 on 2022-12-28 10:03
|
# Generated by Django 3.2.14 on 2022-12-28 10:03
|
||||||
|
|
||||||
|
import private_storage.fields
|
||||||
|
import private_storage.storage.files
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
@ -100,7 +102,7 @@ class Migration(migrations.Migration):
|
||||||
models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
|
models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
|
||||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
|
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
|
||||||
('name', models.CharField(max_length=128, null=True, verbose_name='Name')),
|
('name', models.CharField(max_length=128, null=True, verbose_name='Name')),
|
||||||
('path', models.FileField(upload_to='playbooks/')),
|
('path', private_storage.fields.PrivateFileField(storage=private_storage.storage.files.PrivateFileSystemStorage(), upload_to='playbooks/')),
|
||||||
('comment',
|
('comment',
|
||||||
models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Comment')),
|
models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Comment')),
|
||||||
('creator',
|
('creator',
|
||||||
|
@ -109,6 +111,7 @@ class Migration(migrations.Migration):
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'abstract': False,
|
'abstract': False,
|
||||||
|
'ordering': ['date_created']
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
|
@ -242,4 +245,16 @@ class Migration(migrations.Migration):
|
||||||
},
|
},
|
||||||
bases=('ops.jobexecution',),
|
bases=('ops.jobexecution',),
|
||||||
),
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='adhoc',
|
||||||
|
unique_together={('name', 'org_id', 'creator')},
|
||||||
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='job',
|
||||||
|
unique_together={('name', 'org_id', 'creator')},
|
||||||
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='playbook',
|
||||||
|
unique_together={('name', 'org_id', 'creator')},
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,8 +1,26 @@
|
||||||
# Generated by Django 3.2.16 on 2022-12-30 08:08
|
# Generated by Django 3.2.16 on 2022-12-30 08:08
|
||||||
|
|
||||||
|
import django.db.models
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
def compatible(apps, schema_editor):
|
||||||
|
"""
|
||||||
|
兼容旧版本的数据
|
||||||
|
"""
|
||||||
|
model = apps.get_model("ops", "JobExecution")
|
||||||
|
for obj in model.objects.all():
|
||||||
|
if obj.job:
|
||||||
|
if obj.job.type == 'adhoc':
|
||||||
|
obj.material = "{}:{}".format(obj.job.module, obj.job.args)
|
||||||
|
if obj.job.type == 'playbook':
|
||||||
|
obj.material = "{}:{}:{}".format(obj.job.org.name, obj.job.creator.name, obj.job.playbook.name)
|
||||||
|
obj.job_type = obj.job.type
|
||||||
|
obj.save()
|
||||||
|
else:
|
||||||
|
obj.delete()
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
@ -20,4 +38,31 @@ class Migration(migrations.Migration):
|
||||||
name='name',
|
name='name',
|
||||||
field=models.CharField(max_length=1024, verbose_name='Name'),
|
field=models.CharField(max_length=1024, verbose_name='Name'),
|
||||||
),
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='playbook',
|
||||||
|
name='create_method',
|
||||||
|
field=models.CharField(choices=[('blank', 'Blank'), ('vcs', 'VCS')], default='blank', max_length=128, verbose_name='CreateMethod'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='playbook',
|
||||||
|
name='vcs_url',
|
||||||
|
field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='VCS URL'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='jobexecution',
|
||||||
|
name='job',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='executions', to='ops.job'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='jobexecution',
|
||||||
|
name='job_type',
|
||||||
|
field=models.CharField(choices=[('adhoc', 'Adhoc'), ('playbook', 'Playbook')], default='adhoc',
|
||||||
|
max_length=128, verbose_name='Material Type'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='jobexecution',
|
||||||
|
name='material',
|
||||||
|
field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Material'),
|
||||||
|
),
|
||||||
|
migrations.RunPython(compatible),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Generated by Django 3.2.14 on 2023-01-17 03:30
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('ops', '0024_alter_celerytask_date_last_publish'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='playbook',
|
|
||||||
name='create_method',
|
|
||||||
field=models.CharField(choices=[('blank', 'Blank'), ('vcs', 'VCS')], default='blank', max_length=128, verbose_name='CreateMethod'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='playbook',
|
|
||||||
name='vcs_url',
|
|
||||||
field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='VCS URL'),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,19 +0,0 @@
|
||||||
# Generated by Django 3.2.14 on 2023-02-03 08:40
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('ops', '0025_auto_20230117_1130'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='jobexecution',
|
|
||||||
name='job',
|
|
||||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='executions', to='ops.job'),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,41 +0,0 @@
|
||||||
# Generated by Django 3.2.16 on 2023-02-06 11:27
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
def compatible(apps, schema_editor):
|
|
||||||
"""
|
|
||||||
兼容旧版本的数据
|
|
||||||
"""
|
|
||||||
model = apps.get_model("ops", "JobExecution")
|
|
||||||
for obj in model.objects.all():
|
|
||||||
if obj.job:
|
|
||||||
if obj.job.type == 'adhoc':
|
|
||||||
obj.material = "{}:{}".format(obj.job.module, obj.job.args)
|
|
||||||
if obj.job.type == 'playbook':
|
|
||||||
obj.material = "{}:{}:{}".format(obj.job.org.name, obj.job.creator.name, obj.job.playbook.name)
|
|
||||||
obj.job_type = obj.job.type
|
|
||||||
obj.save()
|
|
||||||
else:
|
|
||||||
obj.delete()
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
dependencies = [
|
|
||||||
('ops', '0026_alter_jobexecution_job'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='jobexecution',
|
|
||||||
name='job_type',
|
|
||||||
field=models.CharField(choices=[('adhoc', 'Adhoc'), ('playbook', 'Playbook')], default='adhoc',
|
|
||||||
max_length=128, verbose_name='Material Type'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='jobexecution',
|
|
||||||
name='material',
|
|
||||||
field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Material'),
|
|
||||||
),
|
|
||||||
migrations.RunPython(compatible),
|
|
||||||
]
|
|
|
@ -1,31 +0,0 @@
|
||||||
# Generated by Django 3.2.16 on 2023-02-13 07:03
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
('ops', '0027_auto_20230206_1927'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterModelOptions(
|
|
||||||
name='playbook',
|
|
||||||
options={'ordering': ['date_created']},
|
|
||||||
),
|
|
||||||
migrations.AlterUniqueTogether(
|
|
||||||
name='adhoc',
|
|
||||||
unique_together={('name', 'org_id', 'creator')},
|
|
||||||
),
|
|
||||||
migrations.AlterUniqueTogether(
|
|
||||||
name='job',
|
|
||||||
unique_together={('name', 'org_id', 'creator')},
|
|
||||||
),
|
|
||||||
migrations.AlterUniqueTogether(
|
|
||||||
name='playbook',
|
|
||||||
unique_together={('name', 'org_id', 'creator')},
|
|
||||||
),
|
|
||||||
]
|
|
Loading…
Reference in New Issue