expose latency timer on WSClient
This commit is contained in:
parent
d578f7f81e
commit
c08618f7e9
|
@ -1,5 +1,5 @@
|
||||||
hash: 2c988aae9517b386ee911e4da5deb9f5034359b7e2ccf448952a3ddb9771222d
|
hash: 41581813ff97225a7feb86b5accb0fe4acb3e198b64592d7452240e9473c479f
|
||||||
updated: 2017-06-28T13:04:20.907047164+02:00
|
updated: 2017-08-03T19:17:16.410522485Z
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/btcsuite/btcd
|
- name: github.com/btcsuite/btcd
|
||||||
version: b8df516b4b267acf2de46be593a9d948d1d2c420
|
version: b8df516b4b267acf2de46be593a9d948d1d2c420
|
||||||
|
@ -61,6 +61,8 @@ imports:
|
||||||
version: 5ccdfb18c776b740aecaf085c4d9a2779199c279
|
version: 5ccdfb18c776b740aecaf085c4d9a2779199c279
|
||||||
- name: github.com/pkg/errors
|
- name: github.com/pkg/errors
|
||||||
version: 645ef00459ed84a119197bfb8d8205042c6df63d
|
version: 645ef00459ed84a119197bfb8d8205042c6df63d
|
||||||
|
- name: github.com/rcrowley/go-metrics
|
||||||
|
version: 1f30fe9094a513ce4c700b9a54458bbb0c96996c
|
||||||
- name: github.com/spf13/afero
|
- name: github.com/spf13/afero
|
||||||
version: 9be650865eab0c12963d8753212f4f9c66cdcf12
|
version: 9be650865eab0c12963d8753212f4f9c66cdcf12
|
||||||
subpackages:
|
subpackages:
|
||||||
|
@ -126,7 +128,6 @@ imports:
|
||||||
- clist
|
- clist
|
||||||
- common
|
- common
|
||||||
- db
|
- db
|
||||||
- events
|
|
||||||
- flowrate
|
- flowrate
|
||||||
- log
|
- log
|
||||||
- merkle
|
- merkle
|
||||||
|
|
20
glide.yaml
20
glide.yaml
|
@ -7,11 +7,10 @@ import:
|
||||||
- package: github.com/golang/protobuf
|
- package: github.com/golang/protobuf
|
||||||
subpackages:
|
subpackages:
|
||||||
- proto
|
- proto
|
||||||
- package: github.com/pelletier/go-toml
|
|
||||||
version: ^1.0.0
|
|
||||||
- package: github.com/gorilla/websocket
|
- package: github.com/gorilla/websocket
|
||||||
- package: github.com/pkg/errors
|
- package: github.com/pkg/errors
|
||||||
version: ~0.8.0
|
version: ~0.8.0
|
||||||
|
- package: github.com/rcrowley/go-metrics
|
||||||
- package: github.com/spf13/cobra
|
- package: github.com/spf13/cobra
|
||||||
- package: github.com/spf13/viper
|
- package: github.com/spf13/viper
|
||||||
- package: github.com/tendermint/abci
|
- package: github.com/tendermint/abci
|
||||||
|
@ -26,21 +25,15 @@ import:
|
||||||
version: ~0.6.2
|
version: ~0.6.2
|
||||||
subpackages:
|
subpackages:
|
||||||
- data
|
- data
|
||||||
- package: github.com/tendermint/merkleeyes
|
|
||||||
version: ~0.2.4
|
|
||||||
subpackages:
|
|
||||||
- app
|
|
||||||
- iavl
|
|
||||||
- testutil
|
|
||||||
- package: github.com/tendermint/tmlibs
|
- package: github.com/tendermint/tmlibs
|
||||||
version: ~0.2.2
|
version: ~0.2.2
|
||||||
subpackages:
|
subpackages:
|
||||||
- autofile
|
- autofile
|
||||||
- cli
|
- cli
|
||||||
|
- cli/flags
|
||||||
- clist
|
- clist
|
||||||
- common
|
- common
|
||||||
- db
|
- db
|
||||||
- events
|
|
||||||
- flowrate
|
- flowrate
|
||||||
- log
|
- log
|
||||||
- merkle
|
- merkle
|
||||||
|
@ -53,7 +46,16 @@ import:
|
||||||
subpackages:
|
subpackages:
|
||||||
- context
|
- context
|
||||||
- package: google.golang.org/grpc
|
- package: google.golang.org/grpc
|
||||||
|
- package: github.com/tendermint/merkleeyes
|
||||||
|
version: ~0.2.4
|
||||||
|
subpackages:
|
||||||
|
- app
|
||||||
|
- iavl
|
||||||
|
- testutil
|
||||||
testImport:
|
testImport:
|
||||||
|
- package: github.com/go-kit/kit
|
||||||
|
subpackages:
|
||||||
|
- log/term
|
||||||
- package: github.com/stretchr/testify
|
- package: github.com/stretchr/testify
|
||||||
subpackages:
|
subpackages:
|
||||||
- assert
|
- assert
|
||||||
|
|
|
@ -12,6 +12,8 @@ import (
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
metrics "github.com/rcrowley/go-metrics"
|
||||||
|
|
||||||
types "github.com/tendermint/tendermint/rpc/lib/types"
|
types "github.com/tendermint/tendermint/rpc/lib/types"
|
||||||
cmn "github.com/tendermint/tmlibs/common"
|
cmn "github.com/tendermint/tmlibs/common"
|
||||||
)
|
)
|
||||||
|
@ -39,6 +41,9 @@ type WSClient struct {
|
||||||
Endpoint string // /websocket/url/endpoint
|
Endpoint string // /websocket/url/endpoint
|
||||||
Dialer func(string, string) (net.Conn, error)
|
Dialer func(string, string) (net.Conn, error)
|
||||||
|
|
||||||
|
PingPongLatencyTimer metrics.Timer
|
||||||
|
sentLastPingAt time.Time
|
||||||
|
|
||||||
// user facing channels, closed only when the client is being stopped.
|
// user facing channels, closed only when the client is being stopped.
|
||||||
ResultsCh chan json.RawMessage
|
ResultsCh chan json.RawMessage
|
||||||
ErrorsCh chan error
|
ErrorsCh chan error
|
||||||
|
@ -50,6 +55,7 @@ type WSClient struct {
|
||||||
receiveRoutineQuit chan struct{} // a way for receiveRoutine to close writeRoutine
|
receiveRoutineQuit chan struct{} // a way for receiveRoutine to close writeRoutine
|
||||||
|
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
|
mtx sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewWSClient returns a new client.
|
// NewWSClient returns a new client.
|
||||||
|
@ -59,6 +65,7 @@ func NewWSClient(remoteAddr, endpoint string) *WSClient {
|
||||||
Address: addr,
|
Address: addr,
|
||||||
Dialer: dialer,
|
Dialer: dialer,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
|
PingPongLatencyTimer: metrics.NewTimer(),
|
||||||
}
|
}
|
||||||
wsClient.BaseService = *cmn.NewBaseService(nil, "WSClient", wsClient)
|
wsClient.BaseService = *cmn.NewBaseService(nil, "WSClient", wsClient)
|
||||||
return wsClient
|
return wsClient
|
||||||
|
@ -263,6 +270,9 @@ func (c *WSClient) writeRoutine() {
|
||||||
c.reconnectAfter <- err
|
c.reconnectAfter <- err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
c.mtx.Lock()
|
||||||
|
c.sentLastPingAt = time.Now()
|
||||||
|
c.mtx.Unlock()
|
||||||
c.Logger.Debug("sent ping")
|
c.Logger.Debug("sent ping")
|
||||||
case <-c.receiveRoutineQuit:
|
case <-c.receiveRoutineQuit:
|
||||||
return
|
return
|
||||||
|
@ -284,6 +294,9 @@ func (c *WSClient) receiveRoutine() {
|
||||||
c.conn.SetReadDeadline(time.Now().Add(pongWait))
|
c.conn.SetReadDeadline(time.Now().Add(pongWait))
|
||||||
c.conn.SetPongHandler(func(string) error {
|
c.conn.SetPongHandler(func(string) error {
|
||||||
c.conn.SetReadDeadline(time.Now().Add(pongWait))
|
c.conn.SetReadDeadline(time.Now().Add(pongWait))
|
||||||
|
c.mtx.RLock()
|
||||||
|
c.PingPongLatencyTimer.UpdateSince(c.sentLastPingAt)
|
||||||
|
c.mtx.RUnlock()
|
||||||
c.Logger.Debug("got pong")
|
c.Logger.Debug("got pong")
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
|
@ -276,9 +276,9 @@ func TestServersAndClientsBasic(t *testing.T) {
|
||||||
testWithHTTPClient(t, cl2)
|
testWithHTTPClient(t, cl2)
|
||||||
|
|
||||||
cl3 := client.NewWSClient(addr, websocketEndpoint)
|
cl3 := client.NewWSClient(addr, websocketEndpoint)
|
||||||
|
cl3.SetLogger(log.TestingLogger())
|
||||||
_, err := cl3.Start()
|
_, err := cl3.Start()
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
cl3.SetLogger(log.TestingLogger())
|
|
||||||
fmt.Printf("=== testing server on %s using %v client", addr, cl3)
|
fmt.Printf("=== testing server on %s using %v client", addr, cl3)
|
||||||
testWithWSClient(t, cl3)
|
testWithWSClient(t, cl3)
|
||||||
cl3.Stop()
|
cl3.Stop()
|
||||||
|
@ -305,9 +305,9 @@ func TestQuotedStringArg(t *testing.T) {
|
||||||
|
|
||||||
func TestWSNewWSRPCFunc(t *testing.T) {
|
func TestWSNewWSRPCFunc(t *testing.T) {
|
||||||
cl := client.NewWSClient(tcpAddr, websocketEndpoint)
|
cl := client.NewWSClient(tcpAddr, websocketEndpoint)
|
||||||
|
cl.SetLogger(log.TestingLogger())
|
||||||
_, err := cl.Start()
|
_, err := cl.Start()
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
cl.SetLogger(log.TestingLogger())
|
|
||||||
defer cl.Stop()
|
defer cl.Stop()
|
||||||
|
|
||||||
val := "acbd"
|
val := "acbd"
|
||||||
|
@ -331,9 +331,9 @@ func TestWSNewWSRPCFunc(t *testing.T) {
|
||||||
|
|
||||||
func TestWSHandlesArrayParams(t *testing.T) {
|
func TestWSHandlesArrayParams(t *testing.T) {
|
||||||
cl := client.NewWSClient(tcpAddr, websocketEndpoint)
|
cl := client.NewWSClient(tcpAddr, websocketEndpoint)
|
||||||
|
cl.SetLogger(log.TestingLogger())
|
||||||
_, err := cl.Start()
|
_, err := cl.Start()
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
cl.SetLogger(log.TestingLogger())
|
|
||||||
defer cl.Stop()
|
defer cl.Stop()
|
||||||
|
|
||||||
val := "acbd"
|
val := "acbd"
|
||||||
|
@ -361,9 +361,9 @@ func TestWSClientPingPong(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cl := client.NewWSClient(tcpAddr, websocketEndpoint)
|
cl := client.NewWSClient(tcpAddr, websocketEndpoint)
|
||||||
|
cl.SetLogger(log.TestingLogger())
|
||||||
_, err := cl.Start()
|
_, err := cl.Start()
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
cl.SetLogger(log.TestingLogger())
|
|
||||||
defer cl.Stop()
|
defer cl.Stop()
|
||||||
|
|
||||||
time.Sleep(35 * time.Second)
|
time.Sleep(35 * time.Second)
|
||||||
|
|
Loading…
Reference in New Issue