redirect caddy logging to the non-headless tui when appropriate (#392)

This commit is contained in:
Michael Quigley 2023-08-25 13:26:54 -04:00
parent 6daa73b95c
commit 5fcba2dc62
No known key found for this signature in database
GPG Key ID: 9B60314A9DD20A62
7 changed files with 85 additions and 12 deletions

View File

@ -135,6 +135,12 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
panic(err)
}
shareDescription := fmt.Sprintf("access your share with: %v", tui.Code.Render(fmt.Sprintf("zrok access private %v", resp.Payload.ShrToken)))
mdl := newShareModel(resp.Payload.ShrToken, []string{shareDescription}, sdk.PrivateShareMode, sdk.BackendMode(cmd.backendMode))
if !cmd.headless {
proxy.SetCaddyLoggingWriter(mdl)
}
c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
@ -230,8 +236,6 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
}
} else {
shareDescription := fmt.Sprintf("access your share with: %v", tui.Code.Render(fmt.Sprintf("zrok access private %v", resp.Payload.ShrToken)))
mdl := newShareModel(resp.Payload.ShrToken, []string{shareDescription}, sdk.PrivateShareMode, sdk.BackendMode(cmd.backendMode))
logrus.SetOutput(mdl)
prg := tea.NewProgram(mdl, tea.WithAltScreen())
mdl.prg = prg

View File

@ -130,6 +130,11 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
panic(err)
}
mdl := newShareModel(resp.Payload.ShrToken, resp.Payload.FrontendProxyEndpoints, sdk.PublicShareMode, sdk.BackendMode(cmd.backendMode))
if !cmd.headless {
proxy.SetCaddyLoggingWriter(mdl)
}
c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
@ -185,7 +190,6 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
}
} else {
mdl := newShareModel(resp.Payload.ShrToken, resp.Payload.FrontendProxyEndpoints, sdk.PublicShareMode, sdk.BackendMode(cmd.backendMode))
logrus.SetOutput(mdl)
prg := tea.NewProgram(mdl, tea.WithAltScreen())
mdl.prg = prg

View File

@ -106,6 +106,19 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) {
logrus.Infof("using existing backend proxy endpoint: %v", target)
}
var shareDescription string
switch resp.Payload.ShareMode {
case string(sdk.PublicShareMode):
shareDescription = resp.Payload.FrontendEndpoint
case string(sdk.PrivateShareMode):
shareDescription = fmt.Sprintf("access your share with: %v", tui.Code.Render(fmt.Sprintf("zrok access private %v", shrToken)))
}
mdl := newShareModel(shrToken, []string{shareDescription}, sdk.ShareMode(resp.Payload.ShareMode), sdk.BackendMode(resp.Payload.BackendMode))
if !cmd.headless {
proxy.SetCaddyLoggingWriter(mdl)
}
requestsChan := make(chan *endpoints.Request, 1024)
switch resp.Payload.BackendMode {
case "proxy":
@ -158,15 +171,6 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) {
}
}
} else {
var shareDescription string
switch resp.Payload.ShareMode {
case string(sdk.PublicShareMode):
shareDescription = resp.Payload.FrontendEndpoint
case string(sdk.PrivateShareMode):
shareDescription = fmt.Sprintf("access your share with: %v", tui.Code.Render(fmt.Sprintf("zrok access private %v", shrToken)))
}
mdl := newShareModel(shrToken, []string{shareDescription}, sdk.ShareMode(resp.Payload.ShareMode), sdk.BackendMode(resp.Payload.BackendMode))
logrus.SetOutput(mdl)
prg := tea.NewProgram(mdl, tea.WithAltScreen())
mdl.prg = prg

View File

@ -218,6 +218,10 @@ func (m *shareModel) Write(p []byte) (n int, err error) {
return len(p), nil
}
func (shareModel) Close() error {
return nil
}
func wrap(lines []string, width int) []string {
ret := make([]string, 0)
for _, line := range lines {

View File

@ -0,0 +1,52 @@
package proxy
import (
"github.com/caddyserver/caddy/v2"
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
"io"
)
func init() {
caddy.RegisterModule(CaddyLogWriter{})
}
func SetCaddyLoggingWriter(w io.WriteCloser) {
loggingRequests = w
}
var loggingRequests io.WriteCloser
type CaddyLogWriter struct{}
func (CaddyLogWriter) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{
ID: "caddy.logging.writers.zrok_tui",
New: func() caddy.Module { return new(CaddyLogWriter) },
}
}
func (w *CaddyLogWriter) Provision(_ caddy.Context) error {
return nil
}
func (CaddyLogWriter) String() string {
return ""
}
func (CaddyLogWriter) WriterKey() string {
return "zrok_tui"
}
func (CaddyLogWriter) OpenWriter() (io.WriteCloser, error) {
return loggingRequests, nil
}
func (*CaddyLogWriter) UnmarshalCaddyfile(_ *caddyfile.Dispenser) error {
return nil
}
var (
_ caddy.Provisioner = (*CaddyLogWriter)(nil)
_ caddy.WriterOpener = (*CaddyLogWriter)(nil)
_ caddyfile.Unmarshaler = (*CaddyLogWriter)(nil)
)

View File

@ -68,6 +68,11 @@ func NewCaddyWebBackend(cfg *CaddyWebBackendConfig) (*CaddyWebBackend, error) {
},
},
}
if loggingRequests != nil {
caddyLog := caddyCfg.Logging.Logs["default"]
caddyLog.WriterRaw = caddyconfig.JSONModuleObject(&CaddyLogWriter{}, "output", "zrok_tui", nil)
caddyCfg.Logging.Logs["default"] = caddyLog
}
return &CaddyWebBackend{cfg: cfg, caddyCfg: caddyCfg}, nil
}