diff --git a/server/server.go b/server/server.go
index 093c683bb598eabc77e5e8ba76f80955cb39b459..8d0d72dc191770f6810896306ea3f0f3beca64b5 100644 (file)
--- a/server/server.go
+++ b/server/server.go
import (
"bytes"
- "errors"
"fmt"
"html/template"
"io"
+ "log"
"net/http"
"net/url"
"path/filepath"
// 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
// 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
}
// 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")
}
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
}