makes listServers api more informative

pull/850/head
oliveagle 2014-08-19 17:09:23 +08:00
parent aa4f2363b0
commit 8fdd988226
4 changed files with 47 additions and 1 deletions

3
.gitignore vendored
View File

@ -60,3 +60,6 @@ config.toml
# test data files
integration/migration_data/
# goide project files
.idea

View File

@ -985,8 +985,22 @@ func (self *HttpServer) listServers(w libhttp.ResponseWriter, r *libhttp.Request
self.tryAsClusterAdmin(w, r, func(u User) (int, interface{}) {
servers := self.clusterConfig.Servers()
serverMaps := make([]map[string]interface{}, len(servers), len(servers))
//FIXME: GetLeaderConnectString is not consistent yet when called on different server.
leaderConnectString, _ := self.raftServer.GetLeaderConnectString()
leaderRaftName := self.raftServer.GetLeaderRaftName()
for i, s := range servers {
serverMaps[i] = map[string]interface{}{"id": s.Id, "protobufConnectString": s.ProtobufConnectionString}
serverMaps[i] = map[string]interface{}{
"id": s.Id,
"protobufConnectString": s.ProtobufConnectionString,
"isUp": s.IsUp(), //FIXME: IsUp is not consistent
"raftName": s.RaftName,
"state": s.State,
"stateName": s.GetStateName(),
"raftConnectionString": s.RaftConnectionString,
"leaderRaftName": leaderRaftName,
"leaderConnectString": leaderConnectString,
"isLeader": self.raftServer.IsLeaderByRaftName(s.RaftName)}
}
return libhttp.StatusOK, serverMaps
})

View File

@ -48,6 +48,22 @@ const (
Potential
)
func (self *ClusterServer) GetStateName() (stateName string) {
switch {
case self.State == LoadingRingData:
return "LoadingRingData"
case self.State == SendingRingData:
return "SendingRingData"
case self.State == DeletingOldData:
return "DeletingOldData"
case self.State == Running:
return "Running"
case self.State == Potential:
return "Potential"
}
return "UNKNOWN"
}
func NewClusterServer(raftName, raftConnectionString, protobufConnectionString string, connection ServerConnection, config *c.Configuration) *ClusterServer {
s := &ClusterServer{

View File

@ -115,6 +115,19 @@ func (s *RaftServer) GetRaftName() string {
return s.name
}
func (s *RaftServer) GetLeaderRaftName() string {
return s.raftServer.Leader()
}
func (s *RaftServer) IsLeaderByRaftName(name string) bool {
//s.raftServer.State() == raft.Leader
return s.raftServer.Leader() == name
}
func (s *RaftServer) GetLeaderConnectString() (string, bool) {
return s.leaderConnectString()
}
func (s *RaftServer) leaderConnectString() (string, bool) {
leader := s.raftServer.Leader()
peers := s.raftServer.Peers()