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