diff --git a/nameserver/http.go b/nameserver/http.go index a21a1b7c..5f22f5a7 100644 --- a/nameserver/http.go +++ b/nameserver/http.go @@ -17,14 +17,13 @@ func httpErrorAndLog(level *log.Logger, w http.ResponseWriter, msg string, level.Printf("[http] "+logmsg, logargs...) } -func ListenHttp(version string, domain string, db Zone, port int) { +func ListenHttp(version string, server *DNSServer, db Zone, port int) { router := mux.NewRouter() router.Methods("GET").Path("/status").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, fmt.Sprintln("weave DNS", version)) - io.WriteString(w, fmt.Sprintln("Serving domain", domain)) - io.WriteString(w, db.Status()) + io.WriteString(w, server.Status()) }) router.Methods("PUT").Path("/name/{identifier:.+}/{ip:.+}").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -48,7 +47,7 @@ func ListenHttp(version string, domain string, db Zone, port int) { return } - if dns.IsSubDomain(domain, name) { + if dns.IsSubDomain(server.Domain, name) { Info.Printf("[http] Adding %s -> %s", name, ipStr) if err := db.AddRecord(ident, name, ip); err != nil { if _, ok := err.(DuplicateError); !ok { @@ -59,7 +58,7 @@ func ListenHttp(version string, domain string, db Zone, port int) { } // oh, I already know this. whatever. } } else { - Info.Printf("[http] Ignoring name %s, not in %s", name, domain) + Info.Printf("[http] Ignoring name %s, not in %s", name, server.Domain) } }) diff --git a/nameserver/server.go b/nameserver/server.go index 8b5bb7f7..1c1647b4 100644 --- a/nameserver/server.go +++ b/nameserver/server.go @@ -6,6 +6,7 @@ import ( . "github.com/zettio/weave/common" "net" "sync" + "bytes" ) const ( @@ -142,6 +143,17 @@ func (s *DNSServer) Start() error { return nil } +// Return status string +func (s *DNSServer) Status() string { + var buf bytes.Buffer + buf.WriteString(fmt.Sprintln("Local domain", s.Domain)) + buf.WriteString(fmt.Sprintln("Listen address", s.ListenAddr)) + buf.WriteString(fmt.Sprintln("mDNS interface", s.iface)) + buf.WriteString(fmt.Sprintln("Fallback DNS config", s.upstream)) + buf.WriteString(fmt.Sprintf("Zone database:\n%s", s.zone)) + return buf.String() +} + // Perform a graceful shutdown func (s *DNSServer) Stop() error { if err := s.tcpSrv.Shutdown(); err != nil { diff --git a/nameserver/zone.go b/nameserver/zone.go index cbec126d..61755f3e 100644 --- a/nameserver/zone.go +++ b/nameserver/zone.go @@ -22,7 +22,6 @@ type Lookup interface { } type Zone interface { - Status() string AddRecord(ident string, name string, ip net.IP) error DeleteRecord(ident string, ip net.IP) error DeleteRecordsFor(ident string) error @@ -64,11 +63,10 @@ func (zone *ZoneDb) indexOf(match func(Record) bool) int { return -1 } -func (zone *ZoneDb) Status() string { +func (zone *ZoneDb) String() string { zone.mx.RLock() defer zone.mx.RUnlock() var buf bytes.Buffer - buf.WriteString("Records:\n") for _, r := range zone.recs { buf.WriteString(fmt.Sprintf("%s %s %v\n", r.Ident, r.IP, r.Name)) } diff --git a/weavedns/main.go b/weavedns/main.go index 9e1fd2fb..62ea0f67 100644 --- a/weavedns/main.go +++ b/weavedns/main.go @@ -83,11 +83,11 @@ func main() { Debug.Printf("DNS fallback at %s:%s", fallbackHost, fallbackPort) } - go weavedns.ListenHttp(version, localDomain, zone, httpPort) srv, err := weavedns.NewDNSServer(srvConfig, zone, iface) if err != nil { Error.Fatal("Failed to initialize the WeaveDNS server", err) } + go weavedns.ListenHttp(version, srv, zone, httpPort) err = srv.Start() if err != nil { Error.Fatal("Failed to start the WeaveDNS server", err)