diff --git a/client/go.mod b/client/go.mod index 1a4218f..8f56996 100644 --- a/client/go.mod +++ b/client/go.mod @@ -29,7 +29,7 @@ require ( github.com/multiformats/go-multiaddr v0.12.4 github.com/stretchr/testify v1.9.0 golang.org/x/crypto v0.24.0 - google.golang.org/grpc v1.58.2 + google.golang.org/grpc v1.63.2 source.quilibrium.com/quilibrium/monorepo/go-libp2p-blossomsub v0.0.0-00010101000000-000000000000 source.quilibrium.com/quilibrium/monorepo/node v0.0.0-00010101000000-000000000000 ) @@ -62,12 +62,13 @@ require ( github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect - github.com/google/uuid v1.4.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -167,8 +168,8 @@ require ( golang.org/x/text v0.16.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect gonum.org/v1/gonum v0.13.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.2.1 // indirect diff --git a/client/go.sum b/client/go.sum index f086150..23e5817 100644 --- a/client/go.sum +++ b/client/go.sum @@ -128,8 +128,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -146,9 +146,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -159,7 +158,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -174,8 +172,8 @@ github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5/go.mod h1:czg5+yv1E0Z github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -184,6 +182,10 @@ github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORR github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk= @@ -734,12 +736,12 @@ google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g= -google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -748,8 +750,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= -google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -759,8 +761,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/node/app/db_console.go b/node/app/db_console.go index eb6c549..cca2b17 100644 --- a/node/app/db_console.go +++ b/node/app/db_console.go @@ -22,6 +22,7 @@ import ( "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials/insecure" "source.quilibrium.com/quilibrium/monorepo/node/config" + qgrpc "source.quilibrium.com/quilibrium/monorepo/node/internal/grpc" "source.quilibrium.com/quilibrium/monorepo/node/protobufs" ) @@ -624,7 +625,8 @@ func ConnectToNode(nodeConfig *config.Config) (*grpc.ClientConn, error) { } } - return grpc.Dial( + return qgrpc.DialContext( + context.Background(), addr, grpc.WithTransportCredentials( insecure.NewCredentials(), diff --git a/node/consensus/data/data_clock_consensus_engine.go b/node/consensus/data/data_clock_consensus_engine.go index a593945..8e2b360 100644 --- a/node/consensus/data/data_clock_consensus_engine.go +++ b/node/consensus/data/data_clock_consensus_engine.go @@ -28,6 +28,7 @@ import ( "source.quilibrium.com/quilibrium/monorepo/node/execution" "source.quilibrium.com/quilibrium/monorepo/node/internal/cas" "source.quilibrium.com/quilibrium/monorepo/node/internal/frametime" + qgrpc "source.quilibrium.com/quilibrium/monorepo/node/internal/grpc" "source.quilibrium.com/quilibrium/monorepo/node/keys" "source.quilibrium.com/quilibrium/monorepo/node/p2p" "source.quilibrium.com/quilibrium/monorepo/node/protobufs" @@ -321,7 +322,7 @@ func (e *DataClockConsensusEngine) Start() <-chan error { e.pubSub.Subscribe(e.txFilter, e.handleTxMessage) e.pubSub.Subscribe(e.infoFilter, e.handleInfoMessage) go func() { - server := grpc.NewServer( + server := qgrpc.NewServer( grpc.MaxSendMsgSize(20*1024*1024), grpc.MaxRecvMsgSize(20*1024*1024), ) @@ -337,7 +338,7 @@ func (e *DataClockConsensusEngine) Start() <-chan error { go func() { if e.dataTimeReel.GetFrameProverTries()[0].Contains(e.provingKeyAddress) { - server := grpc.NewServer( + server := qgrpc.NewServer( grpc.MaxSendMsgSize(1*1024*1024), grpc.MaxRecvMsgSize(1*1024*1024), ) @@ -779,7 +780,7 @@ func (e *DataClockConsensusEngine) createParallelDataClientsFromListAndIndex( ctx, cancel := context.WithTimeout(e.ctx, 1*time.Second) defer cancel() - conn, err := grpc.DialContext( + conn, err := qgrpc.DialContext( ctx, addr, grpc.WithTransportCredentials( @@ -842,7 +843,7 @@ func ( ctx, cancel := context.WithTimeout(e.ctx, 1*time.Second) defer cancel() - conn, err := grpc.DialContext( + conn, err := qgrpc.DialContext( ctx, addr, grpc.WithTransportCredentials( @@ -894,7 +895,7 @@ func (e *DataClockConsensusEngine) createParallelDataClientsFromList() ( ctx, cancel := context.WithTimeout(e.ctx, 1*time.Second) defer cancel() - conn, err := grpc.DialContext( + conn, err := qgrpc.DialContext( ctx, addr, grpc.WithTransportCredentials( @@ -957,7 +958,7 @@ func (e *DataClockConsensusEngine) createParallelDataClientsFromBaseMultiaddr( } ctx, cancel := context.WithTimeout(e.ctx, 1*time.Second) defer cancel() - conn, err := grpc.DialContext( + conn, err := qgrpc.DialContext( ctx, addr, grpc.WithTransportCredentials( diff --git a/node/consensus/data/peer_messaging.go b/node/consensus/data/peer_messaging.go index 61be29e..8ff0faf 100644 --- a/node/consensus/data/peer_messaging.go +++ b/node/consensus/data/peer_messaging.go @@ -19,7 +19,7 @@ import ( "google.golang.org/grpc/status" "source.quilibrium.com/quilibrium/monorepo/node/crypto" "source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/token/application" - grpc_internal "source.quilibrium.com/quilibrium/monorepo/node/internal/grpc" + qgrpc "source.quilibrium.com/quilibrium/monorepo/node/internal/grpc" "source.quilibrium.com/quilibrium/monorepo/node/p2p" "source.quilibrium.com/quilibrium/monorepo/node/protobufs" "source.quilibrium.com/quilibrium/monorepo/node/store" @@ -31,7 +31,7 @@ func (e *DataClockConsensusEngine) GetDataFrame( ctx context.Context, request *protobufs.GetDataFrameRequest, ) (*protobufs.DataFrameResponse, error) { - peerID, ok := grpc_internal.PeerIDFromContext(ctx) + peerID, ok := qgrpc.PeerIDFromContext(ctx) if !ok { return nil, status.Error(codes.Internal, "remote peer ID not found") } @@ -611,7 +611,7 @@ func (e *DataClockConsensusEngine) GetPublicChannelForProvingKey( ) after := time.After(20 * time.Second) go func() { - server := grpc.NewServer( + server := qgrpc.NewServer( grpc.MaxSendMsgSize(600*1024*1024), grpc.MaxRecvMsgSize(600*1024*1024), ) diff --git a/node/go.mod b/node/go.mod index 77c615d..bbc0953 100644 --- a/node/go.mod +++ b/node/go.mod @@ -26,6 +26,7 @@ replace github.com/cockroachdb/pebble => ../pebble require ( github.com/cockroachdb/pebble v0.0.0-20231210175920-b4d301aeb46a github.com/deiu/rdf2go v0.0.0-20240619132609-81222e324bb9 + github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 github.com/libp2p/go-libp2p v0.35.4 github.com/libp2p/go-libp2p-kad-dht v0.23.0 github.com/shopspring/decimal v1.4.0 @@ -41,6 +42,7 @@ require ( require ( filippo.io/edwards25519 v1.0.0-rc.1 // indirect github.com/deiu/gon3 v0.0.0-20230411081920-f0f8f879f597 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect github.com/libp2p/go-libp2p-routing-helpers v0.7.2 // indirect github.com/linkeddata/gojsonld v0.0.0-20170418210642-4f5db6791326 // indirect github.com/pion/datachannel v1.5.6 // indirect @@ -60,7 +62,6 @@ require ( github.com/pion/turn/v2 v2.1.6 // indirect github.com/pion/webrtc/v3 v3.2.40 // indirect github.com/rychipman/easylex v0.0.0-20160129204217-49ee7767142f // indirect - github.com/tatsushid/go-critbit v0.0.0-20180327152158-487ef94b52c1 // indirect go.opentelemetry.io/otel v1.16.0 // indirect go.opentelemetry.io/otel/metric v1.16.0 // indirect go.opentelemetry.io/otel/trace v1.16.0 // indirect @@ -98,8 +99,8 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect golang.org/x/term v0.21.0 - google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -121,10 +122,9 @@ require ( github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect - github.com/google/uuid v1.4.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/google/wire v0.5.0 github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -203,6 +203,6 @@ require ( golang.org/x/text v0.16.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect gonum.org/v1/gonum v0.13.0 // indirect - google.golang.org/grpc v1.58.2 + google.golang.org/grpc v1.63.2 lukechampine.com/blake3 v1.2.1 // indirect ) diff --git a/node/go.sum b/node/go.sum index 04e42b7..888035b 100644 --- a/node/go.sum +++ b/node/go.sum @@ -139,8 +139,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -157,9 +157,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -170,7 +169,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -186,8 +184,8 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= @@ -198,6 +196,10 @@ github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORR github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk= @@ -522,8 +524,6 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tatsushid/go-critbit v0.0.0-20180327152158-487ef94b52c1 h1:hCGjUxpUUmnZg0yt5aJPdRkDndH/1e8ptiV73urNUBQ= -github.com/tatsushid/go-critbit v0.0.0-20180327152158-487ef94b52c1/go.mod h1:iM17aYTnMeqDSIETK30CkHnWIAeogWYHFBz9ceCGaks= github.com/txaty/go-merkletree v0.2.2 h1:K5bHDFK+Q3KK+gEJeyTOECKuIwl/LVo4CI+cm0/p34g= github.com/txaty/go-merkletree v0.2.2/go.mod h1:w5HPEu7ubNw5LzS+91m+1/GtuZcWHKiPU3vEGi+ThJM= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -768,12 +768,12 @@ google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g= -google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -782,8 +782,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= -google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -793,8 +793,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/node/internal/grpc/constructors.go b/node/internal/grpc/constructors.go new file mode 100644 index 0000000..c02bbc9 --- /dev/null +++ b/node/internal/grpc/constructors.go @@ -0,0 +1,17 @@ +package grpc + +import ( + "context" + + "google.golang.org/grpc" +) + +// NewServer returns a new grpc.Server with the given options. +func NewServer(opts ...grpc.ServerOption) *grpc.Server { + return grpc.NewServer(ServerOptions(opts...)...) +} + +// DialContext returns a new grpc.ClientConn with the given target and options. +func DialContext(ctx context.Context, target string, opts ...grpc.DialOption) (*grpc.ClientConn, error) { + return grpc.DialContext(ctx, target, ClientOptions(opts...)...) +} diff --git a/node/internal/grpc/middleware.go b/node/internal/grpc/middleware.go new file mode 100644 index 0000000..568d19f --- /dev/null +++ b/node/internal/grpc/middleware.go @@ -0,0 +1,27 @@ +package grpc + +import "google.golang.org/grpc" + +// ServerOptions returns a list of grpc.ServerOptions which are commonly used. +func ServerOptions(opts ...grpc.ServerOption) []grpc.ServerOption { + return append(opts, + grpc.ChainUnaryInterceptor( + serverMetrics.UnaryServerInterceptor(), + ), + grpc.ChainStreamInterceptor( + serverMetrics.StreamServerInterceptor(), + ), + ) +} + +// ClientOptions returns a list of grpc.DialOptions which are commonly used. +func ClientOptions(opts ...grpc.DialOption) []grpc.DialOption { + return append(opts, + grpc.WithChainStreamInterceptor( + clientMetrics.StreamClientInterceptor(), + ), + grpc.WithChainUnaryInterceptor( + clientMetrics.UnaryClientInterceptor(), + ), + ) +} diff --git a/node/internal/grpc/observability.go b/node/internal/grpc/observability.go new file mode 100644 index 0000000..1f30756 --- /dev/null +++ b/node/internal/grpc/observability.go @@ -0,0 +1,16 @@ +package grpc + +import ( + prom_middleware "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus" + "github.com/prometheus/client_golang/prometheus" +) + +var ( + serverMetrics = prom_middleware.NewServerMetrics() + clientMetrics = prom_middleware.NewClientMetrics() +) + +func init() { + prometheus.MustRegister(serverMetrics) + prometheus.MustRegister(clientMetrics) +} diff --git a/node/internal/observability/blossomsub.go b/node/internal/observability/blossomsub.go new file mode 100644 index 0000000..ee417b3 --- /dev/null +++ b/node/internal/observability/blossomsub.go @@ -0,0 +1,285 @@ +package observability + +import ( + "encoding/base64" + + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" + "github.com/prometheus/client_golang/prometheus" + blossomsub "source.quilibrium.com/quilibrium/monorepo/go-libp2p-blossomsub" +) + +const blossomSubNamespace = "blossomsub" + +var binaryEncoding = base64.RawStdEncoding + +type blossomSubRawTracer struct { + addPeerTotal *prometheus.CounterVec + removePeerTotal prometheus.Counter + joinTotal *prometheus.CounterVec + leaveTotal *prometheus.CounterVec + graftTotal *prometheus.CounterVec + pruneTotal *prometheus.CounterVec + validateMessageTotal *prometheus.CounterVec + deliverMessageTotal *prometheus.CounterVec + rejectMessageTotal *prometheus.CounterVec + duplicateMessageTotal *prometheus.CounterVec + throttlePeerTotal prometheus.Counter + recvRPCTotal prometheus.Counter + sendRPCTotal prometheus.Counter + dropRPCTotal prometheus.Counter + undeliverableMessageTotal *prometheus.CounterVec +} + +var _ blossomsub.RawTracer = (*blossomSubRawTracer)(nil) + +// AddPeer implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) AddPeer(p peer.ID, proto protocol.ID) { + b.addPeerTotal.WithLabelValues(string(proto)).Inc() +} + +// RemovePeer implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) RemovePeer(p peer.ID) { + b.removePeerTotal.Inc() +} + +// Join implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) Join(bitmask []byte) { + b.joinTotal.WithLabelValues(binaryEncoding.EncodeToString(bitmask)).Inc() +} + +// Leave implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) Leave(bitmask []byte) { + b.leaveTotal.WithLabelValues(binaryEncoding.EncodeToString(bitmask)).Inc() +} + +// Graft implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) Graft(p peer.ID, bitmask []byte) { + b.graftTotal.WithLabelValues(binaryEncoding.EncodeToString(bitmask)).Inc() +} + +// Prune implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) Prune(p peer.ID, bitmask []byte) { + b.pruneTotal.WithLabelValues(binaryEncoding.EncodeToString(bitmask)).Inc() +} + +// ValidateMessage implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) ValidateMessage(msg *blossomsub.Message) { + b.validateMessageTotal.WithLabelValues(binaryEncoding.EncodeToString(msg.GetBitmask())).Inc() +} + +// SignMessage implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) DeliverMessage(msg *blossomsub.Message) { + b.deliverMessageTotal.WithLabelValues(binaryEncoding.EncodeToString(msg.GetBitmask())).Inc() +} + +// RejectMessage implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) RejectMessage(msg *blossomsub.Message, reason string) { + b.rejectMessageTotal.WithLabelValues(binaryEncoding.EncodeToString(msg.GetBitmask()), reason).Inc() +} + +// DuplicateMessage implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) DuplicateMessage(msg *blossomsub.Message) { + b.duplicateMessageTotal.WithLabelValues(binaryEncoding.EncodeToString(msg.GetBitmask())).Inc() +} + +// ThrottlePeer implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) ThrottlePeer(p peer.ID) { + b.throttlePeerTotal.Inc() +} + +// RecvRPC implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) RecvRPC(rpc *blossomsub.RPC) { + b.recvRPCTotal.Inc() +} + +// SendRPC implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) SendRPC(rpc *blossomsub.RPC, p peer.ID) { + b.sendRPCTotal.Inc() +} + +// DropRPC implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) DropRPC(rpc *blossomsub.RPC, p peer.ID) { + b.dropRPCTotal.Inc() +} + +// UndeliverableMessage implements blossomsub.RawTracer. +func (b *blossomSubRawTracer) UndeliverableMessage(msg *blossomsub.Message) { + b.undeliverableMessageTotal.WithLabelValues(binaryEncoding.EncodeToString(msg.GetBitmask())).Inc() +} + +var _ prometheus.Collector = (*blossomSubRawTracer)(nil) + +// Describe implements prometheus.Collector. +func (b *blossomSubRawTracer) Describe(ch chan<- *prometheus.Desc) { + b.addPeerTotal.Describe(ch) + b.removePeerTotal.Describe(ch) + b.joinTotal.Describe(ch) + b.leaveTotal.Describe(ch) + b.graftTotal.Describe(ch) + b.pruneTotal.Describe(ch) + b.validateMessageTotal.Describe(ch) + b.deliverMessageTotal.Describe(ch) + b.rejectMessageTotal.Describe(ch) + b.duplicateMessageTotal.Describe(ch) + b.throttlePeerTotal.Describe(ch) + b.recvRPCTotal.Describe(ch) + b.sendRPCTotal.Describe(ch) + b.dropRPCTotal.Describe(ch) + b.undeliverableMessageTotal.Describe(ch) +} + +// Collect implements prometheus.Collector. +func (b *blossomSubRawTracer) Collect(ch chan<- prometheus.Metric) { + b.addPeerTotal.Collect(ch) + b.removePeerTotal.Collect(ch) + b.joinTotal.Collect(ch) + b.leaveTotal.Collect(ch) + b.graftTotal.Collect(ch) + b.pruneTotal.Collect(ch) + b.validateMessageTotal.Collect(ch) + b.deliverMessageTotal.Collect(ch) + b.rejectMessageTotal.Collect(ch) + b.duplicateMessageTotal.Collect(ch) + b.throttlePeerTotal.Collect(ch) + b.recvRPCTotal.Collect(ch) + b.sendRPCTotal.Collect(ch) + b.dropRPCTotal.Collect(ch) + b.undeliverableMessageTotal.Collect(ch) +} + +type BlossomSubRawTracer interface { + blossomsub.RawTracer + prometheus.Collector +} + +func NewBlossomSubRawTracer() BlossomSubRawTracer { + b := &blossomSubRawTracer{ + addPeerTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "add_peer_total", + Help: "Total number of peers added to the mesh.", + }, + []string{"protocol"}, + ), + removePeerTotal: prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "remove_peer_total", + Help: "Total number of peers removed from the mesh.", + }, + ), + joinTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "join_total", + Help: "Total number of joins to the mesh.", + }, + []string{"bitmask"}, + ), + leaveTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "leave_total", + Help: "Total number of leaves from the mesh.", + }, + []string{"bitmask"}, + ), + graftTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "graft_total", + Help: "Total number of grafts.", + }, + []string{"bitmask"}, + ), + pruneTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "prune_total", + Help: "Total number of prunes.", + }, + []string{"bitmask"}, + ), + validateMessageTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "validate_message_total", + Help: "Total number of messages validated.", + }, + []string{"bitmask"}, + ), + deliverMessageTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "deliver_message_total", + Help: "Total number of messages delivered.", + }, + []string{"bitmask"}, + ), + rejectMessageTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "reject_message_total", + Help: "Total number of messages rejected.", + }, + []string{"bitmask", "reason"}, + ), + duplicateMessageTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "duplicate_message_total", + Help: "Total number of messages duplicated.", + }, + []string{"bitmask"}, + ), + throttlePeerTotal: prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "throttle_peer_total", + Help: "Total number of peers throttled.", + }, + ), + recvRPCTotal: prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "recv_rpc_total", + Help: "Total number of RPCs received.", + }, + ), + sendRPCTotal: prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "send_rpc_total", + Help: "Total number of RPCs sent.", + }, + ), + dropRPCTotal: prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "drop_rpc_total", + Help: "Total number of RPCs dropped.", + }, + ), + undeliverableMessageTotal: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: blossomSubNamespace, + Name: "undeliverable_message_total", + Help: "Total number of messages undeliverable.", + }, + []string{"bitmask"}, + ), + } + return b +} + +var globalBlossomSubRawTracer = NewBlossomSubRawTracer() + +func init() { + prometheus.MustRegister(globalBlossomSubRawTracer) +} + +func WithPrometheusRawTracer() blossomsub.Option { + return blossomsub.WithRawTracer(globalBlossomSubRawTracer) +} diff --git a/node/main.go b/node/main.go index 27f9c83..cef6c13 100644 --- a/node/main.go +++ b/node/main.go @@ -45,6 +45,7 @@ import ( "github.com/libp2p/go-libp2p/core/peer" "github.com/pbnjay/memory" "github.com/pkg/errors" + "github.com/prometheus/client_golang/prometheus/promhttp" "source.quilibrium.com/quilibrium/monorepo/node/app" "source.quilibrium.com/quilibrium/monorepo/node/config" qcrypto "source.quilibrium.com/quilibrium/monorepo/node/crypto" @@ -93,6 +94,11 @@ var ( "", "enable pprof server on specified address (e.g. localhost:6060)", ) + prometheusServer = flag.String( + "prometheus-server", + "", + "enable prometheus server on specified address (e.g. localhost:8080)", + ) nodeInfo = flag.Bool( "node-info", false, @@ -263,6 +269,14 @@ func main() { }() } + if *prometheusServer != "" && *core == 0 { + go func() { + mux := http.NewServeMux() + mux.Handle("/metrics", promhttp.Handler()) + log.Fatal(http.ListenAndServe(*prometheusServer, mux)) + }() + } + if *balance { config, err := config.LoadConfig(*configDirectory, "", false) if err != nil { diff --git a/node/p2p/blossomsub.go b/node/p2p/blossomsub.go index 7cdcf65..078d1dc 100644 --- a/node/p2p/blossomsub.go +++ b/node/p2p/blossomsub.go @@ -45,6 +45,8 @@ import ( blossomsub "source.quilibrium.com/quilibrium/monorepo/go-libp2p-blossomsub" "source.quilibrium.com/quilibrium/monorepo/go-libp2p-blossomsub/pb" "source.quilibrium.com/quilibrium/monorepo/node/config" + qgrpc "source.quilibrium.com/quilibrium/monorepo/node/internal/grpc" + "source.quilibrium.com/quilibrium/monorepo/node/internal/observability" "source.quilibrium.com/quilibrium/monorepo/node/p2p/internal" "source.quilibrium.com/quilibrium/monorepo/node/protobufs" ) @@ -418,6 +420,7 @@ func NewBlossomSub( OpportunisticGraftThreshold: 2, }, )) + blossomOpts = append(blossomOpts, observability.WithPrometheusRawTracer()) blossomOpts = append(blossomOpts, blossomsub.WithPeerFilter(internal.NewStaticPeerFilter( // We filter out the bootstrap peers explicitly from BlossomSub // as they do not subscribe to relevant topics anymore. @@ -917,7 +920,7 @@ func (b *BlossomSub) GetDirectChannel(key []byte, purpose string) ( // Open question: should we prefix this so a node can run both in mainnet and // testnet? Feels like a bad idea and would be preferable to discourage. - dialCtx, err = grpc.DialContext( + dialCtx, err = qgrpc.DialContext( b.ctx, base58.Encode(key), grpc.WithDialer( diff --git a/node/rpc/data_worker_ipc_server.go b/node/rpc/data_worker_ipc_server.go index f5acb13..7a8ee2f 100644 --- a/node/rpc/data_worker_ipc_server.go +++ b/node/rpc/data_worker_ipc_server.go @@ -9,18 +9,18 @@ import ( "syscall" "time" - "golang.org/x/crypto/sha3" - "source.quilibrium.com/quilibrium/monorepo/node/config" - "source.quilibrium.com/quilibrium/monorepo/node/crypto" - "source.quilibrium.com/quilibrium/monorepo/node/p2p" - pcrypto "github.com/libp2p/go-libp2p/core/crypto" "github.com/multiformats/go-multiaddr" mn "github.com/multiformats/go-multiaddr/net" "github.com/pkg/errors" "go.uber.org/zap" + "golang.org/x/crypto/sha3" "google.golang.org/grpc" "google.golang.org/grpc/reflection" + "source.quilibrium.com/quilibrium/monorepo/node/config" + "source.quilibrium.com/quilibrium/monorepo/node/crypto" + qgrpc "source.quilibrium.com/quilibrium/monorepo/node/internal/grpc" + "source.quilibrium.com/quilibrium/monorepo/node/p2p" "source.quilibrium.com/quilibrium/monorepo/node/protobufs" ) @@ -109,7 +109,7 @@ func NewDataWorkerIPCServer( } func (r *DataWorkerIPCServer) Start() error { - s := grpc.NewServer( + s := qgrpc.NewServer( grpc.MaxRecvMsgSize(600*1024*1024), grpc.MaxSendMsgSize(600*1024*1024), ) diff --git a/node/rpc/node_rpc_server.go b/node/rpc/node_rpc_server.go index 9da2102..f59353e 100644 --- a/node/rpc/node_rpc_server.go +++ b/node/rpc/node_rpc_server.go @@ -8,13 +8,9 @@ import ( "strings" "time" - "source.quilibrium.com/quilibrium/monorepo/node/config" - "source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/token/application" - + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/iden3/go-iden3-crypto/poseidon" "github.com/libp2p/go-libp2p/core/peer" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/multiformats/go-multiaddr" mn "github.com/multiformats/go-multiaddr/net" "github.com/pkg/errors" @@ -24,8 +20,11 @@ import ( "google.golang.org/grpc/reflection" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/anypb" + "source.quilibrium.com/quilibrium/monorepo/node/config" "source.quilibrium.com/quilibrium/monorepo/node/consensus/master" "source.quilibrium.com/quilibrium/monorepo/node/execution" + "source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/token/application" + qgrpc "source.quilibrium.com/quilibrium/monorepo/node/internal/grpc" "source.quilibrium.com/quilibrium/monorepo/node/keys" "source.quilibrium.com/quilibrium/monorepo/node/p2p" "source.quilibrium.com/quilibrium/monorepo/node/protobufs" @@ -379,7 +378,7 @@ func NewRPCServer( } func (r *RPCServer) Start() error { - s := grpc.NewServer( + s := qgrpc.NewServer( grpc.MaxRecvMsgSize(600*1024*1024), grpc.MaxSendMsgSize(600*1024*1024), ) @@ -420,13 +419,13 @@ func (r *RPCServer) Start() error { go func() { mux := runtime.NewServeMux() - opts := []grpc.DialOption{ + opts := qgrpc.ClientOptions( grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(600*1024*1024), grpc.MaxCallSendMsgSize(600*1024*1024), ), - } + ) if err := protobufs.RegisterNodeServiceHandlerFromEndpoint( context.Background(),