fix: 修改 job 审计日志

This commit is contained in:
Aaron3S 2023-02-17 19:58:43 +08:00 committed by Jiangjie.Bai
parent 40b49e258e
commit a79a766a6a
11 changed files with 41 additions and 24 deletions

View File

@ -11,15 +11,14 @@ from rest_framework.permissions import IsAuthenticated
from common.api import JMSGenericViewSet from common.api import JMSGenericViewSet
from common.drf.filters import DatetimeRangeFilter from common.drf.filters import DatetimeRangeFilter
from common.plugins.es import QuerySet as ESQuerySet from common.plugins.es import QuerySet as ESQuerySet
from ops.models.job import JobAuditLog
from orgs.mixins.api import OrgGenericViewSet, OrgBulkModelViewSet from orgs.mixins.api import OrgGenericViewSet, OrgBulkModelViewSet
from orgs.utils import current_org, tmp_to_root_org from orgs.utils import current_org, tmp_to_root_org
from orgs.models import Organization from orgs.models import Organization
from users.models import User from users.models import User
from .backends import TYPE_ENGINE_MAPPING from .backends import TYPE_ENGINE_MAPPING
from .const import ActivityChoices from .const import ActivityChoices
from .models import FTPLog, UserLoginLog, OperateLog, PasswordChangeLog, ActivityLog from .models import FTPLog, UserLoginLog, OperateLog, PasswordChangeLog, ActivityLog, JobLog
from .serializers import FTPLogSerializer, UserLoginLogSerializer, JobAuditLogSerializer from .serializers import FTPLogSerializer, UserLoginLogSerializer, JobLogSerializer
from .serializers import ( from .serializers import (
OperateLogSerializer, OperateLogActionDetailSerializer, OperateLogSerializer, OperateLogActionDetailSerializer,
PasswordChangeLogSerializer, ActivityUnionLogSerializer, PasswordChangeLogSerializer, ActivityUnionLogSerializer,
@ -27,13 +26,13 @@ from .serializers import (
class JobAuditViewSet(OrgBulkModelViewSet): class JobAuditViewSet(OrgBulkModelViewSet):
model = JobAuditLog model = JobLog
extra_filter_backends = [DatetimeRangeFilter] extra_filter_backends = [DatetimeRangeFilter]
date_range_filter_fields = [ date_range_filter_fields = [
('date_start', ('date_from', 'date_to')) ('date_start', ('date_from', 'date_to'))
] ]
search_fields = ['creator__name', 'material'] search_fields = ['creator__name', 'material']
serializer_class = JobAuditLogSerializer serializer_class = JobLogSerializer
ordering = ['-date_start'] ordering = ['-date_start']
http_method_names = ('get', 'head', 'options') http_method_names = ('get', 'head', 'options')

View File

@ -27,4 +27,16 @@ class Migration(migrations.Migration):
'ordering': ('-datetime',), 'ordering': ('-datetime',),
}, },
), ),
migrations.CreateModel(
name='JobLog',
fields=[
],
options={
'verbose_name': 'Job audit log',
'proxy': True,
'indexes': [],
'constraints': [],
},
bases=('ops.jobexecution',),
),
] ]

View File

