()
| 31 | ) |
| 32 | |
| 33 | func (srv *Server) initHandlers() { |
| 34 | engine := srv.engine |
| 35 | engine.Use(middleware.CollectMetrics, func(c *gin.Context) { |
| 36 | c.Set(consts.ContextKeyStore, srv.store) |
| 37 | c.Next() |
| 38 | }, middleware.RedirectIfNotLeader) |
| 39 | handler := api.NewHandler(srv.store) |
| 40 | |
| 41 | engine.Any("/debug/pprof/*profile", PProf) |
| 42 | engine.GET("/metrics", gin.WrapH(promhttp.Handler())) |
| 43 | engine.NoRoute(func(c *gin.Context) { |
| 44 | helper.ResponseError(c, consts.ErrNotFound) |
| 45 | c.Abort() |
| 46 | }) |
| 47 | |
| 48 | apiV1 := engine.Group("/api/v1/") |
| 49 | { |
| 50 | raftAPI := apiV1.Group("raft") |
| 51 | { |
| 52 | raftAPI.Use(middleware.RequiredRaftEngine) |
| 53 | raftAPI.POST("/peers", handler.Raft.UpdatePeer) |
| 54 | raftAPI.GET("/peers", handler.Raft.ListPeers) |
| 55 | } |
| 56 | |
| 57 | namespaces := apiV1.Group("namespaces") |
| 58 | { |
| 59 | namespaces.GET("", handler.Namespace.List) |
| 60 | namespaces.GET("/:namespace", handler.Namespace.Exists) |
| 61 | namespaces.POST("", handler.Namespace.Create) |
| 62 | namespaces.DELETE("/:namespace", handler.Namespace.Remove) |
| 63 | } |
| 64 | |
| 65 | clusters := namespaces.Group("/:namespace/clusters") |
| 66 | { |
| 67 | clusters.GET("", middleware.RequiredNamespace, handler.Cluster.List) |
| 68 | clusters.POST("", middleware.RequiredNamespace, handler.Cluster.Create) |
| 69 | clusters.POST("/:cluster/import", middleware.RequiredNamespace, handler.Cluster.Import) |
| 70 | clusters.GET("/:cluster", middleware.RequiredCluster, handler.Cluster.Get) |
| 71 | clusters.DELETE("/:cluster", middleware.RequiredCluster, handler.Cluster.Remove) |
| 72 | clusters.POST("/:cluster/migrate", handler.Cluster.MigrateSlot) |
| 73 | } |
| 74 | |
| 75 | shards := clusters.Group("/:cluster/shards") |
| 76 | { |
| 77 | shards.GET("", middleware.RequiredCluster, handler.Shard.List) |
| 78 | shards.POST("", middleware.RequiredCluster, handler.Shard.Create) |
| 79 | shards.GET("/:shard", middleware.RequiredClusterShard, handler.Shard.Get) |
| 80 | shards.DELETE("/:shard", middleware.RequiredCluster, handler.Shard.Remove) |
| 81 | shards.POST("/:shard/failover", middleware.RequiredClusterShard, handler.Shard.Failover) |
| 82 | } |
| 83 | |
| 84 | nodes := shards.Group("/:shard/nodes") |
| 85 | { |
| 86 | nodes.GET("", middleware.RequiredClusterShard, handler.Node.List) |
| 87 | nodes.POST("", middleware.RequiredClusterShard, handler.Node.Create) |
| 88 | nodes.DELETE("/:id", middleware.RequiredClusterShard, handler.Node.Remove) |
| 89 | } |
| 90 | } |
no test coverage detected