Added access log to server and modified mock-fts to use it

This commit is contained in:
bwilliams committed 2026-10-16 08:38:41 +01:00
1 parent 2490519c2b
commit 02e3d910a2
10 files changed
+389 -29

No files matched your search

+33 -4
View File
@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"log"
"log/slog"
"os"
"os/signal"
@@ -14,6 +15,7 @@ import (
"github.com/spf13/cobra"
"git.avsdev.uk/Go/job-search/internal/cli"
"git.avsdev.uk/Go/job-search/internal/logging"
"git.avsdev.uk/Go/job-search/internal/server"
)
@@ -32,13 +34,14 @@ WebSocket endpoint under /ws.`,
slog.Debug("command persistent post-run", "command", "serve")
},
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, _ []string) error {
RunE: func(cmd *cobra.Command, _ []string) (err error) {
slog.Debug("command run", "command", "serve")
addrOverride, _ := cmd.Flags().GetString("listen")
hostOverride, _ := cmd.Flags().GetString("host")
portOverride, _ := cmd.Flags().GetInt("port")
foreground, _ := cmd.Flags().GetBool("foreground")
accessLogOverride, _ := cmd.Flags().GetString("access-log")
if addrOverride != "" {
listenParts := strings.Split(addrOverride, ":")
@@ -47,12 +50,11 @@ WebSocket endpoint under /ws.`,
"--listen should be in the format of 127.0.0.1:9393",
)
}
port, err := strconv.Atoi(listenParts[1])
portOverride, err = strconv.Atoi(listenParts[1])
if err != nil {
return fmt.Errorf("failed to parse --listen port: %w", err)
}
hostOverride = listenParts[0]
portOverride = port
}
conf, err := opts.RunSetup(cmd, true, foreground)
@@ -66,6 +68,27 @@ WebSocket endpoint under /ws.`,
if hostOverride != "" {
conf.Server.Host = hostOverride
}
if cmd.Flags().Changed("access-log") {
conf.Server.AccessLog = accessLogOverride
}
var options []server.Option
if conf.Server.AccessLog != "" {
var (
accessLog *log.Logger
closeAccessLog func() error
)
accessLog, closeAccessLog, err = logging.OpenAccessLog(
conf.Server.AccessLog,
)
if err != nil {
return err
}
defer func() {
err = errors.Join(err, closeAccessLog())
}()
options = append(options, server.WithAccessLog(accessLog))
}
// ctx is cancelled on the first SIGINT (Ctrl+C) or SIGTERM.
ctx, stop := signal.NotifyContext(
@@ -80,7 +103,7 @@ WebSocket endpoint under /ws.`,
stop()
}()
appServer, err := server.New(&conf.Server)
appServer, err := server.New(&conf.Server, options...)
if err != nil {
return err
}
@@ -98,6 +121,12 @@ WebSocket endpoint under /ws.`,
)
flags.Int("port", 0, "listen address (default from config, 9393)")
flags.Bool("foreground", false, "run in the foreground")
flags.String(
"access-log",
"",
`access log file, or "-" for stdout; "" for none `+
"(default from config, server.access_log)",
)
cmd.MarkFlagsMutuallyExclusive("listen", "host")
cmd.MarkFlagsMutuallyExclusive("listen", "port")