feat(internal/client): support dynamic log level

This commit is contained in:
Dustin Stiles 2025-03-23 10:02:05 -04:00
parent fab4912a0d
commit 27b6446893
Signed by: duwstiles
GPG Key ID: BCD9912EC231FC87

View File

@ -10,6 +10,7 @@ import (
"io"
"log/slog"
"net"
"os"
"koti.casa/numenor-labs/dsfx/internal/lib/crypto/identity"
"koti.casa/numenor-labs/dsfx/internal/lib/disk"
@ -28,6 +29,23 @@ const (
type Conf struct {
// Directories
ConfigDir string
LogLevel string
}
// SlogLevel returns the appropriate slog.Level based on the LogLevel string.
func (c Conf) SlogLevel() slog.Level {
switch c.LogLevel {
case "debug":
return slog.LevelDebug
case "info":
return slog.LevelInfo
case "warn":
return slog.LevelWarn
case "error":
return slog.LevelError
default:
return slog.LevelInfo
}
}
func loadConfigFromSystem(sys system.System) Conf {
@ -38,6 +56,9 @@ func loadConfigFromSystem(sys system.System) Conf {
c.ConfigDir = DefaultConfigDir
}
// defaults are handled by Conf.SlogLevel.
c.LogLevel = sys.GetEnv("DSFXCTL_LOG_LEVEL")
return c
}
@ -75,7 +96,7 @@ func (a *Client) Run(ctx context.Context) error {
opts := &slog.HandlerOptions{
AddSource: false,
Level: slog.LevelInfo,
Level: a.conf.SlogLevel(),
}
logger := slog.New(slog.NewTextHandler(a.system.Stdout(), opts))
@ -114,13 +135,16 @@ func (a *Client) Run(ctx context.Context) error {
return err
}
testConnection(ctx, id, laddr, raddrRaw)
return nil
case "identity":
pubKey := identity.ToPublicKey(id)
logger.InfoContext(ctx, "identity", slog.String("publicKey", base64.StdEncoding.EncodeToString(pubKey)))
return nil
case "":
return errors.New("no command provided")
default:
return errors.New("unknown command: " + a.system.Arg(0))
}
return nil
}
func testConnection(ctx context.Context, id ed25519.PrivateKey, laddr *network.Addr, raddrRaw string) {
@ -138,6 +162,8 @@ func testConnection(ctx context.Context, id ed25519.PrivateKey, laddr *network.A
return
}
defer conn.Close()
logger.InfoContext(ctx, "connected to server", slog.String("remote", raddr.String()))
}
// loadIdentity ...
@ -159,6 +185,9 @@ func (c *Client) loadIdentity() (ed25519.PrivateKey, error) {
// hasKeyFile ...
func (c *Client) hasKeyFile() (bool, error) {
f, err := c.configScope.Open("ed25519.key")
if errors.Is(err, os.ErrNotExist) {
return false, nil // Key file does not exist
}
if err != nil {
return false, nil
}