From 063c42b94dec8abaefdf30536f8b6101b5e8d3e2 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 24 Aug 2022 16:14:32 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=20terminal=20session?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0023_auto_20220817_1716.py | 2 +- apps/assets/const.py | 19 ++-- .../migrations/0095_auto_20220406_1541.py | 26 ------ ...407_1726.py => 0095_auto_20220407_1726.py} | 5 +- .../migrations/0096_auto_20220406_1546.py | 15 --- ...426_1550.py => 0096_auto_20220426_1550.py} | 28 +++--- ...426_1558.py => 0097_auto_20220426_1558.py} | 91 +++++++++---------- ...430_2126.py => 0098_auto_20220430_2126.py} | 14 +-- ...711_1409.py => 0099_auto_20220711_1409.py} | 2 +- ...711_1413.py => 0100_auto_20220711_1413.py} | 2 +- ...803_1448.py => 0101_auto_20220803_1448.py} | 2 +- ...803_1859.py => 0102_auto_20220803_1859.py} | 2 +- ...811_1511.py => 0103_auto_20220811_1511.py} | 26 +++++- ...816_1022.py => 0104_auto_20220816_1022.py} | 2 +- .../migrations/0105_auto_20220810_1449.py | 46 ---------- ...817_1544.py => 0105_auto_20220817_1544.py} | 20 +++- .../migrations/0106_auto_20220811_1449.py | 37 -------- ...819_1523.py => 0106_auto_20220819_1523.py} | 2 +- .../migrations/0110_auto_20220817_1716.py | 32 ------- apps/assets/models/asset/__init__.py | 4 +- .../asset/{network.py => networking.py} | 2 +- apps/assets/models/asset/remote_app.py | 10 -- apps/assets/models/asset/web.py | 8 ++ apps/assets/models/platform.py | 4 +- apps/assets/serializers/asset/category.py | 8 +- apps/terminal/api/session.py | 2 +- .../migrations/0052_auto_20220707_1726.py | 16 +++- apps/terminal/models/session.py | 11 +-- apps/terminal/serializers/session.py | 12 +-- 29 files changed, 167 insertions(+), 283 deletions(-) delete mode 100644 apps/assets/migrations/0095_auto_20220406_1541.py rename apps/assets/migrations/{0097_auto_20220407_1726.py => 0095_auto_20220407_1726.py} (86%) delete mode 100644 apps/assets/migrations/0096_auto_20220406_1546.py rename apps/assets/migrations/{0098_auto_20220426_1550.py => 0096_auto_20220426_1550.py} (83%) rename apps/assets/migrations/{0099_auto_20220426_1558.py => 0097_auto_20220426_1558.py} (74%) rename apps/assets/migrations/{0100_auto_20220430_2126.py => 0098_auto_20220430_2126.py} (82%) rename apps/assets/migrations/{0101_auto_20220711_1409.py => 0099_auto_20220711_1409.py} (99%) rename apps/assets/migrations/{0102_auto_20220711_1413.py => 0100_auto_20220711_1413.py} (97%) rename apps/assets/migrations/{0103_auto_20220803_1448.py => 0101_auto_20220803_1448.py} (97%) rename apps/assets/migrations/{0104_auto_20220803_1859.py => 0102_auto_20220803_1859.py} (97%) rename apps/assets/migrations/{0107_auto_20220811_1511.py => 0103_auto_20220811_1511.py} (62%) rename apps/assets/migrations/{0108_auto_20220816_1022.py => 0104_auto_20220816_1022.py} (97%) delete mode 100644 apps/assets/migrations/0105_auto_20220810_1449.py rename apps/assets/migrations/{0109_auto_20220817_1544.py => 0105_auto_20220817_1544.py} (66%) delete mode 100644 apps/assets/migrations/0106_auto_20220811_1449.py rename apps/assets/migrations/{0111_auto_20220819_1523.py => 0106_auto_20220819_1523.py} (97%) delete mode 100644 apps/assets/migrations/0110_auto_20220817_1716.py rename apps/assets/models/asset/{network.py => networking.py} (60%) delete mode 100644 apps/assets/models/asset/remote_app.py create mode 100644 apps/assets/models/asset/web.py diff --git a/apps/applications/migrations/0023_auto_20220817_1716.py b/apps/applications/migrations/0023_auto_20220817_1716.py index b8b235fe5..b506fcc3b 100644 --- a/apps/applications/migrations/0023_auto_20220817_1716.py +++ b/apps/applications/migrations/0023_auto_20220817_1716.py @@ -9,7 +9,7 @@ class Migration(migrations.Migration): ('applications', '0022_auto_20220817_1346'), ('perms', '0031_auto_20220816_1600'), ('ops', '0022_auto_20220817_1346'), - ('assets', '0109_auto_20220817_1544'), + ('assets', '0105_auto_20220817_1544'), ('tickets', '0020_auto_20220817_1346'), ] diff --git a/apps/assets/const.py b/apps/assets/const.py index f2ec1a882..204bdcb6b 100644 --- a/apps/assets/const.py +++ b/apps/assets/const.py @@ -5,7 +5,7 @@ from common.tree import TreeNode __all__ = [ - 'Category', 'HostTypes', 'NetworkTypes', 'DatabaseTypes', + 'Category', 'HostTypes', 'NetworkingTypes', 'DatabaseTypes', 'WebTypes', 'CloudTypes', 'Protocol', 'AllTypes', ] @@ -26,7 +26,7 @@ class PlatformMixin: class Category(PlatformMixin, ChoicesMixin, models.TextChoices): HOST = 'host', _('Host') - NETWORK = 'network', _("NetworkDevice") + NETWORKING = 'networking', _("NetworkDevice") DATABASE = 'database', _("Database") CLOUD = 'cloud', _("Clouding") WEB = 'web', _("Web") @@ -42,7 +42,7 @@ class Category(PlatformMixin, ChoicesMixin, models.TextChoices): 'has_create_account': True, '_protocols': ['ssh', 'telnet'] }, - cls.NETWORK: { + cls.NETWORKING: { 'has_domain': True, '_protocols': ['ssh', 'telnet'] }, @@ -84,7 +84,7 @@ class HostTypes(PlatformMixin, ChoicesMixin, models.TextChoices): } -class NetworkTypes(PlatformMixin, ChoicesMixin, models.TextChoices): +class NetworkingTypes(PlatformMixin, ChoicesMixin, models.TextChoices): SWITCH = 'switch', _("Switch") ROUTER = 'router', _("Router") FIREWALL = 'firewall', _("Firewall") @@ -121,7 +121,7 @@ class CloudTypes(PlatformMixin, ChoicesMixin, models.TextChoices): class AllTypes(ChoicesMixin, metaclass=IncludesTextChoicesMeta): choices: list includes = [ - HostTypes, NetworkTypes, DatabaseTypes, + HostTypes, NetworkingTypes, DatabaseTypes, WebTypes, CloudTypes ] @@ -150,7 +150,7 @@ class AllTypes(ChoicesMixin, metaclass=IncludesTextChoicesMeta): def category_types(cls): return ( (Category.HOST, HostTypes), - (Category.NETWORK, NetworkTypes), + (Category.NETWORKING, NetworkingTypes), (Category.DATABASE, DatabaseTypes), (Category.WEB, WebTypes), (Category.CLOUD, CloudTypes) @@ -217,6 +217,8 @@ class Protocol(ChoicesMixin, models.TextChoices): mongodb = 'mongodb', 'MongoDB' k8s = 'k8s', 'K8S' + http = 'http', 'HTTP' + https = 'https', 'HTTPS' @classmethod def host_protocols(cls): @@ -245,6 +247,9 @@ class Protocol(ChoicesMixin, models.TextChoices): cls.mongodb: 27017, cls.redis: 6379, - cls.k8s: 0 + cls.k8s: 0, + + cls.http: 80, + cls.https: 443 } diff --git a/apps/assets/migrations/0095_auto_20220406_1541.py b/apps/assets/migrations/0095_auto_20220406_1541.py deleted file mode 100644 index 7b43c92a1..000000000 --- a/apps/assets/migrations/0095_auto_20220406_1541.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.1.14 on 2022-04-06 07:41 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0094_auto_20220402_1736'), - ] - - operations = [ - migrations.AddField( - model_name='asset', - name='category', - field=models.CharField(choices=[('host', 'Host'), ('network', 'Networking'), ('database', 'Database'), ('remote_app', 'Remote app'), ('cloud', 'Clouding')], default='host', max_length=16, verbose_name='Category'), - preserve_default=False, - ), - migrations.AddField( - model_name='asset', - name='type', - field=models.CharField(choices=[('linux', 'Linux'), ('windows', 'Windows'), ('unix', 'Unix'), ('bsd', 'BSD'), ('macos', 'MacOS'), ('mainframe', 'Mainframe'), ('other_host', 'Other host'), ('switch', 'Switch'), ('router', 'Router'), ('firewall', 'Firewall'), ('other_network', 'Other device'), ('mysql', 'MySQL'), ('mariadb', 'MariaDB'), ('postgresql', 'PostgreSQL'), ('oracle', 'Oracle'), ('sqlserver', 'SQLServer'), ('mongodb', 'MongoDB'), ('redis', 'Redis'), ('chrome', 'Chrome'), ('vmware_client', 'vSphere client'), ('mysql_workbench', 'MySQL workbench'), ('general_remote_app', 'Custom'), ('k8s', 'Kubernetes')], max_length=128, verbose_name='Type'), - preserve_default=False, - ), - ] diff --git a/apps/assets/migrations/0097_auto_20220407_1726.py b/apps/assets/migrations/0095_auto_20220407_1726.py similarity index 86% rename from apps/assets/migrations/0097_auto_20220407_1726.py rename to apps/assets/migrations/0095_auto_20220407_1726.py index a3d0dc053..fb20373cc 100644 --- a/apps/assets/migrations/0097_auto_20220407_1726.py +++ b/apps/assets/migrations/0095_auto_20220407_1726.py @@ -14,7 +14,7 @@ def migrate_platform_type_to_lower(apps, *args): class Migration(migrations.Migration): dependencies = [ - ('assets', '0096_auto_20220406_1546'), + ('assets', '0094_auto_20220402_1736'), ] operations = [ @@ -26,8 +26,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='platform', name='category', - field=models.CharField(default='host', max_length=16, verbose_name='Category'), - preserve_default=False, + field=models.CharField(default='host', max_length=32, verbose_name='Category'), ), migrations.AlterField( model_name='platform', diff --git a/apps/assets/migrations/0096_auto_20220406_1546.py b/apps/assets/migrations/0096_auto_20220406_1546.py deleted file mode 100644 index bfd7bc277..000000000 --- a/apps/assets/migrations/0096_auto_20220406_1546.py +++ /dev/null @@ -1,15 +0,0 @@ -# Generated by Django 3.1.14 on 2022-04-06 07:46 -from itertools import groupby - -from django.db import migrations -from django.db.models import F - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0095_auto_20220406_1541'), - ] - - operations = [ - ] diff --git a/apps/assets/migrations/0098_auto_20220426_1550.py b/apps/assets/migrations/0096_auto_20220426_1550.py similarity index 83% rename from apps/assets/migrations/0098_auto_20220426_1550.py rename to apps/assets/migrations/0096_auto_20220426_1550.py index bbce73dec..83b2aa141 100644 --- a/apps/assets/migrations/0098_auto_20220426_1550.py +++ b/apps/assets/migrations/0096_auto_20220426_1550.py @@ -7,7 +7,7 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - ('assets', '0097_auto_20220407_1726'), + ('assets', '0095_auto_20220407_1726'), ] operations = [ @@ -23,7 +23,7 @@ class Migration(migrations.Migration): bases=('assets.asset',), ), migrations.CreateModel( - name='Network', + name='Networking', fields=[ ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), ], @@ -32,19 +32,6 @@ class Migration(migrations.Migration): }, bases=('assets.asset',), ), - migrations.CreateModel( - name='RemoteApp', - fields=[ - ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), - ('connect_host', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.host')), - ('app_path', models.CharField(max_length=1024, verbose_name='App path')), - ('attrs', models.JSONField(default=dict, verbose_name='Attrs')), - ], - options={ - 'abstract': False, - }, - bases=('assets.asset',), - ), migrations.CreateModel( name='Cloud', fields=[ @@ -56,4 +43,15 @@ class Migration(migrations.Migration): }, bases=('assets.asset',), ), + migrations.CreateModel( + name='Web', + fields=[ + ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), + ('url', models.CharField(max_length=1024, verbose_name='url')), + ], + options={ + 'abstract': False, + }, + bases=('assets.asset',), + ), ] diff --git a/apps/assets/migrations/0099_auto_20220426_1558.py b/apps/assets/migrations/0097_auto_20220426_1558.py similarity index 74% rename from apps/assets/migrations/0099_auto_20220426_1558.py rename to apps/assets/migrations/0097_auto_20220426_1558.py index 0a6d03e89..df925852f 100644 --- a/apps/assets/migrations/0099_auto_20220426_1558.py +++ b/apps/assets/migrations/0097_auto_20220426_1558.py @@ -57,7 +57,6 @@ def migrate_database_to_asset(apps, *args): db = db_model( id=app.id, hostname=app.name, ip=attrs['host'], protocols='{}/{}'.format(app.type, attrs['port']), - category='database', type=app.type, db_name=attrs['database'] or '', platform=platforms_map[app.type], org_id=app.org_id @@ -69,48 +68,48 @@ def migrate_database_to_asset(apps, *args): failed_apps.append(app) pass - -def migrate_remote_app_to_asset(apps, *args): - app_model = apps.get_model('applications', 'Application') - remote_app_model = apps.get_model('assets', 'RemoteApp') - host_model = apps.get_model('assets', 'Host') - platform_model = apps.get_model('assets', 'Platform') - applications = app_model.objects.filter(category='remote_app') - platforms = platform_model.objects.filter(category='remote_app') - platforms_map = {p.type: p for p in platforms} - - connect_host_map = {} - - for app in applications: - attrs = app.attrs - connect_host = attrs.pop('asset') - if connect_host: - connect_host = host_model.objects.filter(asset_ptr_id=connect_host).first() - connect_host_map[app.id] = connect_host - - for app in applications: - tp = app.type - app_path = attrs.pop('path', '') - if tp == 'custom': - tp = 'general_remote_app' - - print("Create remote app: {}".format(app.name)) - remote_app = remote_app_model( - id=app.id, hostname=app.name, ip='', - protocols='', - category='remote_app', type=tp, - platform=platforms_map[tp], - org_id=app.org_id, - - app_path=app_path, - connect_host=connect_host_map.get(app.id), - attrs=attrs, - ) - try: - remote_app.save() - except Exception as e: - print("Error: ", e) - # remote_app.hostname = 'RemoteApp-' + remote_app.hostname +# +# def migrate_remote_app_to_asset(apps, *args): +# app_model = apps.get_model('applications', 'Application') +# remote_app_model = apps.get_model('assets', 'Web') +# host_model = apps.get_model('assets', 'Host') +# platform_model = apps.get_model('assets', 'Platform') +# applications = app_model.objects.filter(category='remote_app') +# platforms = platform_model.objects.filter(category='remote_app') +# platforms_map = {p.type: p for p in platforms} +# +# connect_host_map = {} +# +# for app in applications: +# attrs = app.attrs +# connect_host = attrs.pop('asset') +# if connect_host: +# connect_host = host_model.objects.filter(asset_ptr_id=connect_host).first() +# connect_host_map[app.id] = connect_host +# +# for app in applications: +# tp = app.type +# attrs = app.attrs +# app_path = attrs.pop('path', '') +# if tp == 'custom': +# tp = 'general_remote_app' +# +# print("Create remote app: {}".format(app.name)) +# remote_app = remote_app_model( +# id=app.id, hostname=app.name, ip='', +# protocols='', +# platform=platforms_map[tp], +# org_id=app.org_id, +# app_path=app_path, +# connect_host=connect_host_map.get(app.id), +# attrs=attrs, +# ) +# try: +# remote_app.save() +# except Exception as e: +# print("Error: ", e) +# # remote_app.hostname = 'RemoteApp-' + remote_app.hostname +# def migrate_cloud_to_asset(apps, *args): @@ -126,7 +125,6 @@ def migrate_cloud_to_asset(apps, *args): print("Create cloud: {}".format(app.name)) cloud = cloud_model( id=app.id, hostname=app.name, ip='', - category='remote_app', type='k8s', protocols='', platform=platform, org_id=app.org_id, @@ -176,7 +174,7 @@ def migrate_to_nodes(apps, *args): for org in orgs: node = create_app_nodes(apps, org.id) assets = asset_model.objects.filter( - category__in=['remote_app', 'database', 'cloud'], + platform__category__in=['remote_app', 'database', 'cloud'], org_id=org.id ) if not node: @@ -192,14 +190,13 @@ def migrate_to_nodes(apps, *args): class Migration(migrations.Migration): dependencies = [ - ('assets', '0098_auto_20220426_1550'), + ('assets', '0096_auto_20220426_1550'), ('applications', '0020_auto_20220316_2028') ] operations = [ migrations.RunPython(create_app_platform), migrations.RunPython(migrate_database_to_asset), - migrations.RunPython(migrate_remote_app_to_asset), migrations.RunPython(migrate_cloud_to_asset), migrations.RunPython(migrate_to_nodes) ] diff --git a/apps/assets/migrations/0100_auto_20220430_2126.py b/apps/assets/migrations/0098_auto_20220430_2126.py similarity index 82% rename from apps/assets/migrations/0100_auto_20220430_2126.py rename to apps/assets/migrations/0098_auto_20220430_2126.py index 78ede0501..6d9100593 100644 --- a/apps/assets/migrations/0100_auto_20220430_2126.py +++ b/apps/assets/migrations/0098_auto_20220430_2126.py @@ -7,7 +7,7 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - ('assets', '0099_auto_20220426_1558'), + ('assets', '0097_auto_20220426_1558'), ] operations = [ @@ -73,7 +73,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='platform', name='su_enabled', - field=models.BooleanField(default=False), + field=models.BooleanField(default=False, verbose_name='Su enabled'), ), migrations.AddField( model_name='platform', @@ -90,14 +90,4 @@ class Migration(migrations.Migration): name='verify_account_method', field=models.TextField(blank=True, max_length=32, null=True, verbose_name='Verify account method'), ), - migrations.AlterField( - model_name='asset', - name='category', - field=models.CharField(choices=[('host', 'Host'), ('network', 'NetworkDevice'), ('database', 'Database'), ('remote_app', 'Remote app'), ('cloud', 'Clouding')], max_length=16, verbose_name='Category'), - ), - migrations.AlterField( - model_name='platform', - name='category', - field=models.CharField(choices=[('host', 'Host'), ('network', 'NetworkDevice'), ('database', 'Database'), ('remote_app', 'Remote app'), ('cloud', 'Clouding')], max_length=16, verbose_name='Category'), - ), ] diff --git a/apps/assets/migrations/0101_auto_20220711_1409.py b/apps/assets/migrations/0099_auto_20220711_1409.py similarity index 99% rename from apps/assets/migrations/0101_auto_20220711_1409.py rename to apps/assets/migrations/0099_auto_20220711_1409.py index 30dd8c51f..674b1c447 100644 --- a/apps/assets/migrations/0101_auto_20220711_1409.py +++ b/apps/assets/migrations/0099_auto_20220711_1409.py @@ -13,7 +13,7 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('assets', '0100_auto_20220430_2126'), + ('assets', '0098_auto_20220430_2126'), ] operations = [ diff --git a/apps/assets/migrations/0102_auto_20220711_1413.py b/apps/assets/migrations/0100_auto_20220711_1413.py similarity index 97% rename from apps/assets/migrations/0102_auto_20220711_1413.py rename to apps/assets/migrations/0100_auto_20220711_1413.py index d2cecc858..aed674b36 100644 --- a/apps/assets/migrations/0102_auto_20220711_1413.py +++ b/apps/assets/migrations/0100_auto_20220711_1413.py @@ -55,7 +55,7 @@ def migrate_accounts(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('assets', '0101_auto_20220711_1409'), + ('assets', '0099_auto_20220711_1409'), ] operations = [ diff --git a/apps/assets/migrations/0103_auto_20220803_1448.py b/apps/assets/migrations/0101_auto_20220803_1448.py similarity index 97% rename from apps/assets/migrations/0103_auto_20220803_1448.py rename to apps/assets/migrations/0101_auto_20220803_1448.py index 7af3514e2..26f4dc36b 100644 --- a/apps/assets/migrations/0103_auto_20220803_1448.py +++ b/apps/assets/migrations/0101_auto_20220803_1448.py @@ -6,7 +6,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('assets', '0102_auto_20220711_1413'), + ('assets', '0100_auto_20220711_1413'), ] operations = [ diff --git a/apps/assets/migrations/0104_auto_20220803_1859.py b/apps/assets/migrations/0102_auto_20220803_1859.py similarity index 97% rename from apps/assets/migrations/0104_auto_20220803_1859.py rename to apps/assets/migrations/0102_auto_20220803_1859.py index ad5d99ef5..e220da05a 100644 --- a/apps/assets/migrations/0104_auto_20220803_1859.py +++ b/apps/assets/migrations/0102_auto_20220803_1859.py @@ -44,7 +44,7 @@ def migrate_asset_protocols(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('assets', '0103_auto_20220803_1448'), + ('assets', '0101_auto_20220803_1448'), ] operations = [ diff --git a/apps/assets/migrations/0107_auto_20220811_1511.py b/apps/assets/migrations/0103_auto_20220811_1511.py similarity index 62% rename from apps/assets/migrations/0107_auto_20220811_1511.py rename to apps/assets/migrations/0103_auto_20220811_1511.py index c95e336e3..3a4504e46 100644 --- a/apps/assets/migrations/0107_auto_20220811_1511.py +++ b/apps/assets/migrations/0103_auto_20220811_1511.py @@ -1,15 +1,37 @@ # Generated by Django 3.2.14 on 2022-08-11 07:11 - +import assets.models.platform +import django.db.models from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('assets', '0106_auto_20220811_1449'), + ('assets', '0102_auto_20220803_1859'), ] operations = [ + migrations.AlterField( + model_name='asset', + name='platform', + field=models.ForeignKey(default=assets.models.platform.Platform.default, on_delete=django.db.models.deletion.PROTECT, related_name='assets', to='assets.platform', verbose_name='Platform'), + ), + migrations.RemoveField( + model_name='asset', + name='_protocols', + ), + migrations.RemoveField( + model_name='asset', + name='admin_user', + ), + migrations.RemoveField( + model_name='asset', + name='number', + ), + migrations.RemoveField( + model_name='asset', + name='public_ip', + ), migrations.AlterModelOptions( name='asset', options={'ordering': ['name'], 'permissions': [('refresh_assethardwareinfo', 'Can refresh asset hardware info'), ('test_assetconnectivity', 'Can test asset connectivity'), ('push_assetsystemuser', 'Can push system user to asset'), ('match_asset', 'Can match asset'), ('add_assettonode', 'Add asset to node'), ('move_assettonode', 'Move asset to node')], 'verbose_name': 'Asset'}, diff --git a/apps/assets/migrations/0108_auto_20220816_1022.py b/apps/assets/migrations/0104_auto_20220816_1022.py similarity index 97% rename from apps/assets/migrations/0108_auto_20220816_1022.py rename to apps/assets/migrations/0104_auto_20220816_1022.py index 90606c2bf..45523495e 100644 --- a/apps/assets/migrations/0108_auto_20220816_1022.py +++ b/apps/assets/migrations/0104_auto_20220816_1022.py @@ -46,7 +46,7 @@ def migrate_command_filter_apps(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('assets', '0107_auto_20220811_1511'), + ('assets', '0103_auto_20220811_1511'), ] operations = [ diff --git a/apps/assets/migrations/0105_auto_20220810_1449.py b/apps/assets/migrations/0105_auto_20220810_1449.py deleted file mode 100644 index a305c8156..000000000 --- a/apps/assets/migrations/0105_auto_20220810_1449.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by Django 3.2.14 on 2022-08-10 06:49 - -import assets.models.platform -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0104_auto_20220803_1859'), - ] - - operations = [ - migrations.AlterField( - model_name='asset', - name='category', - field=models.CharField(choices=[('host', 'Host'), ('network', 'NetworkDevice'), ('database', 'Database'), ('cloud', 'Clouding'), ('web', 'Web')], max_length=16, verbose_name='Category'), - ), - migrations.AlterField( - model_name='asset', - name='platform', - field=models.ForeignKey(default=assets.models.platform.Platform.default, on_delete=django.db.models.deletion.PROTECT, related_name='assets', to='assets.platform', verbose_name='Platform'), - ), - migrations.AlterField( - model_name='asset', - name='type', - field=models.CharField(choices=[('linux', 'Linux'), ('windows', 'Windows'), ('unix', 'Unix'), ('bsd', 'BSD'), ('macos', 'MacOS'), ('mainframe', 'Mainframe'), ('other_host', 'Other host'), ('switch', 'Switch'), ('router', 'Router'), ('firewall', 'Firewall'), ('other_network', 'Other device'), ('mysql', 'MySQL'), ('mariadb', 'MariaDB'), ('postgresql', 'PostgreSQL'), ('oracle', 'Oracle'), ('sqlserver', 'SQLServer'), ('mongodb', 'MongoDB'), ('redis', 'Redis'), ('general', 'General'), ('k8s', 'Kubernetes')], max_length=128, verbose_name='Type'), - ), - migrations.AlterField( - model_name='platform', - name='category', - field=models.CharField(choices=[('host', 'Host'), ('network', 'NetworkDevice'), ('database', 'Database'), ('cloud', 'Clouding'), ('web', 'Web')], default='host', max_length=16, verbose_name='Category'), - ), - migrations.AlterField( - model_name='platform', - name='type', - field=models.CharField(choices=[('linux', 'Linux'), ('windows', 'Windows'), ('unix', 'Unix'), ('bsd', 'BSD'), ('macos', 'MacOS'), ('mainframe', 'Mainframe'), ('other_host', 'Other host'), ('switch', 'Switch'), ('router', 'Router'), ('firewall', 'Firewall'), ('other_network', 'Other device'), ('mysql', 'MySQL'), ('mariadb', 'MariaDB'), ('postgresql', 'PostgreSQL'), ('oracle', 'Oracle'), ('sqlserver', 'SQLServer'), ('mongodb', 'MongoDB'), ('redis', 'Redis'), ('general', 'General'), ('k8s', 'Kubernetes')], default='Linux', max_length=32, verbose_name='Type'), - ), - migrations.AlterField( - model_name='platform', - name='su_enabled', - field=models.BooleanField(default=False, verbose_name='Su enabled'), - ), - ] diff --git a/apps/assets/migrations/0109_auto_20220817_1544.py b/apps/assets/migrations/0105_auto_20220817_1544.py similarity index 66% rename from apps/assets/migrations/0109_auto_20220817_1544.py rename to apps/assets/migrations/0105_auto_20220817_1544.py index d9ca483fa..9aacc5a35 100644 --- a/apps/assets/migrations/0109_auto_20220817_1544.py +++ b/apps/assets/migrations/0105_auto_20220817_1544.py @@ -6,7 +6,7 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('assets', '0108_auto_20220816_1022'), + ('assets', '0104_auto_20220816_1022'), ] operations = [ @@ -41,4 +41,22 @@ class Migration(migrations.Migration): model_name='systemuser', name='users', ), + migrations.AlterUniqueTogether( + name='authbook', + unique_together=None, + ), + migrations.RemoveField( + model_name='authbook', + name='asset', + ), + migrations.RemoveField( + model_name='authbook', + name='systemuser', + ), + migrations.DeleteModel( + name='HistoricalAuthBook', + ), + migrations.DeleteModel( + name='AuthBook', + ), ] diff --git a/apps/assets/migrations/0106_auto_20220811_1449.py b/apps/assets/migrations/0106_auto_20220811_1449.py deleted file mode 100644 index decab283b..000000000 --- a/apps/assets/migrations/0106_auto_20220811_1449.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 3.2.14 on 2022-08-11 06:49 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0105_auto_20220810_1449'), - ] - - operations = [ - migrations.RemoveField( - model_name='asset', - name='_protocols', - ), - migrations.RemoveField( - model_name='asset', - name='admin_user', - ), - migrations.RemoveField( - model_name='asset', - name='category', - ), - migrations.RemoveField( - model_name='asset', - name='number', - ), - migrations.RemoveField( - model_name='asset', - name='public_ip', - ), - migrations.RemoveField( - model_name='asset', - name='type', - ), - ] diff --git a/apps/assets/migrations/0111_auto_20220819_1523.py b/apps/assets/migrations/0106_auto_20220819_1523.py similarity index 97% rename from apps/assets/migrations/0111_auto_20220819_1523.py rename to apps/assets/migrations/0106_auto_20220819_1523.py index 1bed01959..6ed0be81c 100644 --- a/apps/assets/migrations/0111_auto_20220819_1523.py +++ b/apps/assets/migrations/0106_auto_20220819_1523.py @@ -9,7 +9,7 @@ import uuid class Migration(migrations.Migration): dependencies = [ - ('assets', '0110_auto_20220817_1716'), + ('assets', '0105_auto_20220817_1544'), ] operations = [ diff --git a/apps/assets/migrations/0110_auto_20220817_1716.py b/apps/assets/migrations/0110_auto_20220817_1716.py deleted file mode 100644 index 6fdaadd52..000000000 --- a/apps/assets/migrations/0110_auto_20220817_1716.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.2.14 on 2022-08-17 09:16 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0109_auto_20220817_1544'), - ('applications', '0022_auto_20220817_1346'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='authbook', - unique_together=None, - ), - migrations.RemoveField( - model_name='authbook', - name='asset', - ), - migrations.RemoveField( - model_name='authbook', - name='systemuser', - ), - migrations.DeleteModel( - name='HistoricalAuthBook', - ), - migrations.DeleteModel( - name='AuthBook', - ), - ] diff --git a/apps/assets/models/asset/__init__.py b/apps/assets/models/asset/__init__.py index 28f5e30c5..914a440ba 100644 --- a/apps/assets/models/asset/__init__.py +++ b/apps/assets/models/asset/__init__.py @@ -1,6 +1,6 @@ from .common import * from .host import * from .database import * -from .network import * -from .remote_app import * +from .networking import * +from .web import * from .cloud import * diff --git a/apps/assets/models/asset/network.py b/apps/assets/models/asset/networking.py similarity index 60% rename from apps/assets/models/asset/network.py rename to apps/assets/models/asset/networking.py index c6506bf6d..d58995b42 100644 --- a/apps/assets/models/asset/network.py +++ b/apps/assets/models/asset/networking.py @@ -2,5 +2,5 @@ from .common import Asset -class Network(Asset): +class Networking(Asset): pass diff --git a/apps/assets/models/asset/remote_app.py b/apps/assets/models/asset/remote_app.py deleted file mode 100644 index caa4c89a0..000000000 --- a/apps/assets/models/asset/remote_app.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.utils.translation import gettext_lazy as _ -from django.db import models - -from .common import Asset - - -class RemoteApp(Asset): - app_path = models.CharField(max_length=1024, verbose_name=_("App path")) - connect_host = models.ForeignKey('assets.Host', null=True, on_delete=models.SET_NULL) - attrs = models.JSONField(default=dict, verbose_name=_('Attrs')) diff --git a/apps/assets/models/asset/web.py b/apps/assets/models/asset/web.py new file mode 100644 index 000000000..f695525ac --- /dev/null +++ b/apps/assets/models/asset/web.py @@ -0,0 +1,8 @@ +from django.utils.translation import gettext_lazy as _ +from django.db import models + +from .common import Asset + + +class Web(Asset): + url = models.CharField(max_length=1024, verbose_name=_("url")) diff --git a/apps/assets/models/platform.py b/apps/assets/models/platform.py index 7b6dc1889..304b9c120 100644 --- a/apps/assets/models/platform.py +++ b/apps/assets/models/platform.py @@ -24,8 +24,8 @@ class Platform(models.Model): ('gbk', 'GBK'), ) name = models.SlugField(verbose_name=_("Name"), unique=True, allow_unicode=True) - category = models.CharField(max_length=16, choices=Category.choices, default=Category.HOST, verbose_name=_("Category")) - type = models.CharField(choices=AllTypes.choices, max_length=32, default='Linux', verbose_name=_("Type")) + category = models.CharField(default='host', max_length=32, verbose_name=_("Category")) + type = models.CharField(max_length=32, default='linux', verbose_name=_("Type")) charset = models.CharField(default='utf8', choices=CHARSET_CHOICES, max_length=8, verbose_name=_("Charset")) meta = JsonDictTextField(blank=True, null=True, verbose_name=_("Meta")) internal = models.BooleanField(default=False, verbose_name=_("Internal")) diff --git a/apps/assets/serializers/asset/category.py b/apps/assets/serializers/asset/category.py index 7ffa6cfb1..4a7f1fa32 100644 --- a/apps/assets/serializers/asset/category.py +++ b/apps/assets/serializers/asset/category.py @@ -1,11 +1,11 @@ from rest_framework import serializers -from assets.models import DeviceInfo, Host, Database, Network, Cloud +from assets.models import DeviceInfo, Host, Database, Networking, Cloud from .common import AssetSerializer __all__ = [ 'DeviceSerializer', 'HostSerializer', 'DatabaseSerializer', - 'NetworkSerializer', 'CloudSerializer', + 'NetworkingSerializer', 'CloudSerializer', ] @@ -34,9 +34,9 @@ class DatabaseSerializer(AssetSerializer): fields = AssetSerializer.Meta.fields + ['db_name'] -class NetworkSerializer(AssetSerializer): +class NetworkingSerializer(AssetSerializer): class Meta(AssetSerializer.Meta): - model = Network + model = Networking class CloudSerializer(AssetSerializer): diff --git a/apps/terminal/api/session.py b/apps/terminal/api/session.py index e99999ab4..25477166c 100644 --- a/apps/terminal/api/session.py +++ b/apps/terminal/api/session.py @@ -55,7 +55,7 @@ class SessionViewSet(OrgBulkModelViewSet): 'display': serializers.SessionDisplaySerializer, } search_fields = [ - "user", "asset", "system_user", "remote_addr", + "user", "asset", "account", "remote_addr", "protocol", "is_finished", 'login_from', ] filterset_fields = search_fields + ['terminal'] diff --git a/apps/terminal/migrations/0052_auto_20220707_1726.py b/apps/terminal/migrations/0052_auto_20220707_1726.py index 22eab3a1a..a8c0b0052 100644 --- a/apps/terminal/migrations/0052_auto_20220707_1726.py +++ b/apps/terminal/migrations/0052_auto_20220707_1726.py @@ -13,6 +13,20 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='session', name='protocol', - field=models.CharField(choices=[('ssh', 'SSH'), ('rdp', 'RDP'), ('telnet', 'Telnet'), ('vnc', 'VNC'), ('mysql', 'MySQL'), ('mariadb', 'MariaDB'), ('oracle', 'Oracle'), ('postgresql', 'PostgreSQL'), ('sqlserver', 'SQLServer'), ('redis', 'Redis'), ('mongodb', 'MongoDB'), ('k8s', 'K8S')], db_index=True, default='ssh', max_length=16), + field=models.CharField(db_index=True, default='ssh', max_length=16), + ), + migrations.RenameField( + model_name='session', + old_name='system_user', + new_name='account', + ), + migrations.RemoveField( + model_name='session', + name='system_user_id', + ), + migrations.AlterField( + model_name='session', + name='account', + field=models.CharField(db_index=True, max_length=128, verbose_name='Account'), ), ] diff --git a/apps/terminal/models/session.py b/apps/terminal/models/session.py index 932f47321..4f01bde4a 100644 --- a/apps/terminal/models/session.py +++ b/apps/terminal/models/session.py @@ -31,8 +31,8 @@ class Session(OrgModelMixin): user_id = models.CharField(blank=True, default='', max_length=36, db_index=True) asset = models.CharField(max_length=128, verbose_name=_("Asset"), db_index=True) asset_id = models.CharField(blank=True, default='', max_length=36, db_index=True) - system_user = models.CharField(max_length=128, verbose_name=_("System user"), db_index=True) - system_user_id = models.CharField(blank=True, default='', max_length=36, db_index=True) + account = models.CharField(max_length=128, verbose_name=_("Account"), db_index=True) + protocol = models.CharField(default='ssh', max_length=16, db_index=True) login_from = models.CharField(max_length=2, choices=LOGIN_FROM.choices, default="ST", verbose_name=_("Login from")) remote_addr = models.CharField(max_length=128, verbose_name=_("Remote addr"), blank=True, null=True) is_success = models.BooleanField(default=True, db_index=True) @@ -40,7 +40,6 @@ class Session(OrgModelMixin): has_replay = models.BooleanField(default=False, verbose_name=_("Replay")) has_command = models.BooleanField(default=False, verbose_name=_("Command")) terminal = models.ForeignKey('terminal.Terminal', null=True, on_delete=models.DO_NOTHING, db_constraint=False) - protocol = models.CharField(choices=Protocol.choices, default='ssh', max_length=16, db_index=True) date_start = models.DateTimeField(verbose_name=_("Date start"), db_index=True, default=timezone.now) date_end = models.DateTimeField(verbose_name=_("Date end"), null=True) @@ -123,9 +122,9 @@ class Session(OrgModelMixin): return False if self.login_from == self.LOGIN_FROM.RT: return False - if Protocol in [ - Protocol.SSH, Protocol.VNC, Protocol.RDP, - Protocol.TELNET, Protocol.K8S + if self.protocol in [ + Protocol.ssh, Protocol.vnc, Protocol.rdp, + Protocol.telnet, Protocol.k8s ]: return True else: diff --git a/apps/terminal/serializers/session.py b/apps/terminal/serializers/session.py index 49d7f7270..a22d17cdb 100644 --- a/apps/terminal/serializers/session.py +++ b/apps/terminal/serializers/session.py @@ -2,6 +2,8 @@ from rest_framework import serializers from django.utils.translation import ugettext_lazy as _ from orgs.mixins.serializers import BulkOrgResourceModelSerializer + +from assets.const import Protocol from ..models import Session __all__ = [ @@ -13,16 +15,15 @@ __all__ = [ class SessionSerializer(BulkOrgResourceModelSerializer): org_id = serializers.CharField(allow_blank=True) terminal_display = serializers.CharField(read_only=True, label=_('Terminal display')) + protocol = serializers.ChoiceField(choices=Protocol.choices, label=_("Protocol")) class Meta: model = Session fields_mini = ["id"] fields_small = fields_mini + [ - "user", "asset", "system_user", - "user_id", "asset_id", "system_user_id", - "login_from", "login_from_display", "remote_addr", "protocol", - "is_success", "is_finished", "has_replay", - "date_start", "date_end", + "user", "asset", "user_id", "asset_id", 'account', "protocol", + "login_from", "login_from_display", "remote_addr", "is_success", + "is_finished", "has_replay", "date_start", "date_end", ] fields_fk = ["terminal", ] fields_custom = ["can_replay", "can_join", "can_terminate", 'terminal_display'] @@ -31,7 +32,6 @@ class SessionSerializer(BulkOrgResourceModelSerializer): "protocol": {'label': _('Protocol')}, 'user_id': {'label': _('User ID')}, 'asset_id': {'label': _('Asset ID')}, - 'system_user_id': {'label': _('System user ID')}, 'login_from_display': {'label': _('Login from display')}, 'is_success': {'label': _('Is success')}, 'can_replay': {'label': _('Can replay')},