Skip to content

Commit b377592

Browse files
committed
添加resource event
1 parent a42350d commit b377592

File tree

5 files changed

+68
-3
lines changed

5 files changed

+68
-3
lines changed

http/context/context.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"net/http"
66

7+
"github.com/infraboard/mcube/http/router"
78
"github.com/julienschmidt/httprouter"
89
)
910

@@ -36,6 +37,7 @@ func NewReqContext() *ReqContext {
3637

3738
// ReqContext context
3839
type ReqContext struct {
40+
Entry *router.Entry
3941
PS httprouter.Params
4042
AuthInfo interface{}
4143
}

http/response/event.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package response
2+
3+
// ResourceEvent 资源事件
4+
type ResourceEvent interface {
5+
ResourceType() string
6+
ResourceUUID() string
7+
ResourceDomain() string
8+
ResourceNamespace() string
9+
ResourceName() string
10+
ResourceAction() string
11+
}

http/response/reporter.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package response
2+
3+
import (
4+
"github.com/infraboard/mcube/bus"
5+
"github.com/infraboard/mcube/bus/event"
6+
"github.com/infraboard/mcube/logger"
7+
"github.com/infraboard/mcube/logger/zap"
8+
)
9+
10+
var (
11+
eReporter bus.Publisher
12+
log logger.Logger
13+
)
14+
15+
func getLog() logger.Logger {
16+
if log == nil {
17+
log = zap.L().Named("Response")
18+
}
19+
20+
return log
21+
}
22+
23+
// SetEventReporter tood
24+
func SetEventReporter(pub bus.Publisher) {
25+
eReporter = pub
26+
}
27+
28+
// HasEventReporter 是否已经初始化
29+
func HasEventReporter() bool {
30+
return eReporter != nil
31+
}
32+
33+
func sendEvent(re ResourceEvent) {
34+
if !HasEventReporter() {
35+
getLog().Errorf("event reporter is nil")
36+
return
37+
}
38+
39+
e := event.NewEvent()
40+
eReporter.Pub("xxx", e)
41+
}

http/router/httprouter/httprouter.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,21 @@ func (r *httpRouter) add(e *entry) {
136136
// 在添加路由时 装饰了认证逻辑
137137
func (r *httpRouter) addHandler(method, path string, h http.Handler) {
138138
wrapper := func(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
139+
rc := context.GetContext(req)
140+
141+
// 路由前钩子
139142
// 使用auther进行认证
140-
var authInfo interface{}
143+
var (
144+
authInfo interface{}
145+
entry *entry
146+
)
141147
if r.auther != nil {
142-
entry := r.findEntry(method, path)
148+
entry = r.findEntry(method, path)
143149
if entry == nil {
144150
r.notFound.ServeHTTP(w, req)
145151
return
146152
}
153+
rc.Entry = entry.Entry
147154

148155
ai, err := r.auther.Auth(req, *entry.Entry)
149156
if err != nil {
@@ -153,11 +160,11 @@ func (r *httpRouter) addHandler(method, path string, h http.Handler) {
153160
authInfo = ai
154161
}
155162

156-
rc := context.GetContext(req)
157163
rc.AuthInfo = authInfo
158164
rc.PS = ps
159165
req = context.WithContext(req, rc)
160166
h.ServeHTTP(w, req)
167+
// 路由后钩子
161168
}
162169
r.r.Handle(method, path, wrapper)
163170
}

http/router/httprouter/httprouter_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ func WithContextHandler(w http.ResponseWriter, r *http.Request) {
3232
return
3333
}
3434

35+
if rctx.Entry == nil {
36+
response.Failed(w, exception.NewBadRequest("no entry"))
37+
}
38+
3539
response.Failed(w, exception.NewBadRequest("failed"))
3640
return
3741
}

0 commit comments

Comments
 (0)