Skip to content

Commit

Permalink
feat: webhook
Browse files Browse the repository at this point in the history
  • Loading branch information
bysph committed Dec 1, 2022
1 parent 4fd3c8e commit 8c35171
Show file tree
Hide file tree
Showing 38 changed files with 3,175 additions and 27 deletions.
2 changes: 1 addition & 1 deletion .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ stages:
variables:
COVERAGE_STANDARD: 70
REPOSITORY_PREFIX: harbor.mock.org/cloudnative/horizon/
GOPROXY: https://goproxycn,direct
GOPROXY: https://goproxy.cn,direct

before_script:
- export APP_REVISION="${CI_COMMIT_TAG:-${CI_COMMIT_REF_NAME##*/}-r$CI_PIPELINE_ID}"
Expand Down
5 changes: 5 additions & 0 deletions core/cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import (
templateschematagctl "g.hz.netease.com/horizon/core/controller/templateschematag"
terminalctl "g.hz.netease.com/horizon/core/controller/terminal"
userctl "g.hz.netease.com/horizon/core/controller/user"
webhookctl "g.hz.netease.com/horizon/core/controller/webhook"
accessapi "g.hz.netease.com/horizon/core/http/api/v1/access"
"g.hz.netease.com/horizon/core/http/api/v1/accesstoken"
"g.hz.netease.com/horizon/core/http/api/v1/application"
Expand Down Expand Up @@ -70,6 +71,7 @@ import (
templateschematagapi "g.hz.netease.com/horizon/core/http/api/v1/templateschematag"
terminalapi "g.hz.netease.com/horizon/core/http/api/v1/terminal"
"g.hz.netease.com/horizon/core/http/api/v1/user"
"g.hz.netease.com/horizon/core/http/api/v1/webhook"
appv2 "g.hz.netease.com/horizon/core/http/api/v2/application"
buildAPI "g.hz.netease.com/horizon/core/http/api/v2/build"
envtemplatev2 "g.hz.netease.com/horizon/core/http/api/v2/envtemplate"
Expand Down Expand Up @@ -463,6 +465,7 @@ func Run(flags *Flags) {
buildSchemaCtrl = build.NewController(buildSchema)
accessTokenCtl = accesstokenctl.NewController(parameter)
scopeCtl = scopectl.NewController(parameter)
webhookCtl = webhookctl.NewController(parameter)
)

var (
Expand Down Expand Up @@ -497,6 +500,7 @@ func Run(flags *Flags) {
envtemplatev2API = envtemplatev2.NewAPI(envTemplateCtl)
accessTokenAPI = accesstoken.NewAPI(accessTokenCtl, roleService, scopeService)
scopeAPI = scope.NewAPI(scopeCtl)
webhookAPI = webhook.NewAPI(webhookCtl)
)

// init server
Expand Down Expand Up @@ -562,6 +566,7 @@ func Run(flags *Flags) {
templatev2.RegisterRoutes(r, templateAPIV2)
accesstoken.RegisterRoutes(r, accessTokenAPI)
scope.RegisterRoutes(r, scopeAPI)
webhook.RegisterRoutes(r, webhookAPI)

// start cloud event server
go runCloudEventServer(
Expand Down
4 changes: 3 additions & 1 deletion core/common/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,16 @@ const (
// use the pipeline's cluster's member info
ResourcePipelinerun = "pipelineruns"

// ResourceOauthApps urrently oauthapp do not have direct member info, will
// ResourceOauthApps currently oauthapp do not have direct member info, will
// use the oauthapp's groups member info
ResourceOauthApps = "oauthapps"

ResourceTemplate = "templates"

ResourceTemplateRelease = "templatereleases"
AliasTemplateRelease = "releases"

ResourceWebhook = "webhooks"
)

const (
Expand Down
21 changes: 20 additions & 1 deletion core/common/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import (
"context"
"strings"

"github.com/gin-gonic/gin"

herror "g.hz.netease.com/horizon/core/errors"
"g.hz.netease.com/horizon/pkg/authentication/user"
perror "g.hz.netease.com/horizon/pkg/errors"
"github.com/gin-gonic/gin"
usermodels "g.hz.netease.com/horizon/pkg/user/models"
)

const (
Expand All @@ -22,6 +24,23 @@ const (
TokenHeaderValuePrefix = "Bearer"
)

type User struct {
ID uint `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}

func ToUser(user *usermodels.User) *User {
if user == nil {
return nil
}
return &User{
ID: user.ID,
Name: user.Name,
Email: user.Email,
}
}

func UserContextKey() string {
return contextUserKey
}
Expand Down
37 changes: 33 additions & 4 deletions core/controller/application/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import (
codemodels "g.hz.netease.com/horizon/pkg/cluster/code"
clustermanager "g.hz.netease.com/horizon/pkg/cluster/manager"
perror "g.hz.netease.com/horizon/pkg/errors"
eventmanager "g.hz.netease.com/horizon/pkg/event/manager"
eventmodels "g.hz.netease.com/horizon/pkg/event/models"
groupmanager "g.hz.netease.com/horizon/pkg/group/manager"
groupsvc "g.hz.netease.com/horizon/pkg/group/service"
"g.hz.netease.com/horizon/pkg/hook/hook"
Expand All @@ -27,11 +29,13 @@ import (
pipelinemanager "g.hz.netease.com/horizon/pkg/pipelinerun/pipeline/manager"
pipelinemodels "g.hz.netease.com/horizon/pkg/pipelinerun/pipeline/models"
regionmodels "g.hz.netease.com/horizon/pkg/region/models"
"g.hz.netease.com/horizon/pkg/server/middleware/requestid"
trmanager "g.hz.netease.com/horizon/pkg/templaterelease/manager"
templateschema "g.hz.netease.com/horizon/pkg/templaterelease/schema"
usersvc "g.hz.netease.com/horizon/pkg/user/service"
"g.hz.netease.com/horizon/pkg/util/errors"
"g.hz.netease.com/horizon/pkg/util/jsonschema"
"g.hz.netease.com/horizon/pkg/util/log"
"g.hz.netease.com/horizon/pkg/util/permission"
"g.hz.netease.com/horizon/pkg/util/wlog"
)
Expand Down Expand Up @@ -77,6 +81,7 @@ type controller struct {
hook hook.Hook
userSvc usersvc.Service
memberManager member.Manager
eventMgr eventmanager.Manager
applicationRegionMgr applicationregionmanager.Manager
pipelinemanager pipelinemanager.Manager
buildSchema *build.Schema
Expand All @@ -97,6 +102,7 @@ func NewController(param *param.Param) Controller {
hook: param.Hook,
userSvc: param.UserSvc,
memberManager: param.MemberManager,
eventMgr: param.EventManager,
applicationRegionMgr: param.ApplicationRegionManager,
pipelinemanager: param.PipelineMgr,
buildSchema: param.BuildSchema,
Expand Down Expand Up @@ -190,6 +196,7 @@ func (c *controller) GetApplicationV2(ctx context.Context, id uint) (_ *GetAppli
return resp, err
}

//nolint may be used in the future
func (c *controller) postHook(ctx context.Context, eventType hook.EventType, content interface{}) {
if c.hook != nil {
event := hook.Event{
Expand Down Expand Up @@ -274,8 +281,19 @@ func (c *controller) CreateApplication(ctx context.Context, groupID uint,
ret := ofApplicationModel(applicationModel, fullPath, trs,
request.TemplateInput.Pipeline, request.TemplateInput.Application)

// 7. post hook
c.postHook(ctx, hook.CreateApplication, ret)
// 7. record event
// c.postHook(ctx, hook.CreateApplication, ret)
rid, _ := requestid.FromContext(ctx)
if _, err := c.eventMgr.CreateEvent(ctx, &eventmodels.Event{
EventSummary: eventmodels.EventSummary{
ResourceType: eventmodels.Application,
Action: eventmodels.Created,
ResourceID: ret.ID,
},
ReqID: rid,
}); err != nil {
log.Warningf(ctx, "failed to create event, err: %s", err.Error())
}

return ret, nil
}
Expand Down Expand Up @@ -543,8 +561,19 @@ func (c *controller) DeleteApplication(ctx context.Context, id uint, hard bool)
return err
}

// 4. post hook
c.postHook(ctx, hook.DeleteApplication, app.Name)
// 4. delete application
// c.postHook(ctx, hook.DeleteApplication, app.Name)
rid, _ := requestid.FromContext(ctx)
if _, err := c.eventMgr.CreateEvent(ctx, &eventmodels.Event{
EventSummary: eventmodels.EventSummary{
ResourceType: eventmodels.Application,
Action: eventmodels.Deleted,
ResourceID: id,
},
ReqID: rid,
}); err != nil {
log.Warningf(ctx, "failed to create event, err: %s", err.Error())
}

return nil
}
Expand Down
5 changes: 5 additions & 0 deletions core/controller/application/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
userauth "g.hz.netease.com/horizon/pkg/authentication/user"
codemodels "g.hz.netease.com/horizon/pkg/cluster/code"
clustermodels "g.hz.netease.com/horizon/pkg/cluster/models"
eventmodels "g.hz.netease.com/horizon/pkg/event/models"
groupmodels "g.hz.netease.com/horizon/pkg/group/models"
groupservice "g.hz.netease.com/horizon/pkg/group/service"
membermodels "g.hz.netease.com/horizon/pkg/member/models"
Expand Down Expand Up @@ -271,6 +272,9 @@ func TestMain(m *testing.M) {
if err := db.AutoMigrate(&membermodels.Member{}); err != nil {
panic(err)
}
if err := db.AutoMigrate(&eventmodels.Event{}); err != nil {
panic(err)
}
ctx = context.TODO()
ctx = context.WithValue(ctx, common.UserContextKey(), &userauth.DefaultInfo{
Name: "Tony",
Expand Down Expand Up @@ -339,6 +343,7 @@ func Test(t *testing.T) {
templateReleaseMgr: manager.TemplateReleaseManager,
clusterMgr: manager.ClusterMgr,
userSvc: userservice.NewService(manager),
eventMgr: manager.EventManager,
}

group, err := manager.GroupManager.Create(ctx, &groupmodels.Group{
Expand Down
24 changes: 23 additions & 1 deletion core/controller/cloudevent/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@ import (
"strings"

clustermanager "g.hz.netease.com/horizon/pkg/cluster/manager"
eventmanager "g.hz.netease.com/horizon/pkg/event/manager"
eventmodels "g.hz.netease.com/horizon/pkg/event/models"
prmanager "g.hz.netease.com/horizon/pkg/pipelinerun/manager"
prmodels "g.hz.netease.com/horizon/pkg/pipelinerun/models"
pipelinemanager "g.hz.netease.com/horizon/pkg/pipelinerun/pipeline/manager"
"g.hz.netease.com/horizon/pkg/server/middleware/requestid"
trmanager "g.hz.netease.com/horizon/pkg/templaterelease/manager"

"g.hz.netease.com/horizon/core/common"
Expand All @@ -34,6 +37,7 @@ type controller struct {
clusterMgr clustermanager.Manager
clusterGitRepo gitrepo.ClusterGitRepo
templateReleaseMgr trmanager.Manager
eventMgr eventmanager.Manager
}

func NewController(tektonFty factory.Factory, parameter *param.Param) Controller {
Expand All @@ -44,6 +48,7 @@ func NewController(tektonFty factory.Factory, parameter *param.Param) Controller
clusterMgr: parameter.ClusterMgr,
clusterGitRepo: parameter.ClusterGitRepo,
templateReleaseMgr: parameter.TemplateReleaseManager,
eventMgr: parameter.EventManager,
}
}

Expand Down Expand Up @@ -114,7 +119,24 @@ func (c *controller) CloudEvent(ctx context.Context, wpr *WrappedPipelineRun) (e
// 最后指标上报,保证同一条pipelineRun,只上报一条指标
metrics.Observe(pipelineResult)

// 5. insert pipeline into db
// 6. create event
rid, _ := requestid.FromContext(ctx)
clusterID, err := strconv.ParseUint(pipelineResult.BusinessData.ClusterID, 10, 0)
if err != nil {
log.Warningf(ctx, "failed to parse cluster id, err: %s", err.Error())
}
if _, err := c.eventMgr.CreateEvent(ctx, &eventmodels.Event{
EventSummary: eventmodels.EventSummary{
ResourceType: eventmodels.Cluster,
Action: eventmodels.Builded,
ResourceID: uint(clusterID),
},
ReqID: rid,
}); err != nil {
log.Warningf(ctx, "failed to create event, err: %s", err.Error())
}

// 7. insert pipeline into db
err = c.pipelineMgr.Create(ctx, pipelineResult)
if err != nil {
// err不往上层抛,上层也无法处理这种异常
Expand Down
5 changes: 4 additions & 1 deletion core/controller/cloudevent/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
tektonftymock "g.hz.netease.com/horizon/mock/pkg/cluster/tekton/factory"
userauth "g.hz.netease.com/horizon/pkg/authentication/user"
"g.hz.netease.com/horizon/pkg/cluster/tekton/collector"
eventmodels "g.hz.netease.com/horizon/pkg/event/models"
"g.hz.netease.com/horizon/pkg/param/managerparam"
prmodels "g.hz.netease.com/horizon/pkg/pipelinerun/models"
"github.com/stretchr/testify/assert"
Expand All @@ -35,7 +36,7 @@ var (
func TestMain(m *testing.M) {
db, _ := orm.NewSqliteDB("")
manager = managerparam.InitManager(db)
if err := db.AutoMigrate(&prmodels.Pipelinerun{}); err != nil {
if err := db.AutoMigrate(&prmodels.Pipelinerun{}, &eventmodels.Event{}); err != nil {
panic(err)
}
ctx = context.TODO()
Expand Down Expand Up @@ -217,7 +218,9 @@ func Test(t *testing.T) {

c := &controller{
pipelinerunMgr: pipelinerunMgr,
pipelineMgr: manager.PipelineMgr,
tektonFty: tektonFty,
eventMgr: manager.EventManager,
}

err = c.CloudEvent(ctx, &WrappedPipelineRun{
Expand Down
4 changes: 4 additions & 0 deletions core/controller/cluster/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"g.hz.netease.com/horizon/pkg/config/grafana"
envmanager "g.hz.netease.com/horizon/pkg/environment/manager"
environmentregionmapper "g.hz.netease.com/horizon/pkg/environmentregion/manager"
eventmanager "g.hz.netease.com/horizon/pkg/event/manager"
grafanaservice "g.hz.netease.com/horizon/pkg/grafana"
groupmanager "g.hz.netease.com/horizon/pkg/group/manager"
groupsvc "g.hz.netease.com/horizon/pkg/group/service"
Expand Down Expand Up @@ -122,6 +123,7 @@ type controller struct {
grafanaService grafanaservice.Service
grafanaConfig grafana.Config
buildSchema *build.Schema
eventMgr eventmanager.Manager
}

var _ Controller = (*controller)(nil)
Expand Down Expand Up @@ -156,9 +158,11 @@ func NewController(config *config.Config, param *param.Param) Controller {
grafanaService: param.GrafanaService,
grafanaConfig: config.GrafanaConfig,
buildSchema: param.BuildSchema,
eventMgr: param.EventManager,
}
}

//nolint may be used in the future
func (c *controller) postHook(ctx context.Context, eventType hook.EventType, content interface{}) {
if c.hook != nil {
event := hook.Event{
Expand Down
Loading

0 comments on commit 8c35171

Please sign in to comment.