|
1 | 1 | package api
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "context" |
5 |
| - "fmt" |
6 |
| - "log/slog" |
7 |
| - "net/http" |
8 |
| - |
9 |
| - "humpback/api/handle" |
10 |
| - "humpback/api/middleware" |
11 |
| - "humpback/api/static" |
12 |
| - "humpback/config" |
13 |
| - "humpback/types" |
14 |
| - |
15 |
| - "github.com/gin-gonic/gin" |
| 4 | + "context" |
| 5 | + "fmt" |
| 6 | + "log/slog" |
| 7 | + "net/http" |
| 8 | + |
| 9 | + "humpback/api/handle" |
| 10 | + "humpback/api/middleware" |
| 11 | + "humpback/api/static" |
| 12 | + "humpback/config" |
| 13 | + "humpback/types" |
| 14 | + |
| 15 | + "github.com/gin-gonic/gin" |
16 | 16 | )
|
17 | 17 |
|
18 | 18 | type Router struct {
|
19 |
| - engine *gin.Engine |
20 |
| - httpSrv *http.Server |
| 19 | + engine *gin.Engine |
| 20 | + httpSrv *http.Server |
21 | 21 | }
|
22 | 22 |
|
23 | 23 | func InitRouter(nodeCh chan types.NodeSimpleInfo, serviceCh chan types.ServiceChangeInfo) *Router {
|
24 |
| - gin.SetMode(gin.ReleaseMode) |
25 |
| - gin.Default() |
26 |
| - r := &Router{engine: gin.New()} |
27 |
| - r.setMiddleware(nodeCh, serviceCh) |
28 |
| - r.setRoute() |
29 |
| - return r |
| 24 | + gin.SetMode(gin.ReleaseMode) |
| 25 | + gin.Default() |
| 26 | + r := &Router{engine: gin.New()} |
| 27 | + r.setMiddleware(nodeCh, serviceCh) |
| 28 | + r.setRoute() |
| 29 | + return r |
30 | 30 | }
|
31 | 31 |
|
32 | 32 | func (api *Router) Start() {
|
33 |
| - go func() { |
34 |
| - listeningAddress := fmt.Sprintf("%s:%s", config.NodeArgs().HostIp, config.NodeArgs().SitePort) |
35 |
| - slog.Info("[Api] Listening...", "Address", listeningAddress) |
36 |
| - api.httpSrv = &http.Server{ |
37 |
| - Addr: listeningAddress, |
38 |
| - Handler: api.engine, |
39 |
| - } |
40 |
| - if err := api.httpSrv.ListenAndServe(); err != nil && err != http.ErrServerClosed { |
41 |
| - slog.Error(fmt.Sprintf("[Api] Listening %s failed: %s", listeningAddress, err)) |
42 |
| - } |
43 |
| - }() |
| 33 | + go func() { |
| 34 | + listeningAddress := fmt.Sprintf("%s:%s", config.NodeArgs().HostIp, config.NodeArgs().SitePort) |
| 35 | + slog.Info("[Site Api] Listening...", "Address", listeningAddress) |
| 36 | + api.httpSrv = &http.Server{ |
| 37 | + Addr: listeningAddress, |
| 38 | + Handler: api.engine, |
| 39 | + } |
| 40 | + if err := api.httpSrv.ListenAndServe(); err != nil && err != http.ErrServerClosed { |
| 41 | + slog.Error("[Site Api] Listening failed", "Address", listeningAddress, "Error", err) |
| 42 | + } |
| 43 | + }() |
44 | 44 | }
|
45 | 45 |
|
46 | 46 | func (api *Router) Close(c context.Context) error {
|
47 |
| - return api.httpSrv.Shutdown(c) |
| 47 | + return api.httpSrv.Shutdown(c) |
48 | 48 | }
|
49 | 49 |
|
50 | 50 | func (api *Router) setMiddleware(nodeCh chan types.NodeSimpleInfo, serviceCh chan types.ServiceChangeInfo) {
|
51 |
| - api.engine.Use(middleware.Log(), middleware.CorsCheck(), middleware.HandleError(), middleware.SetEventChannel(nodeCh, serviceCh)) |
| 51 | + api.engine.Use(middleware.Log(), middleware.CorsCheck(), middleware.HandleError(), middleware.SetEventChannel(nodeCh, serviceCh)) |
52 | 52 | }
|
53 | 53 |
|
54 | 54 | func (api *Router) setRoute() {
|
55 |
| - var routes = map[string]map[string][]any{ |
56 |
| - "/webapi": { |
57 |
| - "/common": {handle.RouteCommon}, |
58 |
| - "/user": {handle.RouteUser}, |
59 |
| - "/team": {middleware.CheckLogin(), handle.RouteTeam}, |
60 |
| - "/config": {middleware.CheckLogin(), handle.RouteConfig}, |
61 |
| - "/registry": {middleware.CheckLogin(), handle.RouteRegistry}, |
62 |
| - "/node": {middleware.CheckLogin(), handle.RouteNodes}, |
63 |
| - "/group": {middleware.CheckLogin(), handle.RouteGroup}, |
64 |
| - "/group/:groupId/service": {middleware.CheckLogin(), middleware.CheckInGroup(), handle.RouteService}, |
65 |
| - "/group/:groupId/node": {middleware.CheckLogin(), middleware.CheckInGroup(), handle.RouteGroupNode}, |
66 |
| - "/group/:groupId/container": {middleware.CheckLogin(), middleware.CheckInGroup(), handle.RouteGroupContainer}, |
67 |
| - }, |
68 |
| - } |
69 |
| - |
70 |
| - for group, list := range routes { |
71 |
| - for path, fList := range list { |
72 |
| - routerGroup := api.engine.Group(fmt.Sprintf("%s%s", group, path), parseSliceAnyToSliceFunc(fList[:len(fList)-1])...) |
73 |
| - groupFunc := fList[len(fList)-1].(func(*gin.RouterGroup)) |
74 |
| - groupFunc(routerGroup) |
75 |
| - } |
76 |
| - } |
77 |
| - api.engine.NoRoute(static.Web) |
| 55 | + var routes = map[string]map[string][]any{ |
| 56 | + "/webapi": { |
| 57 | + "/common": {handle.RouteCommon}, |
| 58 | + "/user": {handle.RouteUser}, |
| 59 | + "/team": {middleware.CheckLogin(), handle.RouteTeam}, |
| 60 | + "/config": {middleware.CheckLogin(), handle.RouteConfig}, |
| 61 | + "/registry": {middleware.CheckLogin(), handle.RouteRegistry}, |
| 62 | + "/node": {middleware.CheckLogin(), handle.RouteNodes}, |
| 63 | + "/group": {middleware.CheckLogin(), handle.RouteGroup}, |
| 64 | + "/group/:groupId/service": {middleware.CheckLogin(), middleware.CheckInGroup(), handle.RouteService}, |
| 65 | + "/group/:groupId/node": {middleware.CheckLogin(), middleware.CheckInGroup(), handle.RouteGroupNode}, |
| 66 | + "/statistics-count": {middleware.CheckLogin(), handle.RouteStatisticsCount}, |
| 67 | + "/activity": {middleware.CheckLogin(), handle.RouteActivity}, |
| 68 | + "/dashboard": {middleware.CheckLogin(), handle.RouteDashboard}, |
| 69 | + }, |
| 70 | + } |
| 71 | + |
| 72 | + for group, list := range routes { |
| 73 | + for path, fList := range list { |
| 74 | + routerGroup := api.engine.Group(fmt.Sprintf("%s%s", group, path), parseSliceAnyToSliceFunc(fList[:len(fList)-1])...) |
| 75 | + groupFunc := fList[len(fList)-1].(func(*gin.RouterGroup)) |
| 76 | + groupFunc(routerGroup) |
| 77 | + } |
| 78 | + } |
| 79 | + api.engine.NoRoute(static.Web) |
78 | 80 | }
|
79 | 81 |
|
80 | 82 | func parseSliceAnyToSliceFunc(functions []any) []gin.HandlerFunc {
|
81 |
| - result := make([]gin.HandlerFunc, 0) |
82 |
| - for _, f := range functions { |
83 |
| - if fun, ok := f.(gin.HandlerFunc); ok { |
84 |
| - result = append(result, fun) |
85 |
| - } |
86 |
| - } |
87 |
| - return result |
| 83 | + result := make([]gin.HandlerFunc, 0) |
| 84 | + for _, f := range functions { |
| 85 | + if fun, ok := f.(gin.HandlerFunc); ok { |
| 86 | + result = append(result, fun) |
| 87 | + } |
| 88 | + } |
| 89 | + return result |
88 | 90 | }
|
0 commit comments