From 7f34f486579b1b8d84cb41a191fced7ab8fc73e9 Mon Sep 17 00:00:00 2001 From: Nathanael Mowbray Date: Wed, 7 Mar 2018 12:07:40 +1100 Subject: [PATCH] feat(proxyfactory): reduce ping timout and add missing function --- pacsandbox/pac_functions.go | 11 +++++++++++ pacsandbox/pacsandbox_test.go | 2 +- pacyak.go | 8 ++++---- proxy/proxy.go | 3 ++- proxyfactory/proxyfactory.go | 21 ++++++++++++--------- proxyfactory/proxyfactory_test.go | 2 +- 6 files changed, 31 insertions(+), 16 deletions(-) diff --git a/pacsandbox/pac_functions.go b/pacsandbox/pac_functions.go index 33e3873..bf6435a 100644 --- a/pacsandbox/pac_functions.go +++ b/pacsandbox/pac_functions.go @@ -57,6 +57,13 @@ func (p *PacSandbox) initPacFunctions() { p.isPlainHostName(args[0]), ) }) + + p.vm.Set("localHostOrDomainIs", func(call otto.FunctionCall) otto.Value { + args := p.ottoStringArgs(call, 2, "localHostOrDomainIs") + return p.ottoRetValue( + p.localHostOrDomainIs(args[0], args[1]), + ) + }) } func (p *PacSandbox) dnsDomainIs(host string, domain string) (bool, error) { @@ -109,3 +116,7 @@ func (p *PacSandbox) isInNet(ipStr string, ipRangeStr string, ipMaskStr string) func (p *PacSandbox) isPlainHostName(host string) (bool, error) { return strings.Count(host, ".") == 0, nil } + +func (p *PacSandbox) localHostOrDomainIs(host string, domain string) (bool, error) { + return strings.Compare(host, domain) == 0, nil +} diff --git a/pacsandbox/pacsandbox_test.go b/pacsandbox/pacsandbox_test.go index d6c20bd..25cbd0b 100644 --- a/pacsandbox/pacsandbox_test.go +++ b/pacsandbox/pacsandbox_test.go @@ -1,7 +1,7 @@ package pacsandbox_test import ( - . "github.com/mikesimons/pacyak/pacsandbox" + . "../../pacyak/pacsandbox" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" diff --git a/pacyak.go b/pacyak.go index 3dec6e1..a634796 100644 --- a/pacyak.go +++ b/pacyak.go @@ -9,8 +9,8 @@ import ( log "github.com/Sirupsen/logrus" "github.com/mikesimons/earl" - "github.com/mikesimons/pacyak/pacsandbox" - "github.com/mikesimons/pacyak/proxyfactory" + "../pacyak/pacsandbox" + "../pacyak/proxyfactory" "github.com/mikesimons/readly" ) @@ -171,7 +171,7 @@ func (app *PacYakApplication) handlePacAvailability() { // monitorPingAvailability is a wrapper for handlePacAvailability invoking it every 30 seconds func (app *PacYakApplication) monitorPingAvailability() { app.handlePacAvailability() - for _ = range time.Tick(30 * time.Second) { + for _ = range time.Tick(30 * time.Minute) { app.handlePacAvailability() } } @@ -208,7 +208,7 @@ func (app *PacYakApplication) checkNetworkInterfaces() { // monitorNetworkInterfaces is a wrapper for checkNetworkInterfaces invoking it every 5 seconds func (app *PacYakApplication) monitorNetworkInterfaces() { app.interfaceMap = makeInterfaceMap() - for _ = range time.Tick(5 * time.Second) { + for _ = range time.Tick(30 * time.Minute) { app.checkNetworkInterfaces() } } diff --git a/proxy/proxy.go b/proxy/proxy.go index 266e1c4..b476741 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -13,6 +13,7 @@ import ( log "github.com/Sirupsen/logrus" "github.com/mikesimons/earl" + "strings" ) // Proxy is a simple proxy implementation @@ -81,7 +82,7 @@ func New(proxyURLString string) *Proxy { }, } - if proxyURLString == "direct" { + if strings.EqualFold(proxyURLString, "direct") { proxy.Tr.Proxy = func(req *http.Request) (*url.URL, error) { return nil, nil } proxy.Available = func() bool { return true } proxy.ConnectDial = nil diff --git a/proxyfactory/proxyfactory.go b/proxyfactory/proxyfactory.go index bf01fc5..6ae0832 100644 --- a/proxyfactory/proxyfactory.go +++ b/proxyfactory/proxyfactory.go @@ -6,7 +6,7 @@ import ( "time" log "github.com/Sirupsen/logrus" - "github.com/mikesimons/pacyak/proxy" + "../../pacyak/proxy" ) // ProxyFactory holds all state for the proxy factory @@ -25,10 +25,10 @@ func New() *ProxyFactory { } go func() { - for _ = range time.Tick(30 * time.Second) { + for _ = range time.Tick(30 * time.Minute) { pf.lock.Lock() - for key, proxy := range pf.proxies { - pf.availability[key] = proxy.Available() + for key, proxy2 := range pf.proxies { + pf.availability[key] = proxy2.Available() log.WithFields(log.Fields{ "proxy": key, @@ -63,9 +63,12 @@ func (pf *ProxyFactory) Proxy(handle string) *proxy.Proxy { pf.lock.Lock() if _, ok := pf.proxies[handle]; !ok { - proxy := proxy.New(handle) - pf.availability[handle] = proxy.Available() - pf.proxies[handle] = proxy + log.WithFields(log.Fields{ + "proxy": handle, + }).Debug("Creating new proxy for handle") + newProxy := proxy.New(handle) + pf.availability[handle] = newProxy.Available() + pf.proxies[handle] = newProxy } ret = pf.proxies[handle] pf.lock.Unlock() @@ -83,13 +86,13 @@ func (pf *ProxyFactory) FromPacResponse(response string) *proxy.Proxy { response = strings.Replace(response, " ", "", -1) proxies := strings.Split(response, ";") for _, proxyStr := range proxies { - proxy := pf.Proxy(proxyStr) + proxy2 := pf.Proxy(proxyStr) if !pf.available(proxyStr) { continue } - return proxy + return proxy2 } return pf.Proxy("direct") diff --git a/proxyfactory/proxyfactory_test.go b/proxyfactory/proxyfactory_test.go index a79cdb0..2b7f0ea 100644 --- a/proxyfactory/proxyfactory_test.go +++ b/proxyfactory/proxyfactory_test.go @@ -1,7 +1,7 @@ package proxyfactory_test import ( - . "github.com/mikesimons/pacyak/proxyfactory" + . "../../pacyak/proxyfactory" "net" "net/http"