goProject/.svn/pristine/c0/c0a9c398935ca0387070ea4a67edb3d619f2c52c.svn-base
2025-01-06 16:21:36 +08:00

104 lines
2.7 KiB
Plaintext
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 verifyMgr
import (
"fmt"
"sync"
"Framework/managecenterMgr"
"goutil/webUtil"
)
var (
verifyUrlMap = make(map[string]VerifyType)
mutex sync.RWMutex
con_SuccessStatusCode = 200
)
// 初始化需要验证的Url及对应的验证方式
func Init(url string, _type VerifyType) {
mutex.Lock()
defer mutex.Unlock()
if _, exists := verifyUrlMap[url]; exists {
panic(fmt.Errorf("%s已经存在请检查", url))
}
verifyUrlMap[url] = _type
}
// 验证
func Verify() (errList []error) {
errList1 := verifyInternal()
errList2 := verifyServerGroup()
if len(errList1) > 0 {
errList = append(errList, errList1...)
}
if len(errList2) > 0 {
errList = append(errList, errList2...)
}
return
}
// 验证内部的url
func verifyInternal() (errList []error) {
// 验证单独指定的url
mutex.RLock()
defer mutex.RUnlock()
header := webUtil.GetFormHeader()
transport := webUtil.NewTransport()
transport.DisableKeepAlives = true
transport = webUtil.GetTimeoutTransport(transport, 30)
for url, _type := range verifyUrlMap {
switch _type {
case Con_Get:
if statusCode, _, err := webUtil.GetWebData3(url, "", header, transport); statusCode != con_SuccessStatusCode || err != nil {
errList = append(errList, fmt.Errorf("access %s failed. StatusCode:%d, err:%s", url, statusCode, err))
}
case Con_Post:
if statusCode, _, err := webUtil.PostMapData(url, nil, header, transport); statusCode != con_SuccessStatusCode || err != nil {
errList = append(errList, fmt.Errorf("access %s failed. StatusCode:%d, err:%s", url, statusCode, err))
}
default:
errList = append(errList, fmt.Errorf("the type of %s is wrong, not it's %d", url, _type))
}
}
return
}
// 验证服务器组的url
func verifyServerGroup() (errList []error) {
// 验证配置在ManageCenter中的所有ServerGroup
serverGroupList := managecenterMgr.GetServerGroupList()
chList := make([]chan bool, 0, len(serverGroupList))
header := webUtil.GetFormHeader()
transport := webUtil.NewTransport()
transport.DisableKeepAlives = true
transport = webUtil.GetTimeoutTransport(transport, 30)
for _, item := range serverGroupList {
url := item.GetGSCallbackUrl("Verify.ashx")
ch := make(chan bool)
chList = append(chList, ch)
go func(_url string, _ch chan bool) {
fmt.Printf("VerifyUrl:%s\n", _url)
if statusCode, _, err := webUtil.PostMapData(_url, nil, header, transport); statusCode != con_SuccessStatusCode || err != nil {
errList = append(errList, fmt.Errorf("access %s failed. StatusCode:%d, err:%s", _url, statusCode, err))
}
_ch <- true
}(url, ch)
}
// 等待所有的ch返回
for _, ch := range chList {
<-ch
}
return
}