Skip to content

Commit

Permalink
Configure logger via LoggerOptions, only use websocket for /logs
Browse files Browse the repository at this point in the history
  • Loading branch information
bobheadxi committed May 28, 2018
1 parent cbc18fe commit 5f52a61
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 19 deletions.
5 changes: 4 additions & 1 deletion daemon/inertiad/down.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ func downHandler(w http.ResponseWriter, r *http.Request) {
return
}

logger := log.NewLogger(os.Stdout, nil, w)
logger := log.NewLogger(log.LoggerOptions{
Stdout: os.Stdout,
HTTPWriter: w,
})
defer logger.Close()

cli, err := docker.NewEnvClient()
Expand Down
26 changes: 22 additions & 4 deletions daemon/inertiad/log/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,30 @@ type DaemonLogger struct {
io.Writer
}

// LoggerOptions defines configuration for a daemon logger
type LoggerOptions struct {
Stdout io.Writer
Socket SocketWriter
HTTPWriter http.ResponseWriter
}

// NewLogger creates a new logger
func NewLogger(stdout io.Writer, conn SocketWriter, httpWriter http.ResponseWriter) *DaemonLogger {
func NewLogger(opts LoggerOptions) *DaemonLogger {
var w io.Writer
if opts.Stdout == nil && opts.Socket == nil {
w = nil
} else if opts.Stdout != nil && opts.Socket == nil {
w = opts.Stdout
} else if opts.Stdout == nil && opts.Socket != nil {
w = NewWebSocketTextWriter(opts.Socket)
} else {
w = io.MultiWriter(opts.Stdout, NewWebSocketTextWriter(opts.Socket))
}

return &DaemonLogger{
socket: conn,
httpWriter: httpWriter,
Writer: io.MultiWriter(stdout, NewWebSocketTextWriter(conn)),
httpWriter: opts.HTTPWriter,
socket: opts.Socket,
Writer: w,
}
}

Expand Down
11 changes: 9 additions & 2 deletions daemon/inertiad/log/logger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,21 @@ func (m *mockSocketWriter) WriteMessage(t int, bytes []byte) error {
func (m *mockSocketWriter) getWrittenBytes() *bytes.Buffer { return &m.Buffer }

func TestNewLogger(t *testing.T) {
logger := NewLogger(nil, nil, nil)
logger := NewLogger(LoggerOptions{})
assert.NotNil(t, logger)
}

func TestWrite(t *testing.T) {
var b bytes.Buffer
writer := NewLogger(LoggerOptions{Stdout: &b})
writer.Write([]byte("whoah!"))
assert.Equal(t, "whoah!", b.String())
}

func TestWriteMulti(t *testing.T) {
var b1 bytes.Buffer
socketWriter := &mockSocketWriter{}
writer := NewLogger(&b1, socketWriter, nil)
writer := NewLogger(LoggerOptions{Stdout: &b1, Socket: socketWriter})
writer.Write([]byte("whoah!"))
assert.Equal(t, "whoah!", b1.String())
assert.Equal(t, "whoah!", socketWriter.getWrittenBytes().String())
Expand Down
11 changes: 9 additions & 2 deletions daemon/inertiad/logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,16 @@ func logHandler(w http.ResponseWriter, r *http.Request) {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
logger = log.NewLogger(os.Stdout, socket, w)
logger = log.NewLogger(log.LoggerOptions{
Stdout: os.Stdout,
Socket: socket,
HTTPWriter: w,
})
} else {
logger = log.NewLogger(os.Stdout, nil, w)
logger = log.NewLogger(log.LoggerOptions{
Stdout: os.Stdout,
HTTPWriter: w,
})
}
defer logger.Close()

Expand Down
5 changes: 4 additions & 1 deletion daemon/inertiad/reset.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ func resetHandler(w http.ResponseWriter, r *http.Request) {
return
}

logger := log.NewLogger(os.Stdout, nil, w)
logger := log.NewLogger(log.LoggerOptions{
Stdout: os.Stdout,
HTTPWriter: w,
})
defer logger.Close()

cli, err := docker.NewEnvClient()
Expand Down
17 changes: 8 additions & 9 deletions daemon/inertiad/up.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,17 @@ func upHandler(w http.ResponseWriter, r *http.Request) {
}
gitOpts := upReq.GitOptions

// Upgrade to websocket connection if required
// Configure logger
var logger *log.DaemonLogger
if upReq.Stream {
socket, err := socketUpgrader.Upgrade(w, r, nil)
if err != nil {
println(err.Error())
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
logger = log.NewLogger(os.Stdout, socket, w)
logger = log.NewLogger(log.LoggerOptions{
Stdout: os.Stdout,
HTTPWriter: w,
})
} else {
logger = log.NewLogger(os.Stdout, nil, w)
logger = log.NewLogger(log.LoggerOptions{
Stdout: os.Stdout,
})
}
defer logger.Close()

Expand Down

0 comments on commit 5f52a61

Please sign in to comment.