split proxy checker out to its own package

This commit is contained in:
iacore
2024-09-05 17:35:10 +00:00
parent 0a9d28a105
commit d9b1293512
4 changed files with 16 additions and 24 deletions
-6
View File
@@ -1,6 +0,0 @@
package config
import "time"
// todo: make this configurable
const ProxyCheckerTimeout = 10 * time.Second
+5 -3
View File
@@ -10,9 +10,11 @@ import (
"os/exec"
"runtime"
"syscall"
"time"
"codeberg.org/vnpower/pixivfe/v2/server/audit"
"codeberg.org/vnpower/pixivfe/v2/config"
"codeberg.org/vnpower/pixivfe/v2/proxy_checker"
"codeberg.org/vnpower/pixivfe/v2/server/audit"
"codeberg.org/vnpower/pixivfe/v2/server/handlers"
"codeberg.org/vnpower/pixivfe/v2/server/template"
)
@@ -23,9 +25,9 @@ func main() {
template.Init(config.GlobalConfig.InDevelopment)
// Initialize and start the proxy checker
ctx_timeout, cancel := context.WithTimeout(context.Background(), config.ProxyCheckerTimeout)
ctx_timeout, cancel := context.WithTimeout(context.Background(), 10 * time.Second)
defer cancel()
config.InitializeProxyChecker(ctx_timeout)
proxy_checker.InitializeProxyChecker(ctx_timeout)
handlers.InitializeRateLimiter()
router := handlers.DefineRoutes()
@@ -1,4 +1,4 @@
package config
package proxy_checker
import (
"context"
@@ -8,25 +8,22 @@ import (
"strings"
"sync"
"time"
"codeberg.org/vnpower/pixivfe/v2/config"
"codeberg.org/vnpower/pixivfe/v2/server/utils"
)
const (
proxyCheckTimeout = 10 * time.Second
testImagePath = "/img-original/img/2024/01/21/20/50/51/115365120_p0.jpg"
)
var (
workingProxies []string
workingProxiesMutex sync.RWMutex
stopChan chan struct{}
stopChan chan struct{} = make(chan struct{})
)
func InitializeProxyChecker(r context.Context) {
stopChan = make(chan struct{})
StartProxyChecker(r)
}
func StartProxyChecker(r context.Context) {
go func() {
for {
select {
@@ -35,7 +32,7 @@ func StartProxyChecker(r context.Context) {
return
default:
checkProxies(r)
if t := GlobalConfig.ProxyCheckInterval; t > 0 {
if t := config.GlobalConfig.ProxyCheckInterval; t > 0 {
time.Sleep(t)
} else {
log.Print("Proxy check interval set to 0, disabling auto-check from now on.")
@@ -56,9 +53,9 @@ func checkProxies(r context.Context) {
var mutex sync.Mutex
var newWorkingProxies []string
logf("Total proxies to check: %d", len(BuiltinProxyList))
logf("Total proxies to check: %d", len(config.BuiltinProxyList))
for _, proxy := range BuiltinProxyList {
for _, proxy := range config.BuiltinProxyList {
wg.Add(1)
go func(proxyURL string) {
defer wg.Done()
@@ -84,8 +81,6 @@ func checkProxies(r context.Context) {
}
func testProxy(r context.Context, proxyBaseURL string) (bool, *http.Response) {
client := &http.Client{Timeout: proxyCheckTimeout}
fullURL := fmt.Sprintf("%s%s", strings.TrimRight(proxyBaseURL, "/"), testImagePath)
logf("Testing proxy %s with full URL: %s", proxyBaseURL, fullURL)
@@ -95,7 +90,7 @@ func testProxy(r context.Context, proxyBaseURL string) (bool, *http.Response) {
return false, nil
}
resp, err := client.Do(req)
resp, err := utils.HttpClient.Do(req)
if err != nil {
logf("Error testing proxy %s: %v", proxyBaseURL, err)
return false, nil
+2 -1
View File
@@ -10,6 +10,7 @@ import (
"codeberg.org/vnpower/pixivfe/v2/config"
"codeberg.org/vnpower/pixivfe/v2/core"
"codeberg.org/vnpower/pixivfe/v2/proxy_checker"
"codeberg.org/vnpower/pixivfe/v2/server/session"
"codeberg.org/vnpower/pixivfe/v2/server/utils"
)
@@ -144,7 +145,7 @@ func resetAll(w http.ResponseWriter, _ *http.Request) error {
}
func SettingsPage(w http.ResponseWriter, r *http.Request) error {
return Render(w, r, Data_settings{WorkingProxyList: config.GetWorkingProxies(), ProxyList: config.BuiltinProxyList})
return Render(w, r, Data_settings{WorkingProxyList: proxy_checker.GetWorkingProxies(), ProxyList: config.BuiltinProxyList})
}
func SettingsPost(w http.ResponseWriter, r *http.Request) error {