mirror of
https://github.com/simon987/Architeuthis.git
synced 2025-12-15 01:49:02 +00:00
least-connected load-balancing, per-host rate-limiting & load from config
This commit is contained in:
53
config.go
Normal file
53
config.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"golang.org/x/time/rate"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
type HostConfig struct {
|
||||
Every string `json:"every"`
|
||||
Burst int `json:"burst"`
|
||||
Headers map[string]string `json:"headers"`
|
||||
}
|
||||
|
||||
type ProxyConfig struct {
|
||||
Name string `json:"name"`
|
||||
Url string `json:"url"`
|
||||
}
|
||||
|
||||
var config struct {
|
||||
Addr string `json:"addr"`
|
||||
Hosts map[string]HostConfig `json:"hosts"`
|
||||
Proxies []ProxyConfig `json:"proxies"`
|
||||
}
|
||||
|
||||
func loadConfig() {
|
||||
|
||||
configFile, err := os.Open("config.json")
|
||||
handleErr(err)
|
||||
|
||||
configBytes, err := ioutil.ReadAll(configFile)
|
||||
handleErr(err)
|
||||
|
||||
err = json.Unmarshal(configBytes, &config)
|
||||
handleErr(err)
|
||||
}
|
||||
|
||||
func applyConfig(proxy *Proxy) {
|
||||
|
||||
for host, conf := range config.Hosts {
|
||||
duration, err := time.ParseDuration(conf.Every)
|
||||
handleErr(err)
|
||||
proxy.Limiters.Store(host, rate.NewLimiter(rate.Every(duration), conf.Burst))
|
||||
}
|
||||
}
|
||||
|
||||
func handleErr(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user