diff options
| author | Shulhan <m.shulhan@gmail.com> | 2020-05-18 21:47:45 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2020-07-26 03:48:51 +0700 |
| commit | 7574bb6ebff609b9a2889fc573ce3edce256e030 (patch) | |
| tree | d4a118ef858d5916ed19e1fc93a4d02b9fe4b588 /rescached.go | |
| parent | 7b9cba12d356c6fa9ee3988b5c96f8718aafd5f1 (diff) | |
| download | rescached-7574bb6ebff609b9a2889fc573ce3edce256e030.tar.xz | |
all: implement the user interface to change configuration
This is the first web UI (wui) where user can change configuration on
the fly.
The wui is implemented using svelte.dev and can be accessed on
http://127.0.0.1:5380.
Diffstat (limited to 'rescached.go')
| -rw-r--r-- | rescached.go | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/rescached.go b/rescached.go index ccb2e39..74fc949 100644 --- a/rescached.go +++ b/rescached.go @@ -8,9 +8,11 @@ package rescached import ( "fmt" "log" + "sync" "github.com/shuLhan/share/lib/debug" "github.com/shuLhan/share/lib/dns" + "github.com/shuLhan/share/lib/http" libio "github.com/shuLhan/share/lib/io" ) @@ -20,6 +22,9 @@ type Server struct { dns *dns.Server opts *Options rcWatcher *libio.Watcher + + httpd *http.Server + httpdRunner sync.Once } // @@ -32,21 +37,16 @@ func New(fileConfig string) (srv *Server, err error) { fmt.Printf("rescached: config: %+v\n", opts) } - dnsServer, err := dns.NewServer(&opts.ServerOptions) - if err != nil { - return nil, err - } - - dnsServer.LoadHostsDir(opts.DirHosts) - dnsServer.LoadMasterDir(opts.DirMaster) - dnsServer.LoadHostsFile("") - srv = &Server{ fileConfig: fileConfig, - dns: dnsServer, opts: opts, } + err = srv.httpdInit() + if err != nil { + return nil, err + } + return srv, nil } @@ -55,6 +55,15 @@ func New(fileConfig string) (srv *Server, err error) { // it. // func (srv *Server) Start() (err error) { + srv.dns, err = dns.NewServer(&srv.opts.ServerOptions) + if err != nil { + return err + } + + srv.dns.LoadHostsDir(srv.opts.DirHosts) + srv.dns.LoadMasterDir(srv.opts.DirMaster) + srv.dns.LoadHostsFile("") + if len(srv.opts.FileResolvConf) > 0 { srv.rcWatcher, err = libio.NewWatcher( srv.opts.FileResolvConf, 0, srv.watchResolvConf) @@ -63,7 +72,27 @@ func (srv *Server) Start() (err error) { } } - return srv.dns.ListenAndServe() + go func() { + srv.httpdRunner.Do(srv.httpdRun) + }() + + go srv.run() + + return nil +} + +func (srv *Server) run() { + defer func() { + err := recover() + if err != nil { + log.Println("panic: ", err) + } + }() + + err := srv.dns.ListenAndServe() + if err != nil { + log.Println(err) + } } // |
