增加查看单个服务附近服务API

This commit is contained in:
刘祥超
2021-10-08 14:36:35 +08:00
parent 5cf1f9bf33
commit 9855829a3c
2 changed files with 163 additions and 0 deletions

View File

@@ -1419,6 +1419,82 @@ func (this *ServerDAO) FindLatestServers(tx *dbs.Tx, size int64) (result []*Serv
return
}
// FindNearbyServersInGroup 查找所属分组附近的服务
func (this *ServerDAO) FindNearbyServersInGroup(tx *dbs.Tx, groupId int64, serverId int64, size int64) (result []*Server, err error) {
// 之前的
ones, err := SharedServerDAO.Query(tx).
Result("id", "name", "isOn").
State(ServerStateEnabled).
Where("JSON_CONTAINS(groupIds, :groupId)").
Param("groupId", numberutils.FormatInt64(groupId)).
Gte("id", serverId).
Limit(size).
AscPk().
FindAll()
if err != nil {
return nil, err
}
lists.Reverse(ones)
for _, one := range ones {
result = append(result, one.(*Server))
}
// 之后的
ones, err = SharedServerDAO.Query(tx).
Result("id", "name", "isOn").
State(ServerStateEnabled).
Where("JSON_CONTAINS(groupIds, :groupId)").
Param("groupId", numberutils.FormatInt64(groupId)).
Lt("id", serverId).
Limit(size).
DescPk().
FindAll()
if err != nil {
return nil, err
}
for _, one := range ones {
result = append(result, one.(*Server))
}
return
}
// FindNearbyServersInCluster 查找所属集群附近的服务
func (this *ServerDAO) FindNearbyServersInCluster(tx *dbs.Tx, clusterId int64, serverId int64, size int64) (result []*Server, err error) {
// 之前的
ones, err := SharedServerDAO.Query(tx).
Result("id", "name", "isOn").
State(ServerStateEnabled).
Attr("clusterId", clusterId).
Gte("id", serverId).
Limit(size).
AscPk().
FindAll()
if err != nil {
return nil, err
}
lists.Reverse(ones)
for _, one := range ones {
result = append(result, one.(*Server))
}
// 之后的
ones, err = SharedServerDAO.Query(tx).
Result("id", "name", "isOn").
State(ServerStateEnabled).
Attr("clusterId", clusterId).
Lt("id", serverId).
Limit(size).
DescPk().
FindAll()
if err != nil {
return nil, err
}
for _, one := range ones {
result = append(result, one.(*Server))
}
return
}
// FindFirstHTTPOrHTTPSPortWithClusterId 获取集群中第一个HTTP或者HTTPS端口
func (this *ServerDAO) FindFirstHTTPOrHTTPSPortWithClusterId(tx *dbs.Tx, clusterId int64) (int, error) {
one, _, err := this.Query(tx).

View File

@@ -1434,3 +1434,90 @@ func (this *ServerService) FindLatestServers(ctx context.Context, req *pb.FindLa
}
return &pb.FindLatestServersResponse{Servers: pbServers}, nil
}
// FindNearbyServers 查找某个服务附近的服务
func (this *ServerService) FindNearbyServers(ctx context.Context, req *pb.FindNearbyServersRequest) (*pb.FindNearbyServersResponse, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
var tx = this.NullTx()
// 查询服务的Group
groupIds, err := models.SharedServerDAO.FindServerGroupIds(tx, req.ServerId)
if err != nil {
return nil, err
}
if len(groupIds) > 0 {
var pbGroups = []*pb.FindNearbyServersResponse_GroupInfo{}
for _, groupId := range groupIds {
group, err := models.SharedServerGroupDAO.FindEnabledServerGroup(tx, groupId)
if err != nil {
return nil, err
}
if group == nil {
continue
}
var pbGroup = &pb.FindNearbyServersResponse_GroupInfo{
Name: group.Name,
}
servers, err := models.SharedServerDAO.FindNearbyServersInGroup(tx, groupId, req.ServerId, 10)
if err != nil {
return nil, err
}
for _, server := range servers {
pbGroup.Servers = append(pbGroup.Servers, &pb.Server{
Id: int64(server.Id),
Name: server.Name,
IsOn: server.IsOn == 1,
})
}
pbGroups = append(pbGroups, pbGroup)
}
if len(pbGroups) > 0 {
return &pb.FindNearbyServersResponse{
Scope: "group",
Groups: pbGroups,
}, nil
}
}
// 集群
clusterId, err := models.SharedServerDAO.FindServerClusterId(tx, req.ServerId)
if err != nil {
return nil, err
}
servers, err := models.SharedServerDAO.FindNearbyServersInCluster(tx, clusterId, req.ServerId, 10)
if err != nil {
return nil, err
}
if len(servers) == 0 {
return &pb.FindNearbyServersResponse{
Scope: "cluster",
Groups: nil,
}, nil
}
clusterName, err := models.SharedNodeClusterDAO.FindNodeClusterName(tx, clusterId)
if err != nil {
return nil, err
}
var pbGroup = &pb.FindNearbyServersResponse_GroupInfo{
Name: clusterName,
}
for _, server := range servers {
pbGroup.Servers = append(pbGroup.Servers, &pb.Server{
Id: int64(server.Id),
Name: server.Name,
IsOn: server.IsOn == 1,
})
}
return &pb.FindNearbyServersResponse{
Scope: "group",
Groups: []*pb.FindNearbyServersResponse_GroupInfo{pbGroup},
}, nil
}