X-Git-Url: https://git.tokkee.org/?p=sysdb%2Fwebui.git;a=blobdiff_plain;f=server%2Fserver.go;h=8d0d72dc191770f6810896306ea3f0f3beca64b5;hp=093c683bb598eabc77e5e8ba76f80955cb39b459;hb=e7d61e08ebe25d5ce3193e792717acd4bb0ffb3e;hpb=8c86d8c04f668592ed072ec1cef5d0adff24aa43 diff --git a/server/server.go b/server/server.go index 093c683..8d0d72d 100644 --- a/server/server.go +++ b/server/server.go @@ -28,10 +28,10 @@ package server import ( "bytes" - "errors" "fmt" "html/template" "io" + "log" "net/http" "net/url" "path/filepath" @@ -42,12 +42,6 @@ import ( // A Config specifies configuration values for a SysDB web server. type Config struct { - // Conns is a slice of connections to a SysDB server instance. The number of - // elements specifies the maximum number of parallel queries to the backend. - // Note that a client connection is not thread-safe but multiple idle - // connections don't impose any load on the server. - Conns []*client.Conn - // TemplatePath specifies the relative or absolute location of template files. TemplatePath string @@ -57,7 +51,7 @@ type Config struct { // A Server implements an http.Handler that serves the SysDB user interface. type Server struct { - conns chan *client.Conn + c *client.Client // Request multiplexer mux map[string]handler @@ -71,25 +65,20 @@ type Server struct { } // New constructs a new SysDB web server using the specified configuration. -func New(cfg Config) (*Server, error) { - if len(cfg.Conns) == 0 { - return nil, errors.New("need at least one client connection") - } +func New(addr, user string, cfg Config) (*Server, error) { + s := &Server{results: make(map[string]*template.Template)} - s := &Server{ - conns: make(chan *client.Conn, len(cfg.Conns)), - results: make(map[string]*template.Template), + var err error + if s.c, err = client.Connect(addr, user); err != nil { + return nil, err } - for _, c := range cfg.Conns { - s.conns <- c + if major, minor, patch, extra, err := s.c.ServerVersion(); err == nil { + log.Printf("Connected to SysDB %d.%d.%d%s.", major, minor, patch, extra) } - var err error - s.main, err = cfg.parse("main.tmpl") - if err != nil { + if s.main, err = cfg.parse("main.tmpl"); err != nil { return nil, err } - types := []string{"host", "hosts", "service", "services", "metric", "metrics"} for _, t := range types { s.results[t], err = cfg.parse(t + ".tmpl") @@ -216,10 +205,7 @@ func (s *Server) static(w http.ResponseWriter, req request) { } func index(_ request, s *Server) (*page, error) { - c := <-s.conns - defer func() { s.conns <- c }() - - major, minor, patch, extra, err := c.ServerVersion() + major, minor, patch, extra, err := s.c.ServerVersion() if err != nil { return nil, err }