Compare commits

...

2 Commits

Author SHA1 Message Date
Quentin McGaw ab09534a84 feat(portforward): log subcommands outputs with "up/down command:" prefix 2026-07-31 00:27:40 +00:00
Quentin McGaw b00279bc61 hotfix(portforwarding): allow setting ports when no custom code is running 2026-07-29 06:06:09 +00:00
5 changed files with 35 additions and 4 deletions
+21
View File
@@ -49,3 +49,24 @@ func portPairToString(internal, external uint16) string {
} }
return fmt.Sprintf("%d (internal port %d)", external, internal) return fmt.Sprintf("%d (internal port %d)", external, internal)
} }
type loggerWithPrefix struct {
prefix string
logger Logger
}
func (l *loggerWithPrefix) Debug(msg string) {
l.logger.Debug(l.prefix + msg)
}
func (l *loggerWithPrefix) Info(msg string) {
l.logger.Info(l.prefix + msg)
}
func (l *loggerWithPrefix) Warn(msg string) {
l.logger.Warn(l.prefix + msg)
}
func (l *loggerWithPrefix) Error(msg string) {
l.logger.Error(l.prefix + msg)
}
+3 -1
View File
@@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"slices" "slices"
"strings"
"sync" "sync"
) )
@@ -60,7 +61,8 @@ func (s *Service) SetPortsForwarded(ctx context.Context, ports []uint16) (err er
s.portMutex.Lock() s.portMutex.Lock()
defer s.portMutex.Unlock() defer s.portMutex.Unlock()
if s.settings.PortForwarder != nil { hasPortForwardingCodeRunning := !strings.HasSuffix(s.settings.PortForwarder.Name(), "[not supported]")
if hasPortForwardingCodeRunning {
return errors.New("setting port forwarded at runtime is not supported with internally running port forwarding code") return errors.New("setting port forwarded at runtime is not supported with internally running port forwarding code")
} }
+5 -1
View File
@@ -133,7 +133,11 @@ func (s *Service) onNewPorts(ctx context.Context, internalToExternalPorts map[ui
copy(s.ports, externalPorts) copy(s.ports, externalPorts)
if s.settings.UpCommand != "" { if s.settings.UpCommand != "" {
err = runCommand(ctx, s.cmder, s.logger, s.settings.UpCommand, externalPorts, s.settings.Interface) logger := &loggerWithPrefix{
prefix: "up command: ",
logger: s.logger,
}
err = runCommand(ctx, s.cmder, logger, s.settings.UpCommand, externalPorts, s.settings.Interface)
if err != nil { if err != nil {
err = fmt.Errorf("running up command: %w", err) err = fmt.Errorf("running up command: %w", err)
s.logger.Error(err.Error()) s.logger.Error(err.Error())
+5 -1
View File
@@ -32,7 +32,11 @@ func (s *Service) cleanup() (err error) {
const downTimeout = 60 * time.Second const downTimeout = 60 * time.Second
ctx, cancel := context.WithTimeout(context.Background(), downTimeout) ctx, cancel := context.WithTimeout(context.Background(), downTimeout)
defer cancel() defer cancel()
err = runCommand(ctx, s.cmder, s.logger, s.settings.DownCommand, s.ports, s.settings.Interface) logger := &loggerWithPrefix{
prefix: "down command: ",
logger: s.logger,
}
err = runCommand(ctx, s.cmder, logger, s.settings.DownCommand, s.ports, s.settings.Interface)
if err != nil { if err != nil {
err = fmt.Errorf("running down command: %w", err) err = fmt.Errorf("running down command: %w", err)
s.logger.Error(err.Error()) s.logger.Error(err.Error())
+1 -1
View File
@@ -55,7 +55,7 @@ func newNoPortForwarder(providerName string) *noPortForwarder {
} }
func (n *noPortForwarder) Name() string { func (n *noPortForwarder) Name() string {
return n.providerName return n.providerName + " [not supported]"
} }
func (n *noPortForwarder) PortForward(context.Context, pfutils.PortForwardObjects) ( func (n *noPortForwarder) PortForward(context.Context, pfutils.PortForwardObjects) (