aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/server.go
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2025-07-22 15:41:03 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2025-07-22 15:41:03 -0400
commit344c6526a8d6f490fc7628ddc7d2dd06ed1a07c1 (patch)
tree342878ff5d77b557533d6e5473e1d8f6e79ac6e9 /cmd/server.go
parentfaf35ef54885bc48b897508ce3cb40b868ff505b (diff)
Separate program entry point from commands
Diffstat (limited to 'cmd/server.go')
-rw-r--r--cmd/server.go27
1 files changed, 20 insertions, 7 deletions
diff --git a/cmd/server.go b/cmd/server.go
index 21f4661..be072cf 100644
--- a/cmd/server.go
+++ b/cmd/server.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"context"
@@ -8,6 +8,7 @@ import (
"net/http"
"os"
"os/signal"
+ "strings"
"syscall"
"time"
@@ -20,17 +21,26 @@ type ServerFlags struct {
Port int
}
-func setupServerFlags(args []string, fs *flag.FlagSet, flags *ServerFlags) {
- fs.StringVar(&flags.Address, "address", "", "the address to listen on")
+func SetupServerFlags(args []string, fs *flag.FlagSet, flags *ServerFlags) {
+ fs.StringVar(&flags.Address, "address", "", "the address to listen on, prefix with 'unix:' to create a unixsocket")
fs.IntVar(&flags.Port, "port", 8080, "the port to bind to")
fs.Parse(args)
}
-func runServer(sFlags ServerFlags, db *data.Query) byte {
- addr := fmt.Sprintf("%s:%d", sFlags.Address, sFlags.Port)
+func RunServer(sFlags ServerFlags, db *data.Query) byte {
- s := http.Server{Addr: addr, Handler: server.New(db)}
+ var addr string
+ var s server.Server
+ if after, ok := strings.CutPrefix(sFlags.Address, "unix:"); ok {
+ slog.Debug("Preparing unix domain socket")
+ addr = after
+ s = &server.UnixServer{Addr: addr, Db: db}
+ } else {
+ slog.Debug("Preparing http server")
+ addr = fmt.Sprintf("%s:%d", sFlags.Address, sFlags.Port)
+ s = &http.Server{Addr: addr, Handler: server.NewMux(db)}
+ }
serverErrors := make(chan error, 1)
exit := make(chan os.Signal, 1)
@@ -42,13 +52,16 @@ func runServer(sFlags ServerFlags, db *data.Query) byte {
if err := s.ListenAndServe(); err != nil {
serverErrors <- err
}
+ close(serverErrors)
}(serverErrors)
select {
case <-exit:
slog.Info("Recieved signal to shutdown")
case err := <-serverErrors:
- slog.Error("Server error", slog.String("err", err.Error()))
+ if err != nil {
+ slog.Error("Server error", slog.String("err", err.Error()))
+ }
}
slog.Info("Shutting down server")