diff --git a/apps/audits/api.py b/apps/audits/api.py index 3f2611b77..4c2b5dc76 100644 --- a/apps/audits/api.py +++ b/apps/audits/api.py @@ -11,15 +11,14 @@ from rest_framework.permissions import IsAuthenticated from common.api import JMSGenericViewSet from common.drf.filters import DatetimeRangeFilter from common.plugins.es import QuerySet as ESQuerySet -from ops.models.job import JobAuditLog from orgs.mixins.api import OrgGenericViewSet, OrgBulkModelViewSet from orgs.utils import current_org, tmp_to_root_org from orgs.models import Organization from users.models import User from .backends import TYPE_ENGINE_MAPPING from .const import ActivityChoices -from .models import FTPLog, UserLoginLog, OperateLog, PasswordChangeLog, ActivityLog -from .serializers import FTPLogSerializer, UserLoginLogSerializer, JobAuditLogSerializer +from .models import FTPLog, UserLoginLog, OperateLog, PasswordChangeLog, ActivityLog, JobLog +from .serializers import FTPLogSerializer, UserLoginLogSerializer, JobLogSerializer from .serializers import ( OperateLogSerializer, OperateLogActionDetailSerializer, PasswordChangeLogSerializer, ActivityUnionLogSerializer, @@ -27,13 +26,13 @@ from .serializers import ( class JobAuditViewSet(OrgBulkModelViewSet): - model = JobAuditLog + model = JobLog extra_filter_backends = [DatetimeRangeFilter] date_range_filter_fields = [ ('date_start', ('date_from', 'date_to')) ] search_fields = ['creator__name', 'material'] - serializer_class = JobAuditLogSerializer + serializer_class = JobLogSerializer ordering = ['-date_start'] http_method_names = ('get', 'head', 'options') diff --git a/apps/audits/migrations/0021_auto_20230207_0857.py b/apps/audits/migrations/0021_auto_20230207_0857.py index e9e8b939e..6913d21c7 100644 --- a/apps/audits/migrations/0021_auto_20230207_0857.py +++ b/apps/audits/migrations/0021_auto_20230207_0857.py @@ -27,4 +27,16 @@ class Migration(migrations.Migration): 'ordering': ('-datetime',), }, ), + migrations.CreateModel( + name='JobLog', + fields=[ + ], + options={ + 'verbose_name': 'Job audit log', + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('ops.jobexecution',), + ), ] diff --git a/apps/audits/models.py b/apps/audits/models.py index 552d6162a..c20e6cb4b 100644 --- a/apps/audits/models.py +++ b/apps/audits/models.py @@ -7,6 +7,7 @@ from django.utils.translation import gettext, ugettext_lazy as _ from common.db.encoder import ModelJSONFieldEncoder from common.utils import lazyproperty +from ops.models import JobExecution from orgs.mixins.models import OrgModelMixin, Organization from orgs.utils import current_org from .const import ( @@ -24,9 +25,20 @@ __all__ = [ "ActivityLog", "PasswordChangeLog", "UserLoginLog", + "JobLog" ] +class JobLog(JobExecution): + @property + def creator_name(self): + return self.creator.name + + class Meta: + proxy = True + verbose_name = _("Job audit log") + + class FTPLog(OrgModelMixin): id = models.UUIDField(default=uuid.uuid4, primary_key=True) user = models.CharField(max_length=128, verbose_name=_("User")) diff --git a/apps/audits/serializers.py b/apps/audits/serializers.py index 741a39721..0956f2209 100644 --- a/apps/audits/serializers.py +++ b/apps/audits/serializers.py @@ -7,7 +7,6 @@ from audits.backends.db import OperateLogStore from common.serializers.fields import LabeledChoiceField from common.utils import reverse, i18n_trans from common.utils.timezone import as_current_tz -from ops.models.job import JobAuditLog from ops.serializers.job import JobExecutionSerializer from terminal.models import Session from . import models @@ -18,9 +17,9 @@ from .const import ( ) -class JobAuditLogSerializer(JobExecutionSerializer): +class JobLogSerializer(JobExecutionSerializer): class Meta: - model = JobAuditLog + model = models.JobLog read_only_fields = [ "id", "material", "time_cost", 'date_start', 'date_finished', 'date_created', diff --git a/apps/audits/signal_handlers/operate_log.py b/apps/audits/signal_handlers/operate_log.py index 05809be79..7d97724cf 100644 --- a/apps/audits/signal_handlers/operate_log.py +++ b/apps/audits/signal_handlers/operate_log.py @@ -159,7 +159,7 @@ def on_django_start_set_operate_log_monitor_models(sender, **kwargs): 'MessageContent', 'SiteMessage', 'PlatformAutomation', 'PlatformProtocol', 'Protocol', 'HistoricalAccount', 'GatheredUser', 'ApprovalRule', - 'BaseAutomation', 'CeleryTask', 'Command', 'JobAuditLog', + 'BaseAutomation', 'CeleryTask', 'Command', 'JobLog', 'ConnectionToken', 'SessionJoinRecord', 'HistoricalJob', 'Status', 'TicketStep', 'Ticket', 'UserAssetGrantedTreeNodeRelation', 'TicketAssignee', diff --git a/apps/jumpserver/api.py b/apps/jumpserver/api.py index 102383cad..105ab0f98 100644 --- a/apps/jumpserver/api.py +++ b/apps/jumpserver/api.py @@ -13,11 +13,11 @@ from rest_framework.views import APIView from assets.const import AllTypes from assets.models import Asset from audits.const import LoginStatusChoices -from audits.models import UserLoginLog, PasswordChangeLog, OperateLog, FTPLog +from audits.models import UserLoginLog, PasswordChangeLog, OperateLog, FTPLog, JobLog from common.utils import lazyproperty from common.utils.timezone import local_now, local_zero_hour from ops.const import JobStatus -from ops.models import Job, JobExecution, JobAuditLog +from ops.models import Job, JobExecution from orgs.caches import OrgResourceStatisticsCache from orgs.utils import current_org from terminal.models import Session, Command @@ -123,7 +123,7 @@ class DateTimeMixin: @lazyproperty def job_logs_queryset(self): t = self.days_to_datetime - queryset = JobAuditLog.objects.filter(date_created__gte=t) + queryset = JobLog.objects.filter(date_created__gte=t) return queryset @lazyproperty @@ -138,7 +138,7 @@ class DatesLoginMetricMixin: command_queryset: Command.objects sessions_queryset: Session.objects ftp_logs_queryset: OperateLog.objects - job_logs_queryset: JobAuditLog.objects + job_logs_queryset: JobLog.objects login_logs_queryset: UserLoginLog.objects operate_logs_queryset: OperateLog.objects password_change_logs_queryset: PasswordChangeLog.objects diff --git a/apps/ops/migrations/0024_alter_celerytask_date_last_publish.py b/apps/ops/migrations/0024_alter_celerytask_date_last_publish.py index 9a5e17f13..26c5d2cd7 100644 --- a/apps/ops/migrations/0024_alter_celerytask_date_last_publish.py +++ b/apps/ops/migrations/0024_alter_celerytask_date_last_publish.py @@ -64,5 +64,8 @@ class Migration(migrations.Migration): name='material', field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Material'), ), + migrations.DeleteModel( + name='JobAuditLog', + ), migrations.RunPython(compatible), ] diff --git a/apps/ops/models/job.py b/apps/ops/models/job.py index 2c0fb6113..2987d01f8 100644 --- a/apps/ops/models/job.py +++ b/apps/ops/models/job.py @@ -9,7 +9,7 @@ from django.db import models from django.utils import timezone from django.utils.translation import gettext_lazy as _ -__all__ = ["Job", "JobExecution", "JobAuditLog"] +__all__ = ["Job", "JobExecution"] from simple_history.models import HistoricalRecords @@ -362,11 +362,3 @@ class JobExecution(JMSOrgBaseModel): ordering = ['-date_created'] -class JobAuditLog(JobExecution): - @property - def creator_name(self): - return self.creator.name - - class Meta: - proxy = True - verbose_name = _("Job audit log") diff --git a/apps/rbac/builtin.py b/apps/rbac/builtin.py index 4e5ffb0a6..e15386bea 100644 --- a/apps/rbac/builtin.py +++ b/apps/rbac/builtin.py @@ -30,7 +30,7 @@ system_user_perms = ( _auditor_perms = ( ('rbac', 'menupermission', 'view', 'audit'), ('audits', '*', '*', '*'), - ('ops', 'jobauditlog', '*', '*'), + ('audits', 'joblog', '*', '*'), ('terminal', 'commandstorage', 'view', 'commandstorage'), ('terminal', 'sessionreplay', 'view,download', 'sessionreplay'), ('terminal', 'session', '*', '*'), diff --git a/apps/rbac/const.py b/apps/rbac/const.py index 1120af30e..cb9fa96c6 100644 --- a/apps/rbac/const.py +++ b/apps/rbac/const.py @@ -79,6 +79,7 @@ exclude_permissions = ( ('ops', 'celerytaskexecution', 'add,change,delete', 'celerytaskexecution'), ('orgs', 'organizationmember', '*', '*'), ('settings', 'setting', 'add,change,delete', 'setting'), + ('audits', 'joblog', 'add,delete,change', '*'), ('audits', 'operatelog', 'add,delete,change', 'operatelog'), ('audits', 'activitylog', 'add,delete,change', 'activitylog'), ('audits', 'passwordchangelog', 'add,change,delete', 'passwordchangelog'), diff --git a/apps/rbac/tree.py b/apps/rbac/tree.py index f8dd5967e..1fffdf453 100644 --- a/apps/rbac/tree.py +++ b/apps/rbac/tree.py @@ -95,7 +95,6 @@ special_pid_mapper = { 'terminal.endpointrule': 'terminal_node', 'audits.ftplog': 'terminal', 'perms.view_myassets': 'my_assets', - 'ops.jobauditlog': 'audits', 'ops.celerytask': 'task_center', 'ops.view_celerytaskexecution': 'task_center', 'ops.view_taskmonitor': 'task_center',