You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.7 KiB
65 lines
1.7 KiB
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 |
|
}
|
|
|