mirror of
https://github.com/goharbor/harbor
synced 2025-04-16 19:07:06 +00:00
Support stop purge audit log job (#17033)
fixes #17006 Signed-off-by: stonezdj <stonezdj@gmail.com>
This commit is contained in:
parent
0feb2aadcb
commit
c639257ba7
|
@ -4250,6 +4250,26 @@ paths:
|
|||
$ref: '#/responses/404'
|
||||
'500':
|
||||
$ref: '#/responses/500'
|
||||
put:
|
||||
summary: Stop the specific purge audit log execution
|
||||
description: Stop the purge audit log execution specified by ID
|
||||
tags:
|
||||
- purge
|
||||
operationId: stopPurge
|
||||
parameters:
|
||||
- $ref: '#/parameters/requestId'
|
||||
- $ref: '#/parameters/purgeId'
|
||||
responses:
|
||||
'200':
|
||||
$ref: '#/responses/200'
|
||||
'401':
|
||||
$ref: '#/responses/401'
|
||||
'403':
|
||||
$ref: '#/responses/403'
|
||||
'404':
|
||||
$ref: '#/responses/404'
|
||||
'500':
|
||||
$ref: '#/responses/500'
|
||||
/system/purgeaudit/{purge_id}/log:
|
||||
get:
|
||||
summary: Get purge job log.
|
||||
|
|
|
@ -55,6 +55,8 @@ func purgeCallback(ctx context.Context, p string) error {
|
|||
type Controller interface {
|
||||
// Start kick off a purge schedule
|
||||
Start(ctx context.Context, policy JobPolicy, trigger string) (int64, error)
|
||||
// Stop a purge job
|
||||
Stop(ctx context.Context, id int64) error
|
||||
}
|
||||
|
||||
type controller struct {
|
||||
|
@ -62,6 +64,10 @@ type controller struct {
|
|||
exeMgr task.ExecutionManager
|
||||
}
|
||||
|
||||
func (c *controller) Stop(ctx context.Context, id int64) error {
|
||||
return c.exeMgr.Stop(ctx, id)
|
||||
}
|
||||
|
||||
func (c *controller) Start(ctx context.Context, policy JobPolicy, trigger string) (int64, error) {
|
||||
para := make(map[string]interface{})
|
||||
|
||||
|
|
|
@ -92,7 +92,10 @@ func (j *Job) Run(ctx job.Context, params job.Parameters) error {
|
|||
logger := ctx.GetLogger()
|
||||
logger.Info("Purge audit job start")
|
||||
logger.Infof("job parameters %+v", params)
|
||||
|
||||
if j.shouldStop(ctx) {
|
||||
log.Info("received the stop signal, stop the purge job")
|
||||
return nil
|
||||
}
|
||||
j.parseParams(params)
|
||||
ormCtx := ctx.SystemContext()
|
||||
if j.retentionHour == -1 || j.retentionHour == 0 {
|
||||
|
@ -115,3 +118,11 @@ func (j *Job) Run(ctx job.Context, params job.Parameters) error {
|
|||
// Successfully exit
|
||||
return nil
|
||||
}
|
||||
|
||||
func (j *Job) shouldStop(ctx job.Context) bool {
|
||||
opCmd, exit := ctx.OPCommand()
|
||||
if exit && opCmd.IsStop() {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ func (suite *PurgeJobTestSuite) TestRun() {
|
|||
ctx := &mockjobservice.MockJobContext{}
|
||||
logger := &mockjobservice.MockJobLogger{}
|
||||
ctx.On("GetLogger").Return(logger)
|
||||
ctx.On("OPCommand").Return(job.NilCommand, true)
|
||||
auditManager := &mockAudit.Manager{}
|
||||
auditManager.On("Purge", mock.Anything, 128, []string{}, true).Return(int64(100), nil)
|
||||
j := &Job{auditMgr: auditManager}
|
||||
|
@ -76,6 +77,15 @@ func (suite *PurgeJobTestSuite) TestRun() {
|
|||
ret2 := j2.Run(ctx, param2)
|
||||
suite.Require().NotNil(ret2)
|
||||
}
|
||||
func (suite *PurgeJobTestSuite) TestStop() {
|
||||
ctx := &mockjobservice.MockJobContext{}
|
||||
logger := &mockjobservice.MockJobLogger{}
|
||||
ctx.On("GetLogger").Return(logger)
|
||||
ctx.On("OPCommand").Return(job.StopCommand, true)
|
||||
auditManager := &mockAudit.Manager{}
|
||||
j := &Job{auditMgr: auditManager}
|
||||
suite.True(j.shouldStop(ctx))
|
||||
}
|
||||
|
||||
func TestPurgeJobTestSuite(t *testing.T) {
|
||||
suite.Run(t, &PurgeJobTestSuite{})
|
||||
|
|
|
@ -306,3 +306,13 @@ func (p *purgeAPI) createSchedule(ctx context.Context, vendorType string, cronTy
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *purgeAPI) StopPurge(ctx context.Context, params operation.StopPurgeParams) middleware.Responder {
|
||||
if err := p.RequireSystemAccess(ctx, rbac.ActionStop, rbac.ResourcePurgeAuditLog); err != nil {
|
||||
return p.SendError(ctx, err)
|
||||
}
|
||||
if err := p.purgeCtr.Stop(ctx, params.PurgeID); err != nil {
|
||||
return p.SendError(ctx, err)
|
||||
}
|
||||
return operation.NewStopPurgeOK()
|
||||
}
|
||||
|
|
|
@ -35,6 +35,20 @@ func (_m *Controller) Start(ctx context.Context, policy purge.JobPolicy, trigger
|
|||
return r0, r1
|
||||
}
|
||||
|
||||
// Stop provides a mock function with given fields: ctx, id
|
||||
func (_m *Controller) Stop(ctx context.Context, id int64) error {
|
||||
ret := _m.Called(ctx, id)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context, int64) error); ok {
|
||||
r0 = rf(ctx, id)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
type NewControllerT interface {
|
||||
mock.TestingT
|
||||
Cleanup(func())
|
||||
|
|
Loading…
Reference in New Issue
Block a user