Added access log to server and modified mock-fts to use it
This commit is contained in:
1 parent
2490519c2b
commit
02e3d910a2
10 files changed
+389
-29
No files matched your search
@@ -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")
|
||||
|
||||
|
||||
Reference in new issue
Block a user