Files
EdgeAPI/internal/rpc/services/service_updating_server_list.go

92 lines
2.2 KiB
Go
Raw Normal View History

2024-07-27 14:15:25 +08:00
// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cloud .
package services
import (
"context"
"encoding/json"
2024-07-27 14:15:25 +08:00
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
)
// UpdatingServerListService 待更新服务列表服务
type UpdatingServerListService struct {
BaseService
}
// FindUpdatingServerLists 查找要更新的服务配置
func (this *UpdatingServerListService) FindUpdatingServerLists(ctx context.Context, req *pb.FindUpdatingServerListsRequest) (*pb.FindUpdatingServerListsResponse, error) {
nodeId, err := this.ValidateNode(ctx)
if err != nil {
return nil, err
}
var tx = this.NullTx()
clusterIds, err := models.SharedNodeDAO.FindEnabledAndOnNodeClusterIds(tx, nodeId)
if err != nil {
return nil, err
}
lists, err := models.SharedUpdatingServerListDAO.FindLists(tx, clusterIds, req.LastId)
if err != nil {
return nil, err
}
if len(lists) == 0 {
return &pb.FindUpdatingServerListsResponse{
MaxId: req.LastId,
}, nil
}
var serverIdMap = map[int64]bool{}
var serverIds = []int64{}
var maxId int64
for _, list := range lists {
if int64(list.Id) > maxId {
maxId = int64(list.Id)
}
for _, serverId := range list.DecodeServerIds() {
if !serverIdMap[serverId] {
serverIdMap[serverId] = true
serverIds = append(serverIds, serverId)
}
}
}
if len(serverIds) == 0 {
return &pb.FindUpdatingServerListsResponse{
MaxId: req.LastId,
}, nil
}
servers, err := models.SharedServerDAO.FindEnabledServersWithIds(tx, serverIds)
if err != nil {
return nil, err
}
var serverConfigs = []*serverconfigs.ServerConfig{}
var cacheMap = utils.NewCacheMap()
for _, server := range servers {
serverConfig, err := models.SharedServerDAO.ComposeServerConfig(tx, server, false, nil, cacheMap, true, false)
if err != nil {
return nil, err
}
if serverConfig == nil {
continue
}
serverConfigs = append(serverConfigs, serverConfig)
}
serversJSON, err := json.Marshal(serverConfigs)
if err != nil {
return nil, err
}
return &pb.FindUpdatingServerListsResponse{
ServersJSON: serversJSON,
MaxId: maxId,
}, nil
}