@ -7,6 +7,7 @@ from django.utils.translation import gettext, ugettext_lazy as _
from common.db.encoder import ModelJSONFieldEncoder from common.db.encoder import ModelJSONFieldEncoder
from common.utils import lazyproperty from common.utils import lazyproperty
from ops.models import JobExecution
from orgs.mixins.models import OrgModelMixin, Organization from orgs.mixins.models import OrgModelMixin, Organization
from orgs.utils import current_org from orgs.utils import current_org
from .const import ( from .const import (
@ -24,9 +25,20 @@ __all__ = [
"ActivityLog", "ActivityLog",
"PasswordChangeLog", "PasswordChangeLog",
"UserLoginLog", "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): class FTPLog(OrgModelMixin):
id = models.UUIDField(default=uuid.uuid4, primary_key=True) id = models.UUIDField(default=uuid.uuid4, primary_key=True)
user = models.CharField(max_length=128, verbose_name=_("User")) user = models.CharField(max_length=128, verbose_name=_("User"))

View File

@ -7,7 +7,6 @@ from audits.backends.db import OperateLogStore
from common.serializers.fields import LabeledChoiceField from common.serializers.fields import LabeledChoiceField
from common.utils import reverse, i18n_trans from common.utils import reverse, i18n_trans
from common.utils.timezone import as_current_tz from common.utils.timezone import as_current_tz
from ops.models.job import JobAuditLog
from ops.serializers.job import JobExecutionSerializer from ops.serializers.job import JobExecutionSerializer
from terminal.models import Session from terminal.models import Session
from . import models from . import models
@ -18,9 +17,9 @@ from .const import (
) )
class JobAuditLogSerializer(JobExecutionSerializer): class JobLogSerializer(JobExecutionSerializer):
class Meta: class Meta:
model = JobAuditLog model = models.JobLog
read_only_fields = [ read_only_fields = [
"id", "material", "time_cost", 'date_start', "id", "material", "time_cost", 'date_start',
'date_finished', 'date_created', 'date_finished', 'date_created',

View File

@ -159,7 +159,7 @@ def on_django_start_set_operate_log_monitor_models(sender, **kwargs):
'MessageContent', 'SiteMessage', 'MessageContent', 'SiteMessage',
'PlatformAutomation', 'PlatformProtocol', 'Protocol', 'PlatformAutomation', 'PlatformProtocol', 'Protocol',
'HistoricalAccount', 'GatheredUser', 'ApprovalRule', 'HistoricalAccount', 'GatheredUser', 'ApprovalRule',
'BaseAutomation', 'CeleryTask', 'Command', 'JobAuditLog', 'BaseAutomation', 'CeleryTask', 'Command', 'JobLog',
'ConnectionToken', 'SessionJoinRecord', 'ConnectionToken', 'SessionJoinRecord',
'HistoricalJob', 'Status', 'TicketStep', 'Ticket', 'HistoricalJob', 'Status', 'TicketStep', 'Ticket',
'UserAssetGrantedTreeNodeRelation', 'TicketAssignee', 'UserAssetGrantedTreeNodeRelation', 'TicketAssignee',

View File

@ -13,11 +13,11 @@ from rest_framework.views import APIView
from assets.const import AllTypes from assets.const import AllTypes
from assets.models import Asset from assets.models import Asset
from audits.const import LoginStatusChoices 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 import lazyproperty
from common.utils.timezone import local_now, local_zero_hour from common.utils.timezone import local_now, local_zero_hour
from ops.const import JobStatus 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.caches import OrgResourceStatisticsCache
from orgs.utils import current_org from orgs.utils import current_org
from terminal.models import Session, Command from terminal.models import Session, Command
@ -123,7 +123,7 @@ class DateTimeMixin:
@lazyproperty @lazyproperty
def job_logs_queryset(self): def job_logs_queryset(self):
t = self.days_to_datetime t = self.days_to_datetime
queryset = JobAuditLog.objects.filter(date_created__gte=t) queryset = JobLog.objects.filter(date_created__gte=t)
return queryset return queryset
@lazyproperty @lazyproperty
@ -138,7 +138,7 @@ class DatesLoginMetricMixin:
command_queryset: Command.objects command_queryset: Command.objects
sessions_queryset: Session.objects sessions_queryset: Session.objects
ftp_logs_queryset: OperateLog.objects ftp_logs_queryset: OperateLog.objects
job_logs_queryset: JobAuditLog.objects job_logs_queryset: JobLog.objects
login_logs_queryset: UserLoginLog.objects login_logs_queryset: UserLoginLog.objects
operate_logs_queryset: OperateLog.objects operate_logs_queryset: OperateLog.objects
password_change_logs_queryset: PasswordChangeLog.objects password_change_logs_queryset: PasswordChangeLog.objects

View File

@ -64,5 +64,8 @@ class Migration(migrations.Migration):
name='material', name='material',
field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Material'), field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Material'),
), ),
migrations.DeleteModel(
name='JobAuditLog',
),
migrations.RunPython(compatible), migrations.RunPython(compatible),
] ]

View File

@ -9,7 +9,7 @@ from django.db import models
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
__all__ = ["Job", "JobExecution", "JobAuditLog"] __all__ = ["Job", "JobExecution"]
from simple_history.models import HistoricalRecords from simple_history.models import HistoricalRecords
@ -362,11 +362,3 @@ class JobExecution(JMSOrgBaseModel):
ordering = ['-date_created'] ordering = ['-date_created']
class JobAuditLog(JobExecution):
@property
def creator_name(self):
return self.creator.name
class Meta:
proxy = True
verbose_name = _("Job audit log")

View File

@ -30,7 +30,7 @@ system_user_perms = (
_auditor_perms = ( _auditor_perms = (
('rbac', 'menupermission', 'view', 'audit'), ('rbac', 'menupermission', 'view', 'audit'),
('audits', '*', '*', '*'), ('audits', '*', '*', '*'),
('ops', 'jobauditlog', '*', '*'), ('audits', 'joblog', '*', '*'),
('terminal', 'commandstorage', 'view', 'commandstorage'), ('terminal', 'commandstorage', 'view', 'commandstorage'),
('terminal', 'sessionreplay', 'view,download', 'sessionreplay'), ('terminal', 'sessionreplay', 'view,download', 'sessionreplay'),
('terminal', 'session', '*', '*'), ('terminal', 'session', '*', '*'),

View File

@ -79,6 +79,7 @@ exclude_permissions = (
('ops', 'celerytaskexecution', 'add,change,delete', 'celerytaskexecution'), ('ops', 'celerytaskexecution', 'add,change,delete', 'celerytaskexecution'),
('orgs', 'organizationmember', '*', '*'), ('orgs', 'organizationmember', '*', '*'),
('settings', 'setting', 'add,change,delete', 'setting'), ('settings', 'setting', 'add,change,delete', 'setting'),
('audits', 'joblog', 'add,delete,change', '*'),
('audits', 'operatelog', 'add,delete,change', 'operatelog'), ('audits', 'operatelog', 'add,delete,change', 'operatelog'),
('audits', 'activitylog', 'add,delete,change', 'activitylog'), ('audits', 'activitylog', 'add,delete,change', 'activitylog'),
('audits', 'passwordchangelog', 'add,change,delete', 'passwordchangelog'), ('audits', 'passwordchangelog', 'add,change,delete', 'passwordchangelog'),

View File

@ -95,7 +95,6 @@ special_pid_mapper = {
'terminal.endpointrule': 'terminal_node', 'terminal.endpointrule': 'terminal_node',
'audits.ftplog': 'terminal', 'audits.ftplog': 'terminal',
'perms.view_myassets': 'my_assets', 'perms.view_myassets': 'my_assets',
'ops.jobauditlog': 'audits',
'ops.celerytask': 'task_center', 'ops.celerytask': 'task_center',
'ops.view_celerytaskexecution': 'task_center', 'ops.view_celerytaskexecution': 'task_center',
'ops.view_taskmonitor': 'task_center', 'ops.view_taskmonitor': 'task_center',