|
1 | 1 | package shell
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "context" |
4 | 5 | "encoding/json"
|
5 |
| - "fmt" |
6 | 6 | "io"
|
7 |
| - "net/http" |
8 | 7 | )
|
9 | 8 |
|
10 | 9 | // Logger is used to handle incoming logs from the ipfs node
|
11 | 10 | type Logger struct {
|
12 |
| - r io.ReadCloser |
| 11 | + resp io.ReadCloser |
| 12 | + dec *json.Decoder |
13 | 13 | }
|
14 | 14 |
|
15 | 15 | // Next is used to retrieve the next event from the logging system
|
16 | 16 | func (l Logger) Next() (map[string]interface{}, error) {
|
17 | 17 | var out map[string]interface{}
|
18 |
| - if err := json.NewDecoder(l.r).Decode(&out); err != nil { |
19 |
| - return nil, err |
20 |
| - } |
21 |
| - return out, nil |
| 18 | + return out, l.dec.Decode(&out) |
22 | 19 | }
|
23 | 20 |
|
24 | 21 | // Close is used to close our reader
|
25 | 22 | func (l Logger) Close() error {
|
26 |
| - return l.r.Close() |
| 23 | + return l.resp.Close() |
27 | 24 | }
|
28 | 25 |
|
29 | 26 | // GetLogs is used to retrieve a parsable logger object
|
30 |
| -func (s *Shell) GetLogs() (Logger, error) { |
31 |
| - logURL := fmt.Sprintf("http://%s/api/v0/log/tail", s.url) |
32 |
| - req, err := http.NewRequest("GET", logURL, nil) |
| 27 | +func (s *Shell) GetLogs(ctx context.Context) (Logger, error) { |
| 28 | + resp, err := s.Request("log/tail").Send(ctx) |
33 | 29 | if err != nil {
|
34 | 30 | return Logger{}, err
|
35 | 31 | }
|
36 |
| - hc := &http.Client{} |
37 |
| - resp, err := hc.Do(req) |
38 |
| - if err != nil { |
39 |
| - return Logger{}, err |
| 32 | + if resp.Error != nil { |
| 33 | + resp.Output.Close() |
| 34 | + return Logger{}, resp.Error |
40 | 35 | }
|
41 |
| - return Logger{resp.Body}, nil |
| 36 | + return newLogger(resp.Output), nil |
| 37 | +} |
| 38 | + |
| 39 | +func newLogger(resp io.ReadCloser) Logger { |
| 40 | + return Logger{resp, json.NewDecoder(resp)} |
42 | 41 | }
|
0 commit comments