51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package eureka
|
|
|
|
import (
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
type Cluster struct {
|
|
Leader string `json:"leader"`
|
|
Machines []string `json:"machines"`
|
|
}
|
|
|
|
func NewCluster(machines []string) *Cluster {
|
|
// if an empty slice was sent in then just assume HTTP 4001 on localhost
|
|
if len(machines) == 0 {
|
|
machines = []string{"http://127.0.0.1:4001"}
|
|
}
|
|
|
|
// default leader and machines
|
|
return &Cluster{
|
|
Leader: machines[0],
|
|
Machines: machines,
|
|
}
|
|
}
|
|
|
|
// switchLeader switch the current leader to machines[num]
|
|
func (cl *Cluster) switchLeader(num int) {
|
|
logger.Debug("switch.leader[from %v to %v]",
|
|
cl.Leader, cl.Machines[num])
|
|
|
|
cl.Leader = cl.Machines[num]
|
|
}
|
|
|
|
func (cl *Cluster) updateFromStr(machines string) {
|
|
cl.Machines = strings.Split(machines, ", ")
|
|
}
|
|
|
|
func (cl *Cluster) updateLeader(leader string) {
|
|
logger.Debug("update.leader[%s,%s]", cl.Leader, leader)
|
|
cl.Leader = leader
|
|
}
|
|
|
|
func (cl *Cluster) updateLeaderFromURL(u *url.URL) {
|
|
var leader string
|
|
if u.Scheme == "" {
|
|
leader = "http://" + u.Host
|
|
} else {
|
|
leader = u.Scheme + "://" + u.Host
|
|
}
|
|
cl.updateLeader(leader)
|
|
}
|