Merges streams from start and exits cleanly

This commit is contained in:
Quentin McGaw (desktop)
2020-02-08 17:51:30 +00:00
parent e527f14bd2
commit 6734779e90

View File

@@ -10,6 +10,7 @@ import (
"github.com/qdm12/golibs/files" "github.com/qdm12/golibs/files"
"github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/logging"
"github.com/qdm12/golibs/network" "github.com/qdm12/golibs/network"
"github.com/qdm12/golibs/signals"
"github.com/qdm12/private-internet-access-docker/internal/constants" "github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/dns" "github.com/qdm12/private-internet-access-docker/internal/dns"
"github.com/qdm12/private-internet-access-docker/internal/env" "github.com/qdm12/private-internet-access-docker/internal/env"
@@ -75,6 +76,13 @@ func main() {
err = firewallConf.AcceptAll() err = firewallConf.AcceptAll()
e.FatalOnError(err) e.FatalOnError(err)
go func() {
// Blocking line merging reader for all programs: openvpn, tinyproxy, unbound and shadowsocks
logger.Info("Launching standard output merger")
err = streamMerger.CollectLines(func(line string) { logger.Info(line) })
e.FatalOnError(err)
}()
if allSettings.DNS.Enabled { if allSettings.DNS.Enabled {
initialDNSToUse := constants.DNSProviderMapping()[allSettings.DNS.Providers[0]] initialDNSToUse := constants.DNSProviderMapping()[allSettings.DNS.Providers[0]]
dnsConf.UseDNSInternally(initialDNSToUse.IPs[0]) dnsConf.UseDNSInternally(initialDNSToUse.IPs[0])
@@ -146,9 +154,9 @@ func main() {
stream, err := ovpnConf.Start() stream, err := ovpnConf.Start()
e.FatalOnError(err) e.FatalOnError(err)
go streamMerger.Merge("openvpn", stream) go streamMerger.Merge("openvpn", stream)
signals.WaitForExit(func(signal string) int {
// Blocking line merging reader for all programs: openvpn, tinyproxy, unbound and shadowsocks logger.Warn("Caught OS signal %s, shutting down", signal)
logger.Info("Launching standard output merger") time.Sleep(100 * time.Millisecond) // wait for other processes to exit
err = streamMerger.CollectLines(func(line string) { logger.Info(line) }) return 0
e.FatalOnError(err) })
} }