go-common/app/admin/main/cache/dao/overlord.go

66 lines
1.7 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package dao
import (
"context"
"net"
"strconv"
"go-common/app/admin/main/cache/model"
"go-common/library/log"
)
var (
apiserverURI = "http://cache-mng.bilibili.co/api/v1/appids/%s"
)
// OverlordClusters get all overlord clusters.
func (d *Dao) OverlordClusters(c context.Context, zone, appid string) (ocs []*model.OverlordCluster, err error) {
var res struct {
Data []*model.OverlordApiserver `json:"grouped_clusters"`
}
if err = d.client.RESTfulGet(c, apiserverURI, "", nil, &res, appid); err != nil {
log.Error("overlord cluster url(%s) appid(%s) error(%v)", apiserverURI, appid, err)
return
}
GETALL:
for _, oa := range res.Data {
if zone == "" || oa.Group == zone {
for _, oc := range oa.Clusters {
cluster := &model.OverlordCluster{
Name: oc.Name,
Type: oc.Type,
Zone: zone,
HashMethod: "fnv1a_64",
HashDistribution: "ketama",
HashTag: "{}",
ListenProto: "tcp",
ListenAddr: net.JoinHostPort("0.0.0.0", strconv.Itoa(oc.FrontEndPort)),
DailTimeout: 1000,
ReadTimeout: 1000,
WriteTimeout: 1000,
NodeConn: 2,
PingFailLimit: 3,
PingAutoEject: true,
}
for _, oci := range oc.Instances {
if oc.Type == "redis_cluster" && oci.Role != "master" {
continue
}
on := &model.OverlordNode{
Alias: oci.Alias,
Addr: net.JoinHostPort(oci.IP, strconv.Itoa(oci.Port)),
Weight: oci.Weight,
}
cluster.Nodes = append(cluster.Nodes, on)
}
ocs = append(ocs, cluster)
}
}
}
if len(ocs) == 0 && zone != "" {
zone = ""
goto GETALL
}
return
}