aboutsummaryrefslogtreecommitdiff
path: root/rescached.go
diff options
context:
space:
mode:
authorShulhan <m.shulhan@gmail.com>2020-05-18 21:47:45 +0700
committerShulhan <m.shulhan@gmail.com>2020-07-26 03:48:51 +0700
commit7574bb6ebff609b9a2889fc573ce3edce256e030 (patch)
treed4a118ef858d5916ed19e1fc93a4d02b9fe4b588 /rescached.go
parent7b9cba12d356c6fa9ee3988b5c96f8718aafd5f1 (diff)
downloadrescached-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.go51
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)
+ }
}
//