Files
ziti/controller/api_impl/raft_router.go
T
2023-09-28 23:34:28 -04:00

58 lines
1.5 KiB
Go

package api_impl
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/openziti/ziti/controller/api"
"github.com/openziti/ziti/controller/network"
nfraft "github.com/openziti/ziti/controller/raft"
"github.com/openziti/ziti/controller/rest_model"
"github.com/openziti/ziti/controller/rest_server/operations"
"github.com/openziti/ziti/controller/rest_server/operations/raft"
)
func init() {
r := NewRaftRouter()
AddRouter(r)
}
type RaftRouter struct {
}
func NewRaftRouter() *RaftRouter {
return &RaftRouter{}
}
func (r *RaftRouter) Register(fabricApi *operations.ZitiFabricAPI, wrapper RequestWrapper) {
fabricApi.RaftRaftListMembersHandler = raft.RaftListMembersHandlerFunc(func(params raft.RaftListMembersParams) middleware.Responder {
return wrapper.WrapRequest(r.ListMembers, params.HTTPRequest, "", "")
})
}
func (r *RaftRouter) ListMembers(n *network.Network, rc api.RequestContext) {
vals := make([]*rest_model.RaftMemberListValue, 0)
if n.Dispatcher != nil {
rctrl := n.Dispatcher.(*nfraft.Controller)
members, err := rctrl.ListMembers()
if err != nil {
rc.Respond(rest_model.RaftMemberListResponse{}, http.StatusInternalServerError)
}
for _, member := range members {
vals = append(vals, &rest_model.RaftMemberListValue{
Address: &member.Addr,
Connected: &member.Connected,
ID: &member.Id,
Leader: &member.Leader,
Version: &member.Version,
Voter: &member.Voter,
})
}
}
rc.Respond(rest_model.RaftMemberListResponse{
Values: vals,
}, http.StatusOK)
}