Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
fever-ch
GitHub Repository: fever-ch/go-google-sites-proxy
Path: blob/master/daemon.go
505 views
1
package main
2
3
import (
4
"fmt"
5
"github.com/fever-ch/go-google-sites-proxy/common/config"
6
"github.com/fever-ch/go-google-sites-proxy/proxy"
7
log "github.com/sirupsen/logrus"
8
"os"
9
"os/signal"
10
"path/filepath"
11
"syscall"
12
)
13
14
func startDaemonFromFile(confFile string) {
15
os.Chdir(filepath.Dir(confFile))
16
startDaemon(config.NewYamlConfigLoader(confFile))
17
}
18
19
func startDaemon(cl config.ConfigLoader) {
20
21
if cfg, err := cl(); err != nil {
22
log.WithError(err).Fatal("Unable to load configuration")
23
} else {
24
proxy := proxy.NewSmartProxy(cfg.Port())
25
proxy.SetConfiguration(cfg)
26
27
startUp := func() {
28
if err = proxy.Start(); err != nil {
29
log.WithError(err).Fatal("Unable to start proxy")
30
}
31
}
32
33
go startUp()
34
35
for true {
36
c := make(chan os.Signal, 1)
37
signal.Notify(c, syscall.SIGUSR1)
38
<-c
39
if cfg, err := cl(); err != nil {
40
log.WithError(err).Warn("Unable to load config")
41
} else if cfg.Port() != proxy.Port() {
42
log.Warning(fmt.Sprintf("Server currently running on port %d but config specifies %d. This change will "+
43
"not be taken in account. Please restart daemon.", proxy.Port(), cfg.Port()))
44
} else {
45
proxy.SetConfiguration(cfg)
46
log.Info("Configuration reloaded")
47
}
48
}
49
}
50
}
51
52