diff --git a/go.mod b/go.mod index 5cb329d..4a968fc 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/aws/aws-sdk-go-v2/config v1.30.2 github.com/aws/aws-sdk-go-v2/credentials v1.18.2 github.com/aws/aws-sdk-go-v2/service/sqs v1.38.5 + github.com/coreos/go-systemd/v22 v22.5.0 github.com/golang/mock v1.6.0 github.com/gorilla/websocket v1.5.3 github.com/miekg/dns v1.1.65 diff --git a/go.sum b/go.sum index 3d322b8..710d9d1 100644 --- a/go.sum +++ b/go.sum @@ -39,11 +39,14 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= diff --git a/proxy/lib/snowflake.go b/proxy/lib/snowflake.go index bcdfbda..13e6d28 100644 --- a/proxy/lib/snowflake.go +++ b/proxy/lib/snowflake.go @@ -822,6 +822,8 @@ func (sf *SnowflakeProxy) Start() error { } tokens = newTokens(sf.Capacity) + sdnotifyStatus("Checking NAT type...") + err = sf.checkNATType(config, sf.NATProbeURL) if err != nil { // non-fatal error. Log it and continue @@ -830,6 +832,9 @@ func (sf *SnowflakeProxy) Start() error { } sf.EventDispatcher.OnNewSnowflakeEvent(event.EventOnCurrentNATTypeDetermined{CurNATType: getCurrentNATType()}) + sdnotifyStatus(fmt.Sprintf("NAT type: %s", getCurrentNATType())) + sdnotifyReady() + NatRetestTask := task.Periodic{ Interval: sf.NATTypeMeasurementInterval, Execute: func() error { @@ -846,6 +851,16 @@ func (sf *SnowflakeProxy) Start() error { defer NatRetestTask.Close() } + WatchdogTask := task.Periodic{ + Interval: 5 * time.Minute, + Execute: func() error { + sdnotifyWatchdog() + return nil + }, + } + WatchdogTask.Start() + defer WatchdogTask.Close() + ticker := time.NewTicker(sf.PollInterval) defer ticker.Stop() @@ -864,6 +879,7 @@ func (sf *SnowflakeProxy) Start() error { // Stop closes all existing connections and shuts down the Snowflake. func (sf *SnowflakeProxy) Stop() { + sdnotifyStopping() close(sf.shutdown) } diff --git a/proxy/lib/systemd.go b/proxy/lib/systemd.go new file mode 100644 index 0000000..752c77d --- /dev/null +++ b/proxy/lib/systemd.go @@ -0,0 +1,23 @@ +package snowflake_proxy + +import ( + "fmt" + + sdnotify "github.com/coreos/go-systemd/v22/daemon" +) + +func sdnotifyReady() { + sdnotify.SdNotify(false, sdnotify.SdNotifyReady) +} + +func sdnotifyStopping() { + sdnotify.SdNotify(false, sdnotify.SdNotifyStopping) +} + +func sdnotifyStatus(status string) { + sdnotify.SdNotify(false, fmt.Sprintf("STATUS=%s", status)) +} + +func sdnotifyWatchdog() { + sdnotify.SdNotify(false, sdnotify.SdNotifyWatchdog) +}