111 lines
2.9 KiB
Go
111 lines
2.9 KiB
Go
|
package internal
|
|||
|
|
|||
|
import "admin/lib/httpclient"
|
|||
|
|
|||
|
type ServerInfo struct {
|
|||
|
ServerId string `json:"serverId"`
|
|||
|
ServerName string `json:"serverName"`
|
|||
|
Ccu int `json:"ccu"`
|
|||
|
TotalRoleCount int `json:"total_role_count"`
|
|||
|
TotalAccountCount int `json:"total_account_count"`
|
|||
|
Addr string `json:"addr"`
|
|||
|
OpenWhitelistLogin bool `json:"open_whitelist_login"`
|
|||
|
}
|
|||
|
|
|||
|
type ServerInfoList []*ServerInfo
|
|||
|
|
|||
|
type PageServerCountInfo struct {
|
|||
|
Offset int
|
|||
|
Count int
|
|||
|
RawInfo *ServerInfo
|
|||
|
}
|
|||
|
|
|||
|
type PageInfo struct {
|
|||
|
PageNo int // 页数,从1开始
|
|||
|
Count int // 当前页的数量,一般是pageLen,但如果是最后一页可能不足
|
|||
|
ServerList []*PageServerCountInfo // 参与组成这一页的服务器列表
|
|||
|
}
|
|||
|
|
|||
|
func (list ServerInfoList) TidyToPageList(pageLen int, queryCountField func(info *ServerInfo) int) (totalCount int, pageList []*PageInfo) {
|
|||
|
curPageNo := 1
|
|||
|
curPageNeedCount := pageLen
|
|||
|
var curPageInfo *PageInfo
|
|||
|
for _, serverInfo := range list {
|
|||
|
serverCount := queryCountField(serverInfo)
|
|||
|
totalCount += serverCount
|
|||
|
serverRestCount := serverCount
|
|||
|
serverAccOffset := 0
|
|||
|
|
|||
|
for {
|
|||
|
if serverRestCount >= curPageNeedCount {
|
|||
|
// 当前页数量足够,切下一页
|
|||
|
if curPageInfo == nil {
|
|||
|
curPageInfo = &PageInfo{
|
|||
|
PageNo: curPageNo,
|
|||
|
}
|
|||
|
}
|
|||
|
curPageInfo.Count += curPageNeedCount
|
|||
|
curPageInfo.ServerList = append(curPageInfo.ServerList, &PageServerCountInfo{
|
|||
|
RawInfo: serverInfo,
|
|||
|
Offset: serverAccOffset,
|
|||
|
Count: curPageNeedCount,
|
|||
|
})
|
|||
|
|
|||
|
// 切下一个页
|
|||
|
// 置空,等待下一次循环判断来创建
|
|||
|
pageList = append(pageList, curPageInfo)
|
|||
|
curPageInfo = nil
|
|||
|
serverRestCount -= curPageNeedCount
|
|||
|
serverAccOffset += curPageNeedCount
|
|||
|
curPageNeedCount = pageLen
|
|||
|
curPageNo += 1
|
|||
|
|
|||
|
if serverRestCount <= 0 {
|
|||
|
// 当前服务器没有余额了,也要切下一个服务器
|
|||
|
break
|
|||
|
}
|
|||
|
} else {
|
|||
|
// 当前页还不够,切下一个服务器信息
|
|||
|
if curPageInfo == nil {
|
|||
|
curPageInfo = &PageInfo{
|
|||
|
PageNo: curPageNo,
|
|||
|
}
|
|||
|
}
|
|||
|
curPageInfo.Count += serverRestCount
|
|||
|
curPageInfo.ServerList = append(curPageInfo.ServerList, &PageServerCountInfo{
|
|||
|
RawInfo: serverInfo,
|
|||
|
Offset: serverAccOffset,
|
|||
|
Count: serverRestCount,
|
|||
|
})
|
|||
|
|
|||
|
// 切下一个服务器,页面不切
|
|||
|
serverAccOffset += serverRestCount
|
|||
|
curPageNeedCount -= serverRestCount
|
|||
|
break
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if curPageInfo != nil { // 最后一页还没达到数量的
|
|||
|
pageList = append(pageList, curPageInfo)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
type RspData struct {
|
|||
|
Code int `json:"code"`
|
|||
|
Msg string `json:"msg"`
|
|||
|
Data struct {
|
|||
|
List []*ServerInfo `json:"list"`
|
|||
|
} `json:"data"`
|
|||
|
}
|
|||
|
|
|||
|
func GetRemoteServerInfoList(alisrvAddr string) (ServerInfoList, error) {
|
|||
|
rsp := &RspData{}
|
|||
|
err := httpclient.Request(alisrvAddr+"/server", "get", nil, rsp)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
return rsp.Data.List, nil
|
|||
|
}
|