Skip to content

Commit 73e99c9

Browse files
edwardmacktimwu20
authored andcommitted
feat(dot/telemetry): implement telemetry message network_state (ChainSafe#1618)
* refactor telemetry messages to map format * add basic network state telemetry message * refactor message sender to handle interface{} types * refactor telemetry messages to be structs * lint * go fmt * lint * move msg building logic outside msg sending loop * make telemetry messages an interface * Lookup transactions count from TransactionsState * address comments * fix mocks for tests * lint * refactor TelemetryMessage to Message * update mock handler to return result * add TransactionsCount to mockhandler * move logic to build new network state message * lint * fix interface * update mockhandler * lint
1 parent a84466d commit 73e99c9

File tree

14 files changed

+289
-120
lines changed

14 files changed

+289
-120
lines changed

chain/dev/genesis.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
"id": "dev",
44
"chainType": "Local",
55
"bootNodes": [],
6-
"telemetryEndpoints": null,
6+
"telemetryEndpoints": [
7+
[
8+
"wss://telemetry.polkadot.io/submit/",
9+
0
10+
]
11+
],
712
"protocolId": "/gossamer/dev/0",
813
"genesis": {
914
"raw": {
@@ -32,4 +37,4 @@
3237
"forkBlocks": null,
3338
"badBlocks": null,
3439
"consensusEngine": ""
35-
}
40+
}

chain/gssmr/genesis.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
"id": "gssmr",
44
"chainType": "Local",
55
"bootNodes": [],
6+
"telemetryEndpoints": [
7+
[
8+
"wss://telemetry.polkadot.io/submit/",
9+
0
10+
]
11+
],
612
"protocolId": "/gossamer/gssmr/0",
713
"genesis": {
814
"raw": {
@@ -40,4 +46,4 @@
4046
"forkBlocks": null,
4147
"badBlocks": null,
4248
"consensusEngine": ""
43-
}
49+
}

dot/core/messages.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,8 @@ func (s *Service) HandleTransactionMessage(msg *network.TransactionMessage) (boo
5757

5858
return len(msg.Extrinsics) > 0, nil
5959
}
60+
61+
// TransactionsCount returns number for pending transactions in pool
62+
func (s *Service) TransactionsCount() int {
63+
return len(s.transactionState.PendingInPool())
64+
}

dot/core/messages_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"testing"
2222
"time"
2323

24-
. "github.com/ChainSafe/gossamer/dot/core/mocks"
24+
. "github.com/ChainSafe/gossamer/dot/core/mocks" // nolint
2525
"github.com/ChainSafe/gossamer/dot/network"
2626
"github.com/ChainSafe/gossamer/dot/state"
2727
"github.com/ChainSafe/gossamer/dot/types"
@@ -38,7 +38,7 @@ import (
3838

3939
func TestService_ProcessBlockAnnounceMessage(t *testing.T) {
4040
// TODO: move to sync package
41-
net := new(MockNetwork)
41+
net := new(MockNetwork) // nolint
4242

4343
cfg := &Config{
4444
Network: net,
@@ -136,7 +136,7 @@ func TestService_HandleTransactionMessage(t *testing.T) {
136136
ks := keystore.NewGlobalKeystore()
137137
ks.Acco.Insert(kp)
138138

139-
bp := new(MockBlockProducer)
139+
bp := new(MockBlockProducer) // nolint
140140
blockC := make(chan types.Block)
141141
bp.On("GetBlockChannel", nil).Return(blockC)
142142

dot/network/mock_transaction_handler.go

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dot/network/service.go

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"errors"
2222
"io"
23+
"math/big"
2324
"os"
2425
"sync"
2526
"time"
@@ -315,11 +316,12 @@ main:
315316

316317
case <-ticker.C:
317318
o := s.host.bwc.GetBandwidthTotals()
318-
err := telemetry.GetInstance().SendMessage(telemetry.NewTelemetryMessage(
319-
telemetry.NewKeyValue("bandwidth_download", o.RateIn),
320-
telemetry.NewKeyValue("bandwidth_upload", o.RateOut),
321-
telemetry.NewKeyValue("msg", "system.interval"),
322-
telemetry.NewKeyValue("peers", s.host.peerCount())))
319+
err := telemetry.GetInstance().SendMessage(telemetry.NewBandwidthTM(o.RateIn, o.RateOut, s.host.peerCount()))
320+
if err != nil {
321+
logger.Debug("problem sending system.interval telemetry message", "error", err)
322+
}
323+
324+
err = telemetry.GetInstance().SendMessage(telemetry.NewNetworkStateTM(s.host.h, s.Peers()))
323325
if err != nil {
324326
logger.Debug("problem sending system.interval telemetry message", "error", err)
325327
}
@@ -333,19 +335,22 @@ func (s *Service) sentBlockIntervalTelemetry() {
333335
if err != nil {
334336
continue
335337
}
338+
bestHash := best.Hash()
339+
336340
finalized, err := s.blockState.GetFinalizedHeader(0, 0) //nolint
337341
if err != nil {
338342
continue
339343
}
340-
341-
err = telemetry.GetInstance().SendMessage(telemetry.NewTelemetryMessage(
342-
telemetry.NewKeyValue("best", best.Hash().String()),
343-
telemetry.NewKeyValue("finalized_hash", finalized.Hash().String()), //nolint
344-
telemetry.NewKeyValue("finalized_height", finalized.Number), //nolint
345-
telemetry.NewKeyValue("height", best.Number),
346-
telemetry.NewKeyValue("msg", "system.interval"),
347-
telemetry.NewKeyValue("txcount", 0), // todo (ed) determine where to get tx count
348-
telemetry.NewKeyValue("used_state_cache_size", 0))) // todo (ed) determine where to get used_state_cache_size
344+
finalizedHash := finalized.Hash()
345+
346+
err = telemetry.GetInstance().SendMessage(telemetry.NewBlockIntervalTM(
347+
&bestHash,
348+
best.Number,
349+
&finalizedHash,
350+
finalized.Number,
351+
big.NewInt(int64(s.transactionHandler.TransactionsCount())),
352+
big.NewInt(0), // todo (ed) determine where to get used_state_cache_size
353+
))
349354
if err != nil {
350355
logger.Debug("problem sending system.interval telemetry message", "error", err)
351356
}

dot/network/service_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ func createTestService(t *testing.T, cfg *Config) (srvc *Service) {
8484
if cfg.TransactionHandler == nil {
8585
mocktxhandler := &MockTransactionHandler{}
8686
mocktxhandler.On("HandleTransactionMessage", mock.AnythingOfType("*TransactionMessage")).Return(nil)
87+
mocktxhandler.On("TransactionsCount").Return(0)
8788
cfg.TransactionHandler = mocktxhandler
8889
}
8990

dot/network/state.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,5 @@ type Syncer interface {
5656
// TransactionHandler is the interface used by the transactions sub-protocol
5757
type TransactionHandler interface {
5858
HandleTransactionMessage(*TransactionMessage) (bool, error)
59+
TransactionsCount() int
5960
}

dot/network/test_helpers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ func NewMockSyncer() *MockSyncer {
5959
func NewMockTransactionHandler() *MockTransactionHandler {
6060
mocktxhandler := new(MockTransactionHandler)
6161
mocktxhandler.On("HandleTransactionMessage", mock.AnythingOfType("*network.TransactionMessage")).Return(nil)
62+
mocktxhandler.On("TransactionsCount").Return(0)
6263
return mocktxhandler
6364
}
6465

dot/network/transaction_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ func TestHandleTransactionMessage(t *testing.T) {
5656
basePath := utils.NewTestBasePath(t, "nodeA")
5757
mockhandler := &MockTransactionHandler{}
5858
mockhandler.On("HandleTransactionMessage", mock.AnythingOfType("*network.TransactionMessage")).Return(true, nil)
59+
mockhandler.On("TransactionsCount").Return(0)
5960

6061
config := &Config{
6162
BasePath: basePath,

0 commit comments

Comments
 (0)