111 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}