Files
APIPark/module/cluster/util.go
T
2024-08-12 21:38:09 +08:00

44 lines
775 B
Go

package cluster
import (
"context"
"sync"
cluster_dto "github.com/APIParkLab/APIPark/module/cluster/dto"
"github.com/APIParkLab/APIPark/gateway/admin"
)
func nodeStatus(ctx context.Context, nodes []*cluster_dto.Node) {
if len(nodes) == 0 {
return
}
if len(nodes) == 1 {
nodes[0].Status = ping(ctx, nodes[0].Admins...)
}
wg := sync.WaitGroup{}
wg.Add(len(nodes))
for _, n := range nodes {
go doPingRouting(ctx, n, &wg)
}
wg.Wait()
}
func doPingRouting(ctx context.Context, n *cluster_dto.Node, wg *sync.WaitGroup) {
n.Status = ping(ctx, n.Admins...)
wg.Done()
}
func ping(ctx context.Context, address ...string) int {
if len(address) == 0 {
return 0
}
err := admin.Admin(address...).Ping(ctx)
if err != nil {
return 0
}
return 1
}