Skip to content

Commit 50b8f68

Browse files
Better TzKT events logging
1 parent 84a0fd4 commit 50b8f68

File tree

5 files changed

+69
-38
lines changed

5 files changed

+69
-38
lines changed

tzkt/events/signalr/hub.go

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package signalr
22

33
import (
4+
"context"
45
"net"
56
"net/url"
67
"sync"
78
"time"
89

910
"github.com/gorilla/websocket"
1011
"github.com/pkg/errors"
12+
"github.com/rs/zerolog"
1113
"github.com/rs/zerolog/log"
1214
)
1315

@@ -22,7 +24,7 @@ type Hub struct {
2224

2325
encoder Encoding
2426
msgs chan interface{}
25-
stop chan struct{}
27+
log zerolog.Logger
2628
mx sync.Mutex
2729
wg sync.WaitGroup
2830

@@ -48,22 +50,22 @@ func NewHub(address, connectionToken string) (*Hub, error) {
4850
url: u,
4951
encoder: NewJSONEncoding(),
5052
msgs: make(chan interface{}, 1024),
51-
stop: make(chan struct{}, 1),
53+
log: log.Logger,
5254
}, nil
5355
}
5456

5557
// Connect -
56-
func (hub *Hub) Connect() error {
58+
func (hub *Hub) Connect(ctx context.Context) error {
5759
if err := hub.handshake(); err != nil {
5860
return err
5961
}
6062

61-
hub.listen()
63+
hub.listen(ctx)
6264
return nil
6365
}
6466

6567
func (hub *Hub) handshake() error {
66-
log.Trace().Msgf("connecting to %s...", hub.url.String())
68+
hub.log.Debug().Msgf("connecting to %s...", hub.url.String())
6769

6870
c, response, err := websocket.DefaultDialer.Dial(hub.url.String(), nil)
6971
if err != nil {
@@ -85,14 +87,13 @@ func (hub *Hub) handshake() error {
8587
if resp.Error != "" {
8688
return errors.Wrap(ErrHandshake, resp.Error)
8789
}
88-
log.Trace().Msg("connected")
90+
hub.log.Debug().Msg("connected")
8991

9092
return nil
9193
}
9294

9395
// Close -
9496
func (hub *Hub) Close() error {
95-
hub.stop <- struct{}{}
9697
hub.wg.Wait()
9798

9899
if err := hub.Send(newCloseMessage()); err != nil {
@@ -103,22 +104,21 @@ func (hub *Hub) Close() error {
103104
return err
104105
}
105106

106-
close(hub.stop)
107107
close(hub.msgs)
108108
return nil
109109
}
110110

111111
func (hub *Hub) reconnect() error {
112-
log.Warn().Msg("reconnecting...")
112+
hub.log.Warn().Msg("reconnecting...")
113113

114114
if err := hub.Send(newCloseMessage()); err != nil {
115-
log.Err(err).Msg("send")
115+
hub.log.Err(err).Msg("send")
116116
}
117117

118118
if err := hub.conn.Close(); err != nil {
119-
log.Err(err).Msg("close")
119+
hub.log.Err(err).Msg("close")
120120
}
121-
log.Trace().Msg("connection closed")
121+
hub.log.Debug().Msg("connection closed")
122122
if err := hub.handshake(); err != nil {
123123
return err
124124
}
@@ -128,28 +128,29 @@ func (hub *Hub) reconnect() error {
128128
return nil
129129
}
130130

131-
func (hub *Hub) listen() {
131+
func (hub *Hub) listen(ctx context.Context) {
132132
hub.wg.Add(1)
133133

134134
go func() {
135135
defer hub.wg.Done()
136136

137137
for {
138138
select {
139-
case <-hub.stop:
139+
case <-ctx.Done():
140+
hub.log.Debug().Msg("stop hub listenning...")
140141
return
141142
default:
142143
if err := hub.readAllMessages(); err != nil {
143144
switch {
144145
case errors.Is(err, ErrTimeout) || websocket.IsCloseError(err, websocket.CloseAbnormalClosure):
145146
if err := hub.reconnect(); err != nil {
146-
log.Err(err).Msg("reconnect")
147-
log.Warn().Msg("retry after 5 seconds")
147+
hub.log.Err(err).Msg("reconnect")
148+
hub.log.Warn().Msg("retry after 5 seconds")
148149
time.Sleep(time.Second * 5)
149150
}
150151
case errors.Is(err, ErrEmptyResponse):
151152
default:
152-
log.Err(err).Msg("readAllMessages")
153+
hub.log.Err(err).Msg("readAllMessages")
153154
}
154155
}
155156
}
@@ -163,6 +164,9 @@ func (hub *Hub) Send(msg interface{}) error {
163164
if err != nil {
164165
return err
165166
}
167+
168+
hub.log.Trace().Str("data", string(data)).Msg("==> TzKT server")
169+
166170
hub.mx.Lock()
167171
defer hub.mx.Unlock()
168172
return hub.conn.WriteMessage(websocket.TextMessage, data)
@@ -186,6 +190,8 @@ func (hub *Hub) readOneMessage(msg interface{}) error {
186190
if len(data) == 0 {
187191
return ErrEmptyResponse
188192
}
193+
hub.log.Trace().Str("data", string(data)).Msg("<== TzKT server")
194+
189195
if err := json.Unmarshal(data, msg); err != nil {
190196
return err
191197
}
@@ -203,7 +209,7 @@ func (hub *Hub) readAllMessages() error {
203209
return err
204210
}
205211
if scanner == nil {
206-
log.Warn().Msg("no messages during read timeout")
212+
hub.log.Warn().Msg("no messages during read timeout")
207213
return ErrEmptyResponse
208214
}
209215
if err := scanner.Scan(); err != nil {
@@ -219,11 +225,14 @@ func (hub *Hub) readAllMessages() error {
219225
break
220226
}
221227

228+
hub.log.Trace().Str("data", string(data)).Msg("<== TzKT server")
229+
222230
msg, err := hub.encoder.Decode(data)
223231
if err != nil {
224232
return err
225233
}
226234
hub.msgs <- msg
235+
227236
if closeMsg, ok := msg.(CloseMessage); ok {
228237
return hub.closeMessageHandler(closeMsg)
229238
}
@@ -238,7 +247,7 @@ func (hub *Hub) readAllMessages() error {
238247

239248
func (hub *Hub) closeMessageHandler(msg CloseMessage) error {
240249
if msg.Error != "" {
241-
log.Error().Msg(msg.Error)
250+
hub.log.Error().Msg(msg.Error)
242251
}
243252
if !msg.AllowReconnect {
244253
return ErrConnectionClose

tzkt/events/signalr/json.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
jsoniter "github.com/json-iterator/go"
99
"github.com/pkg/errors"
10-
"github.com/rs/zerolog/log"
1110
)
1211

1312
var json = jsoniter.ConfigCompatibleWithStandardLibrary
@@ -28,8 +27,6 @@ func NewJSONEncoding() *JSONEncoding {
2827

2928
// Decode -
3029
func (e *JSONEncoding) Decode(data []byte) (interface{}, error) {
31-
log.Trace().Msg(string(data))
32-
3330
var typ Type
3431
if err := json.Unmarshal(data, &typ); err != nil {
3532
return nil, err

tzkt/events/signalr/signalr.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package signalr
22

3+
import (
4+
"context"
5+
6+
"github.com/rs/zerolog"
7+
)
8+
39
// SignalR -
410
type SignalR struct {
511
hub *Hub
612
t *Transport
7-
13+
log zerolog.Logger
814
url string
915
}
1016

@@ -16,8 +22,14 @@ func NewSignalR(url string) *SignalR {
1622
}
1723
}
1824

25+
// SetLogger -
26+
func (s *SignalR) SetLogger(log zerolog.Logger) {
27+
s.t.log = log
28+
s.log = log
29+
}
30+
1931
// Connect - connect to server
20-
func (s *SignalR) Connect(version Version) error {
32+
func (s *SignalR) Connect(ctx context.Context, version Version) error {
2133
resp, err := s.t.Negotiate(version)
2234
if err != nil {
2335
return err
@@ -35,8 +47,9 @@ func (s *SignalR) Connect(version Version) error {
3547
return err
3648
}
3749
s.hub = hub
50+
s.hub.log = s.log
3851

39-
return s.hub.Connect()
52+
return s.hub.Connect(ctx)
4053
}
4154

4255
// Messages - listens message channel

tzkt/events/signalr/transport.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"net/url"
66
"time"
77

8+
"github.com/rs/zerolog"
89
"github.com/rs/zerolog/log"
910

1011
"github.com/pkg/errors"
@@ -23,6 +24,8 @@ const (
2324
type Transport struct {
2425
url string
2526
client *http.Client
27+
28+
log zerolog.Logger
2629
}
2730

2831
// NewTransport -
@@ -38,6 +41,7 @@ func NewTransport(baseURL string) *Transport {
3841
Timeout: time.Minute,
3942
Transport: t,
4043
},
44+
log: log.Logger,
4145
}
4246
}
4347

@@ -52,7 +56,7 @@ func (t *Transport) Negotiate(version Version) (response NegotiateResponse, err
5256
q.Set("negotiateVersion", string(version))
5357
u.RawQuery = q.Encode()
5458

55-
log.Trace().Str("url", u.String()).Msg("send negotiate request...")
59+
t.log.Debug().Str("url", u.String()).Msg("send negotiate request...")
5660

5761
req, err := http.NewRequest(http.MethodPost, u.String(), nil)
5862
if err != nil {

tzkt/events/tzkt.go

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package events
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67
"strings"
@@ -10,6 +11,7 @@ import (
1011

1112
tzktData "github.com/dipdup-net/go-lib/tzkt/data"
1213
"github.com/pkg/errors"
14+
"github.com/rs/zerolog"
1315
"github.com/rs/zerolog/log"
1416
)
1517

@@ -20,8 +22,9 @@ type TzKT struct {
2022

2123
subscriptions []signalr.Invocation
2224

25+
log zerolog.Logger
26+
2327
msgs chan Message
24-
stop chan struct{}
2528
wg sync.WaitGroup
2629
}
2730

@@ -33,31 +36,35 @@ func NewTzKT(url string) *TzKT {
3336
return &TzKT{
3437
s: signalr.NewSignalR(url),
3538
msgs: make(chan Message, 1024),
36-
stop: make(chan struct{}, 1),
3739
subscriptions: make([]signalr.Invocation, 0),
40+
log: log.Logger,
3841
}
3942
}
4043

44+
// SetLogger -
45+
func (tzkt *TzKT) SetLogger(logger zerolog.Logger) {
46+
tzkt.log = logger
47+
tzkt.s.SetLogger(logger)
48+
}
49+
4150
// Connect - connect to events SignalR server
42-
func (tzkt *TzKT) Connect() error {
43-
if err := tzkt.s.Connect(signalr.Version1); err != nil {
51+
func (tzkt *TzKT) Connect(ctx context.Context) error {
52+
if err := tzkt.s.Connect(ctx, signalr.Version1); err != nil {
4453
return err
4554
}
4655
tzkt.s.SetOnReconnect(tzkt.onReconnect)
47-
tzkt.listen()
56+
tzkt.listen(ctx)
4857
return nil
4958
}
5059

5160
// Close - closing all connections
5261
func (tzkt *TzKT) Close() error {
53-
tzkt.stop <- struct{}{}
5462
tzkt.wg.Wait()
5563

5664
if err := tzkt.s.Close(); err != nil {
5765
return err
5866
}
5967
close(tzkt.msgs)
60-
close(tzkt.stop)
6168
return nil
6269
}
6370

@@ -144,27 +151,28 @@ func (tzkt *TzKT) subscribe(channel string, args ...interface{}) error {
144151
return tzkt.s.Send(msg)
145152
}
146153

147-
func (tzkt *TzKT) listen() {
154+
func (tzkt *TzKT) listen(ctx context.Context) {
148155
tzkt.wg.Add(1)
149156

150157
go func() {
151158
defer tzkt.wg.Done()
152159

153160
for {
154161
select {
155-
case <-tzkt.stop:
162+
case <-ctx.Done():
163+
tzkt.log.Debug().Msg("listenning was stopped")
156164
return
157165
case msg := <-tzkt.s.Messages():
158166
switch typ := msg.(type) {
159167
case signalr.Invocation:
160168
if len(typ.Arguments) == 0 {
161-
log.Warn().Msgf("empty arguments of invocation: %v", typ)
169+
tzkt.log.Warn().Msgf("empty arguments of invocation: %v", typ)
162170
continue
163171
}
164172

165173
var packet Packet
166174
if err := json.Unmarshal(typ.Arguments[0], &packet); err != nil {
167-
log.Err(err).Msg("invalid invocation argument")
175+
tzkt.log.Err(err).Msg("invalid invocation argument")
168176
continue
169177
}
170178

@@ -177,7 +185,7 @@ func (tzkt *TzKT) listen() {
177185
if packet.Data != nil {
178186
data, err := parseData(typ.Target, packet.Data)
179187
if err != nil {
180-
log.Err(err).Msg("error during parsing data")
188+
tzkt.log.Err(err).Msg("error during parsing data")
181189
continue
182190
}
183191
message.Body = data

0 commit comments

Comments
 (0)