diff --git a/src/jobservice/job/impl/purge/purge.go b/src/jobservice/job/impl/purge/purge.go index 59131456e22..6e742d435f3 100644 --- a/src/jobservice/job/impl/purge/purge.go +++ b/src/jobservice/job/impl/purge/purge.go @@ -21,6 +21,7 @@ import ( "github.com/goharbor/harbor/src/common" "github.com/goharbor/harbor/src/jobservice/job" "github.com/goharbor/harbor/src/pkg/audit" + "github.com/goharbor/harbor/src/pkg/auditext" ) // Job defines the purge job @@ -29,6 +30,7 @@ type Job struct { includeOperations []string dryRun bool auditMgr audit.Manager + auditExtMgr auditext.Manager } // MaxFails is implementation of same method in Interface. @@ -106,11 +108,19 @@ func (j *Job) Run(ctx job.Context, params job.Parameters) error { if j.retentionHour > common.MaxAuditRetentionHour { j.retentionHour = common.MaxAuditRetentionHour } + // TODO: Remove the previous purge logic when the audit_log is not used anymore n, err := j.auditMgr.Purge(ormCtx, j.retentionHour, j.includeOperations, j.dryRun) if err != nil { logger.Errorf("failed to purge audit log, error: %v", err) return err } + // purge the audit_log_ext table + n2, err2 := j.auditExtMgr.Purge(ormCtx, j.retentionHour, j.includeOperations, j.dryRun) + if err2 != nil { + logger.Errorf("failed to purge audit log ext, error: %v", err2) + return err2 + } + n += n2 logger.Infof("Purge operation parameter, retention_hour=%v, include_operations:%v, dry_run:%v", j.retentionHour, j.includeOperations, j.dryRun) if j.dryRun { diff --git a/src/pkg/auditext/dao/dao.go b/src/pkg/auditext/dao/dao.go index dfee58e0e15..ad0e25421f3 100644 --- a/src/pkg/auditext/dao/dao.go +++ b/src/pkg/auditext/dao/dao.go @@ -199,6 +199,8 @@ func permitEventTypes(includeEventTypes []string) []string { event := strings.ToLower(e) if utils.StringInSlice(event, model.EventTypes) { filterEvents = append(filterEvents, e) + } else if event == model.OtherEvents { // include all other events + filterEvents = append(filterEvents, model.OtherEventTypes...) } } return filterEvents diff --git a/src/pkg/auditext/dao/dao_test.go b/src/pkg/auditext/dao/dao_test.go index 86a3d361912..2296cc64be8 100644 --- a/src/pkg/auditext/dao/dao_test.go +++ b/src/pkg/auditext/dao/dao_test.go @@ -185,4 +185,9 @@ func TestPermitEventTypes(t *testing.T) { t.Errorf("permitEventTypes failed") } + // test other event types + otherEventTypes := permitEventTypes([]string{"create_artifact", "delete_artifact", "pull_artifact", "other_events"}) + if len(otherEventTypes) != len(model.EventTypes) { + t.Errorf("permitOtherEventTypes failed, it should include all event types") + } } diff --git a/src/pkg/auditext/model/model.go b/src/pkg/auditext/model/model.go index 12a3f04f318..1f86c42c8a2 100644 --- a/src/pkg/auditext/model/model.go +++ b/src/pkg/auditext/model/model.go @@ -20,6 +20,8 @@ import ( beego_orm "github.com/beego/beego/v2/client/orm" ) +const OtherEvents = "other_events" + func init() { beego_orm.RegisterModel(&AuditLogExt{}) } @@ -60,3 +62,18 @@ var EventTypes = []string{ "delete_robot", "update_configure", } + +// OtherEventTypes defines the types of other audit log event types excludes previous EventTypes: create_artifact, delete_artifact, pull_artifact +var OtherEventTypes = []string{ + "create_project", + "delete_project", + "delete_repository", + "login_user", + "logout_user", + "create_user", + "delete_user", + "update_user", + "create_robot", + "delete_robot", + "update_configure", +}