feat: 增加作业审计api

pull/9219/head
Aaron3S 2022-12-16 15:52:02 +08:00
parent bc47afb329
commit 009669febe
6 changed files with 40 additions and 10 deletions

View File

@ -13,19 +13,25 @@ from common.drf.api import JMSReadOnlyModelViewSet
from common.plugins.es import QuerySet as ESQuerySet from common.plugins.es import QuerySet as ESQuerySet
from common.drf.filters import DatetimeRangeFilter from common.drf.filters import DatetimeRangeFilter
from common.api import CommonGenericViewSet from common.api import CommonGenericViewSet
from orgs.mixins.api import OrgGenericViewSet, OrgBulkModelViewSet, OrgRelationMixin from ops.models.job import JobAuditLog
from orgs.mixins.api import OrgGenericViewSet, OrgBulkModelViewSet
from orgs.utils import current_org from orgs.utils import current_org
# from ops.models import CommandExecution
from . import filters
from .backends import TYPE_ENGINE_MAPPING from .backends import TYPE_ENGINE_MAPPING
from .models import FTPLog, UserLoginLog, OperateLog, PasswordChangeLog from .models import FTPLog, UserLoginLog, OperateLog, PasswordChangeLog
from .serializers import FTPLogSerializer, UserLoginLogSerializer from .serializers import FTPLogSerializer, UserLoginLogSerializer, JobAuditLogSerializer
from .serializers import ( from .serializers import (
OperateLogSerializer, OperateLogActionDetailSerializer, OperateLogSerializer, OperateLogActionDetailSerializer,
PasswordChangeLogSerializer PasswordChangeLogSerializer
) )
class JobAuditViewSet(OrgBulkModelViewSet):
serializer_class = JobAuditLogSerializer
http_method_names = ('get', 'head', 'options',)
permission_classes = ()
model = JobAuditLog
class FTPLogViewSet(CreateModelMixin, ListModelMixin, OrgGenericViewSet): class FTPLogViewSet(CreateModelMixin, ListModelMixin, OrgGenericViewSet):
model = FTPLog model = FTPLog
serializer_class = FTPLogSerializer serializer_class = FTPLogSerializer

View File

@ -4,6 +4,8 @@ from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from common.drf.fields import LabeledChoiceField from common.drf.fields import LabeledChoiceField
from ops.models.job import JobAuditLog
from ops.serializers.job import JobExecutionSerializer
from terminal.models import Session from terminal.models import Session
from . import models from . import models
from .const import ( from .const import (
@ -15,6 +17,17 @@ from .const import (
) )
class JobAuditLogSerializer(JobExecutionSerializer):
class Meta:
model = JobAuditLog
read_only_fields = ["timedelta", "time_cost", 'is_finished', 'date_start',
'date_finished',
'date_created',
'is_success',
'creator_name']
fields = read_only_fields + []
class FTPLogSerializer(serializers.ModelSerializer): class FTPLogSerializer(serializers.ModelSerializer):
operate = LabeledChoiceField(choices=OperateChoices.choices, label=_("Operate")) operate = LabeledChoiceField(choices=OperateChoices.choices, label=_("Operate"))

View File

@ -7,7 +7,6 @@ from rest_framework.routers import DefaultRouter
from common import api as capi from common import api as capi
from .. import api from .. import api
app_name = "audits" app_name = "audits"
router = DefaultRouter() router = DefaultRouter()
@ -15,9 +14,7 @@ router.register(r'ftp-logs', api.FTPLogViewSet, 'ftp-log')
router.register(r'login-logs', api.UserLoginLogViewSet, 'login-log') router.register(r'login-logs', api.UserLoginLogViewSet, 'login-log')
router.register(r'operate-logs', api.OperateLogViewSet, 'operate-log') router.register(r'operate-logs', api.OperateLogViewSet, 'operate-log')
router.register(r'password-change-logs', api.PasswordChangeLogViewSet, 'password-change-log') router.register(r'password-change-logs', api.PasswordChangeLogViewSet, 'password-change-log')
# router.register(r'command-execution-logs', api.CommandExecutionViewSet, 'command-execution-log') router.register(r'job-logs', api.JobAuditViewSet, 'job-log')
# router.register(r'command-executions-hosts-relations', api.CommandExecutionHostRelationViewSet, 'command-executions-hosts-relation')
urlpatterns = [ urlpatterns = [
path('my-login-logs/', api.MyLoginLogAPIView.as_view(), name='my-login-log'), path('my-login-logs/', api.MyLoginLogAPIView.as_view(), name='my-login-log'),

View File

@ -3,9 +3,10 @@ from django.shortcuts import get_object_or_404
from rest_framework.response import Response from rest_framework.response import Response
from ops.models import Job, JobExecution from ops.models import Job, JobExecution
from ops.models.job import JobAuditLog
from ops.serializers.job import JobSerializer, JobExecutionSerializer from ops.serializers.job import JobSerializer, JobExecutionSerializer
__all__ = ['JobViewSet', 'JobExecutionViewSet', 'JobRunVariableHelpAPIView', 'JobAssetDetail'] __all__ = ['JobViewSet', 'JobExecutionViewSet', 'JobRunVariableHelpAPIView', 'JobAssetDetail', ]
from ops.tasks import run_ops_job_execution from ops.tasks import run_ops_job_execution
from ops.variables import JMS_JOB_VARIABLE_HELP from ops.variables import JMS_JOB_VARIABLE_HELP

View File

@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _
from django.utils import timezone from django.utils import timezone
from celery import current_task from celery import current_task
__all__ = ["Job", "JobExecution"] __all__ = ["Job", "JobExecution", "JobAuditLog"]
from ops.ansible import JMSInventory, AdHocRunner, PlaybookRunner from ops.ansible import JMSInventory, AdHocRunner, PlaybookRunner
from ops.mixin import PeriodTaskModelMixin from ops.mixin import PeriodTaskModelMixin
@ -286,3 +286,12 @@ class JobExecution(JMSOrgBaseModel):
class Meta: class Meta:
ordering = ['-date_created'] ordering = ['-date_created']
class JobAuditLog(JobExecution):
@property
def creator_name(self):
return self.creator.name
class Meta:
proxy = True

View File

@ -3,6 +3,7 @@ from rest_framework import serializers
from common.drf.fields import ReadableHiddenField from common.drf.fields import ReadableHiddenField
from ops.mixin import PeriodTaskSerializerMixin from ops.mixin import PeriodTaskSerializerMixin
from ops.models import Job, JobExecution from ops.models import Job, JobExecution
from ops.models.job import JobAuditLog
from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer
@ -40,3 +41,6 @@ class JobExecutionSerializer(BulkOrgResourceModelSerializer):
fields = read_only_fields + [ fields = read_only_fields + [
"job", "parameters" "job", "parameters"
] ]