mirror of
https://github.com/goharbor/harbor.git
synced 2024-06-29 08:15:06 +02:00
65e675d2e6
Integrate CloudEvents as payload format for webhook. Closes: #17748 Signed-off-by: chlins <chenyuzh@vmware.com>
71 lines
2.0 KiB
Go
71 lines
2.0 KiB
Go
package retention
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/goharbor/harbor/src/controller/event/metadata"
|
|
"github.com/goharbor/harbor/src/jobservice/job"
|
|
"github.com/goharbor/harbor/src/lib/log"
|
|
"github.com/goharbor/harbor/src/lib/selector"
|
|
"github.com/goharbor/harbor/src/pkg/notifier/event"
|
|
"github.com/goharbor/harbor/src/pkg/task"
|
|
)
|
|
|
|
func init() {
|
|
if err := task.RegisterCheckInProcessor(job.RetentionVendorType, retentionTaskCheckInProcessor); err != nil {
|
|
log.Fatalf("failed to register the checkin processor for the retention job, error %v", err)
|
|
}
|
|
}
|
|
|
|
func retentionTaskCheckInProcessor(ctx context.Context, t *task.Task, sc *job.StatusChange) (err error) {
|
|
taskID := t.ID
|
|
status := t.Status
|
|
log.Debugf("received retention task status update event: task-%d, status-%s", taskID, status)
|
|
// handle checkin
|
|
if sc.CheckIn != "" {
|
|
var retainObj struct {
|
|
Total int `json:"total"`
|
|
Retained int `json:"retained"`
|
|
Deleted []*selector.Result `json:"deleted"`
|
|
}
|
|
if err := json.Unmarshal([]byte(sc.CheckIn), &retainObj); err != nil {
|
|
log.Errorf("failed to resolve checkin of retention task %d: %v", taskID, err)
|
|
|
|
return err
|
|
}
|
|
|
|
t, err := task.Mgr.Get(ctx, taskID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
t.ExtraAttrs["total"] = retainObj.Total
|
|
t.ExtraAttrs["retained"] = retainObj.Retained
|
|
|
|
err = task.Mgr.UpdateExtraAttrs(ctx, taskID, t.ExtraAttrs)
|
|
if err != nil {
|
|
log.G(ctx).WithField("error", err).Errorf("failed to update of retention task %d", taskID)
|
|
return err
|
|
}
|
|
|
|
e := &event.Event{}
|
|
metaData := &metadata.RetentionMetaData{
|
|
Total: retainObj.Total,
|
|
Retained: retainObj.Retained,
|
|
Deleted: retainObj.Deleted,
|
|
Status: "SUCCESS",
|
|
TaskID: taskID,
|
|
}
|
|
|
|
if err := e.Build(ctx, metaData); err == nil {
|
|
if err := e.Publish(ctx); err != nil {
|
|
log.G(ctx).WithField("error", err).Errorf("tag retention job hook handler: event publish")
|
|
}
|
|
} else {
|
|
log.G(ctx).WithField("error", err).Errorf("tag retention job hook handler: event publish")
|
|
}
|
|
}
|
|
return nil
|
|
}
|