初始化项目
This commit is contained in:
6
trunk/framework/verifyMgr/doc.go
Normal file
6
trunk/framework/verifyMgr/doc.go
Normal file
@@ -0,0 +1,6 @@
|
||||
package verifyMgr
|
||||
|
||||
/*
|
||||
此包用于对指定url进行访问验证,以便于在程序启动时可以提前知道目标地址的可访问性,
|
||||
而不用等到实际需要时再验证;从而造成既定的影响。
|
||||
*/
|
||||
11
trunk/framework/verifyMgr/type.go
Normal file
11
trunk/framework/verifyMgr/type.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package verifyMgr
|
||||
|
||||
type VerifyType int8
|
||||
|
||||
const (
|
||||
// Method=GET
|
||||
Con_Get VerifyType = 1
|
||||
|
||||
// Method=POST
|
||||
Con_Post VerifyType = 2
|
||||
)
|
||||
103
trunk/framework/verifyMgr/verify.go
Normal file
103
trunk/framework/verifyMgr/verify.go
Normal file
@@ -0,0 +1,103 @@
|
||||
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
|
||||
}
|
||||
32
trunk/framework/verifyMgr/verify_test.go
Normal file
32
trunk/framework/verifyMgr/verify_test.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package verifyMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"Framework/managecenterMgr"
|
||||
)
|
||||
|
||||
func init() {
|
||||
manageCenterDataSwitchObj := &managecenterMgr.ManageCenterDataSwitch{
|
||||
AllDataSwitch: true,
|
||||
}
|
||||
managecenterMgr.Start("https://managecentertest-fzxh.public.com", manageCenterDataSwitchObj)
|
||||
}
|
||||
|
||||
func TestVerify(t *testing.T) {
|
||||
if errList := Verify(); len(errList) > 0 {
|
||||
t.Errorf("there should be no error, but now has")
|
||||
for _, err := range errList {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
Init("http://www.baidu.com", Con_Get)
|
||||
if errList := Verify(); len(errList) > 0 {
|
||||
t.Errorf("there should be no error, but now has")
|
||||
for _, err := range errList {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user