File tree Expand file tree Collapse file tree 2 files changed +67
-0
lines changed Expand file tree Collapse file tree 2 files changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ package shell
2
+
3
+ import (
4
+ "context"
5
+ "encoding/json"
6
+ "io"
7
+ )
8
+
9
+ // Logger is used to handle incoming logs from the ipfs node
10
+ type Logger struct {
11
+ resp io.ReadCloser
12
+ dec * json.Decoder
13
+ }
14
+
15
+ // Next is used to retrieve the next event from the logging system
16
+ func (l Logger ) Next () (map [string ]interface {}, error ) {
17
+ var out map [string ]interface {}
18
+ return out , l .dec .Decode (& out )
19
+ }
20
+
21
+ // Close is used to close our reader
22
+ func (l Logger ) Close () error {
23
+ return l .resp .Close ()
24
+ }
25
+
26
+ // GetLogs is used to retrieve a parsable logger object
27
+ func (s * Shell ) GetLogs (ctx context.Context ) (Logger , error ) {
28
+ resp , err := s .Request ("log/tail" ).Send (ctx )
29
+ if err != nil {
30
+ return Logger {}, err
31
+ }
32
+ if resp .Error != nil {
33
+ resp .Output .Close ()
34
+ return Logger {}, resp .Error
35
+ }
36
+ return newLogger (resp .Output ), nil
37
+ }
38
+
39
+ func newLogger (resp io.ReadCloser ) Logger {
40
+ return Logger {resp , json .NewDecoder (resp )}
41
+ }
Original file line number Diff line number Diff line change
1
+ package shell
2
+
3
+ import (
4
+ "context"
5
+ "testing"
6
+ )
7
+
8
+ func TestLogger (t * testing.T ) {
9
+ ctx , cancel := context .WithCancel (context .Background ())
10
+ defer cancel ()
11
+ sh := NewShell (shellUrl )
12
+ logger , err := sh .GetLogs (ctx )
13
+ if err != nil {
14
+ t .Fatal (err )
15
+ }
16
+ defer func () {
17
+ if err := logger .Close (); err != nil {
18
+ t .Fatal (err )
19
+ }
20
+ }()
21
+ if l , err := logger .Next (); err != nil {
22
+ t .Fatal (err )
23
+ } else if l == nil {
24
+ t .Fatal ("no logs found" )
25
+ }
26
+ }
You can’t perform that action at this time.
0 commit comments