Files
2026-05-20 16:13:58 +08:00

136 lines
3.4 KiB
Go

package domainser
import (
"fmt"
"math/rand"
"sort"
"stat/models/domainmod"
"strings"
"time"
)
type FnCheckFinish func(result *domainmod.CheckResult)
type Checker interface {
Check() error
}
type ApiPath struct {
Create string
Query string
Sleep time.Duration
NeedCreate bool
}
type Node struct {
Id int `json:"id"`
NodeName string `json:"node_name"`
IspName string `json:"isp_name"`
IspCode int `json:"isp_code"`
Rand int
}
type NodeList []Node
func (n NodeList) Len() int { return len(n) }
func (n NodeList) Less(i, j int) bool {
return n[i].Rand < n[j].Rand
}
func (n NodeList) Swap(i, j int) { n[i], n[j] = n[j], n[i] }
func (n NodeList) SIdList(max int32) string {
if max < 1 {
max = 1
}
for _, node := range n {
node.Rand = rand.Int()
}
sort.Sort(n)
ss := make([]string, 0)
for _, node := range n {
if strings.Contains(node.IspName, "电信") || strings.Contains(node.IspName, "移动") || strings.Contains(node.IspName, "联通") {
ss = append(ss, fmt.Sprintf("%d", node.Id))
}
}
if len(ss) > int(max) {
ss = ss[:max]
}
return strings.Join(ss, ",")
}
type CommonResp struct {
ErrorCode int `json:"error_code"`
Error string `json:"error"`
Data struct {
Id *string `json:"id"`
List *NodeList `json:"list"`
} `json:"data"`
}
type DomainResp struct {
ErrorCode int `json:"error_code"`
Error string `json:"error"`
Data map[string]int `json:"data"`
}
type WebTestNode struct {
NodeId int `json:"node_id"`
NodeName string `json:"node_name"`
Host string `json:"host"`
OriginIp string `json:"origin_ip"`
HttpCode int `json:"http_code"`
RemoteIp string `json:"remote_ip"`
SizeDownload int `json:"size_download"`
SpeedDownload int `json:"speed_download"`
TimeConnect float64 `json:"time_connect"`
TimeNamelookup float64 `json:"time_namelookup"`
TimeStarttransfer float64 `json:"time_starttransfer"`
TimeTotal float64 `json:"time_total"`
ReportSource string `json:"report_source"`
SessionId string `json:"session_id"`
IpRegion string `json:"ip_region"`
IpIsp string `json:"ip_isp"`
ErrorCode int `json:"error_code"`
Error string `json:"error"`
TimeId string `json:"time_id"`
}
type WebTestNodeList []*WebTestNode
func (n *WebTestNode) ErrorString() string {
return fmt.Sprintf("节点【%s】检测失败", n.NodeName)
}
type WebResp struct {
Id string `json:"id"`
MaxNode int `json:"max_node"`
Done bool `json:"done"`
List WebTestNodeList `json:"list"`
}
type HijackTestNode struct {
NodeId int `json:"node_id"`
Hijack bool `json:"hijack"`
NodeName string `json:"node_name"`
RemoteIp string `json:"remote_ip"`
Url string `json:"url"`
ReportSource string `json:"report_source"`
}
func (n *HijackTestNode) ErrorString() string {
return fmt.Sprintf("节点【%s】已劫持", n.NodeName)
}
type HijackResp struct {
Done bool `json:"done"`
HijackNum int `json:"hijack_num"`
Id string `json:"id"`
List []*HijackTestNode `json:"list"`
MaxNode int `json:"max_node"`
}
type PolluteResp struct {
ErrorCode int `json:"error_code"`
Error string `json:"error"`
Data map[string]int `json:"data"`
}