136 lines
3.4 KiB
Go
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"`
|
|
}
|