mirror of
https://github.com/yusing/godoxy.git
synced 2026-03-20 00:03:53 +01:00
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
|
|
"github.com/yusing/go-proxy/common"
|
|
E "github.com/yusing/go-proxy/error"
|
|
)
|
|
|
|
func IsSiteHealthy(url string) bool {
|
|
// try HEAD first
|
|
// if HEAD is not allowed, try GET
|
|
resp, err := HttpClient.Head(url)
|
|
if resp != nil {
|
|
resp.Body.Close()
|
|
}
|
|
if err != nil && resp != nil && resp.StatusCode == http.StatusMethodNotAllowed {
|
|
_, err = HttpClient.Get(url)
|
|
}
|
|
if resp != nil {
|
|
resp.Body.Close()
|
|
}
|
|
return err == nil
|
|
}
|
|
|
|
func IsStreamHealthy(scheme, address string) bool {
|
|
conn, err := net.DialTimeout(scheme, address, common.DialTimeout)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
conn.Close()
|
|
return true
|
|
}
|
|
|
|
func ReloadServer() E.NestedError {
|
|
resp, err := HttpClient.Post(fmt.Sprintf("http://localhost%v/reload", common.APIHTTPPort), "", nil)
|
|
if err != nil {
|
|
return E.From(err)
|
|
}
|
|
defer resp.Body.Close()
|
|
if resp.StatusCode != http.StatusOK {
|
|
return E.Failure("server reload").Subjectf("status code: %v", resp.StatusCode)
|
|
}
|
|
return E.Nil()
|
|
}
|
|
|
|
var HttpClient = &http.Client{
|
|
Timeout: common.ConnectionTimeout,
|
|
Transport: &http.Transport{
|
|
Proxy: http.ProxyFromEnvironment,
|
|
DisableKeepAlives: true,
|
|
ForceAttemptHTTP2: true,
|
|
DialContext: (&net.Dialer{
|
|
Timeout: common.DialTimeout,
|
|
KeepAlive: common.KeepAlive, // this is different from DisableKeepAlives
|
|
}).DialContext,
|
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
|
},
|
|
}
|