diff options
| author | Shulhan <ms@kilabit.info> | 2021-02-21 22:10:30 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2021-02-21 22:10:30 +0700 |
| commit | bac03b92129a703c3241b4a31b04ed5904ded333 (patch) | |
| tree | 3e30de0125789677604cf4fad426a75de0114b32 /server.go | |
| parent | 34f8dc935260582487bf451b6e9301e83414bb98 (diff) | |
| download | ciigo-bac03b92129a703c3241b4a31b04ed5904ded333.tar.xz | |
all: return error instead of call log.Fatal on non main packages
The library, non-main packages, should never call Fatal or panic,
its up to the main package or the caller on how to handle it.
While at it, fix the returned error to use log prefix and the error
value, remove the "ciigo: " prefix.
Diffstat (limited to 'server.go')
| -rw-r--r-- | server.go | 38 |
1 files changed, 23 insertions, 15 deletions
@@ -8,7 +8,6 @@ import ( "bytes" "fmt" "html/template" - "log" "net/http" "strings" @@ -34,8 +33,8 @@ type server struct { // The htmlTemplate parameter is optional, if not set its default to // embedded HTML template. // -func newServer(mfs *memfs.MemFS, root, address, htmlTemplate string) (srv *server) { - var err error +func newServer(mfs *memfs.MemFS, root, address, htmlTemplate string) (srv *server, err error) { + logp := "newServer" srv = &server{ opts: &libhttp.ServerOptions{ @@ -51,7 +50,7 @@ func newServer(mfs *memfs.MemFS, root, address, htmlTemplate string) (srv *serve srv.http, err = libhttp.NewServer(srv.opts) if err != nil { - log.Fatal("ciigo: libhttp.NewServer: " + err.Error()) + return nil, fmt.Errorf("%s: %w", logp, err) } epInSearch := &libhttp.Endpoint{ @@ -64,58 +63,67 @@ func newServer(mfs *memfs.MemFS, root, address, htmlTemplate string) (srv *serve err = srv.http.RegisterEndpoint(epInSearch) if err != nil { - log.Fatal("ciigo: " + err.Error()) + return nil, fmt.Errorf("%s: %w", logp, err) } srv.htmlg, err = newHTMLGenerator(mfs, htmlTemplate, srv.opts.Development) if err != nil { - log.Fatal("ciigo: " + err.Error()) + return nil, fmt.Errorf("%s: %w", logp, err) } if srv.opts.Development { srv.watcher, err = newWatcher(srv.htmlg, root) if err != nil { - log.Fatal("ciigo: " + err.Error()) + return nil, fmt.Errorf("%s: %w", logp, err) + } + + srv.watcher.fileMarkups, err = listFileMarkups(root) + if err != nil { + return nil, fmt.Errorf("%s: %w", logp, err) } - srv.watcher.fileMarkups = listFileMarkups(root) srv.htmlg.convertFileMarkups(srv.watcher.fileMarkups) } - return srv + return srv, nil } // // start the web server. // -func (srv *server) start() { +func (srv *server) start() (err error) { + logp := "start" + if srv.opts.Development { err := srv.watcher.start() if err != nil { - log.Fatal("ciigo: " + err.Error()) + return fmt.Errorf("%s: %w", logp, err) } } fmt.Printf("ciigo: starting HTTP server at %q for %q\n", srv.opts.Address, srv.opts.Root) - err := srv.http.Start() + err = srv.http.Start() if err != nil { - log.Fatal("ciigo: " + err.Error()) + return fmt.Errorf("%s: %w", logp, err) } + + return nil } func (srv *server) onSearch(res http.ResponseWriter, req *http.Request, reqBody []byte) ( resBody []byte, err error, ) { var bufSearch, buf bytes.Buffer + logp := "onSearch" q := req.Form.Get("q") results := srv.http.Memfs.Search(strings.Fields(q), 0) err = srv.htmlg.tmplSearch.Execute(&bufSearch, results) if err != nil { - return nil, fmt.Errorf("ciigo.onSearch: " + err.Error()) + return nil, fmt.Errorf("%s: %w", logp, err) } fhtml := &fileHTML{ @@ -124,7 +132,7 @@ func (srv *server) onSearch(res http.ResponseWriter, req *http.Request, reqBody err = srv.htmlg.tmpl.Execute(&buf, fhtml) if err != nil { - return nil, fmt.Errorf("ciigo.onSearch: " + err.Error()) + return nil, fmt.Errorf("%s: %w", logp, err) } resBody = buf.Bytes() |
