42 lines
888 B
Go
42 lines
888 B
Go
package shell
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"io"
|
|
)
|
|
|
|
// Logger is used to handle incoming logs from the ipfs node
|
|
type Logger struct {
|
|
resp io.ReadCloser
|
|
dec *json.Decoder
|
|
}
|
|
|
|
// Next is used to retrieve the next event from the logging system
|
|
func (l Logger) Next() (map[string]interface{}, error) {
|
|
var out map[string]interface{}
|
|
return out, l.dec.Decode(&out)
|
|
}
|
|
|
|
// Close is used to close our reader
|
|
func (l Logger) Close() error {
|
|
return l.resp.Close()
|
|
}
|
|
|
|
// GetLogs is used to retrieve a parsable logger object
|
|
func (s *Shell) GetLogs(ctx context.Context) (Logger, error) {
|
|
resp, err := s.Request("log/tail").Send(ctx)
|
|
if err != nil {
|
|
return Logger{}, err
|
|
}
|
|
if resp.Error != nil {
|
|
resp.Output.Close()
|
|
return Logger{}, resp.Error
|
|
}
|
|
return newLogger(resp.Output), nil
|
|
}
|
|
|
|
func newLogger(resp io.ReadCloser) Logger {
|
|
return Logger{resp, json.NewDecoder(resp)}
|
|
}
|