mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-17 19:00:24 +08:00
增加查看单个服务附近服务API
This commit is contained in:
@@ -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).
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user