mirror of https://github.com/status-im/go-waku.git
feat: add /debug/pprof endpoint when using --pprof flag
This commit is contained in:
parent
956e1eecac
commit
87ce20d38e
|
@ -427,4 +427,9 @@ var (
|
||||||
Usage: "Enable access to REST HTTP Private API",
|
Usage: "Enable access to REST HTTP Private API",
|
||||||
Destination: &options.RESTServer.Private,
|
Destination: &options.RESTServer.Private,
|
||||||
}
|
}
|
||||||
|
PProf = &cli.BoolFlag{
|
||||||
|
Name: "pprof",
|
||||||
|
Usage: "provides runtime profiling data at /debug/pprof in both REST and RPC servers if they're enabled",
|
||||||
|
Destination: &options.PProf,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -87,6 +87,7 @@ func main() {
|
||||||
RESTRelayCacheCapacity,
|
RESTRelayCacheCapacity,
|
||||||
RESTAdmin,
|
RESTAdmin,
|
||||||
RESTPrivate,
|
RESTPrivate,
|
||||||
|
PProf,
|
||||||
}
|
}
|
||||||
|
|
||||||
rlnFlags := rlnFlags()
|
rlnFlags := rlnFlags()
|
||||||
|
|
|
@ -360,7 +360,7 @@ func Execute(options Options) {
|
||||||
|
|
||||||
var rpcServer *rpc.WakuRpc
|
var rpcServer *rpc.WakuRpc
|
||||||
if options.RPCServer.Enable {
|
if options.RPCServer.Enable {
|
||||||
rpcServer = rpc.NewWakuRpc(wakuNode, options.RPCServer.Address, options.RPCServer.Port, options.RPCServer.Admin, options.RPCServer.Private, options.RPCServer.RelayCacheCapacity, logger)
|
rpcServer = rpc.NewWakuRpc(wakuNode, options.RPCServer.Address, options.RPCServer.Port, options.RPCServer.Admin, options.RPCServer.Private, options.PProf, options.RPCServer.RelayCacheCapacity, logger)
|
||||||
rpcServer.Start()
|
rpcServer.Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,7 +369,7 @@ func Execute(options Options) {
|
||||||
var restServer *rest.WakuRest
|
var restServer *rest.WakuRest
|
||||||
if options.RESTServer.Enable {
|
if options.RESTServer.Enable {
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
restServer = rest.NewWakuRest(wakuNode, options.RESTServer.Address, options.RESTServer.Port, options.RESTServer.Admin, options.RESTServer.Private, options.RESTServer.RelayCacheCapacity, logger)
|
restServer = rest.NewWakuRest(wakuNode, options.RESTServer.Address, options.RESTServer.Port, options.RESTServer.Admin, options.RESTServer.Private, options.PProf, options.RESTServer.RelayCacheCapacity, logger)
|
||||||
restServer.Start(ctx, &wg)
|
restServer.Start(ctx, &wg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -159,6 +159,7 @@ type Options struct {
|
||||||
NAT string
|
NAT string
|
||||||
PersistPeers bool
|
PersistPeers bool
|
||||||
UserAgent string
|
UserAgent string
|
||||||
|
PProf bool
|
||||||
|
|
||||||
PeerExchange PeerExchangeOptions
|
PeerExchange PeerExchangeOptions
|
||||||
Websocket WSOptions
|
Websocket WSOptions
|
||||||
|
|
|
@ -247,7 +247,7 @@ func (w *WakuRelay) SubscribeToTopic(ctx context.Context, topic string) (*Subscr
|
||||||
w.bcaster.Register(&topic, subscription.C)
|
w.bcaster.Register(&topic, subscription.C)
|
||||||
}
|
}
|
||||||
|
|
||||||
go w.subscribeToTopic(topic, subscription, sub)
|
go w.subscribeToTopic(ctx, topic, subscription, sub)
|
||||||
|
|
||||||
return subscription, nil
|
return subscription, nil
|
||||||
}
|
}
|
||||||
|
@ -307,8 +307,8 @@ func (w *WakuRelay) nextMessage(ctx context.Context, sub *pubsub.Subscription) <
|
||||||
return msgChannel
|
return msgChannel
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *WakuRelay) subscribeToTopic(t string, subscription *Subscription, sub *pubsub.Subscription) {
|
func (w *WakuRelay) subscribeToTopic(ctx context.Context, t string, subscription *Subscription, sub *pubsub.Subscription) {
|
||||||
ctx, err := tag.New(context.Background(), tag.Insert(metrics.KeyType, "relay"))
|
ctx, err := tag.New(ctx, tag.Insert(metrics.KeyType, "relay"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.log.Error("creating tag map", zap.Error(err))
|
w.log.Error("creating tag map", zap.Error(err))
|
||||||
return
|
return
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/pprof"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
@ -20,12 +21,17 @@ type WakuRest struct {
|
||||||
relayService *RelayService
|
relayService *RelayService
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWakuRest(node *node.WakuNode, address string, port int, enableAdmin bool, enablePrivate bool, relayCacheCapacity int, log *zap.Logger) *WakuRest {
|
func NewWakuRest(node *node.WakuNode, address string, port int, enableAdmin bool, enablePrivate bool, enablePProf bool, relayCacheCapacity int, log *zap.Logger) *WakuRest {
|
||||||
wrpc := new(WakuRest)
|
wrpc := new(WakuRest)
|
||||||
wrpc.log = log.Named("rest")
|
wrpc.log = log.Named("rest")
|
||||||
|
|
||||||
mux := mux.NewRouter()
|
mux := mux.NewRouter()
|
||||||
|
|
||||||
|
if enablePProf {
|
||||||
|
mux.PathPrefix("/debug/").Handler(http.DefaultServeMux)
|
||||||
|
mux.HandleFunc("/debug/pprof/", pprof.Index)
|
||||||
|
}
|
||||||
|
|
||||||
_ = NewDebugService(node, mux)
|
_ = NewDebugService(node, mux)
|
||||||
relayService := NewRelayService(node, mux, relayCacheCapacity, log)
|
relayService := NewRelayService(node, mux, relayCacheCapacity, log)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ func TestWakuRest(t *testing.T) {
|
||||||
n, err := node.New(context.Background(), options)
|
n, err := node.New(context.Background(), options)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rpc := NewWakuRest(n, "127.0.0.1", 8080, true, true, 10, utils.Logger())
|
rpc := NewWakuRest(n, "127.0.0.1", 8080, true, true, false, 10, utils.Logger())
|
||||||
require.NotNil(t, rpc.server)
|
require.NotNil(t, rpc.server)
|
||||||
require.Equal(t, rpc.server.Addr, "127.0.0.1:8080")
|
require.Equal(t, rpc.server.Addr, "127.0.0.1:8080")
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/http/pprof"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
@ -24,7 +25,7 @@ type WakuRpc struct {
|
||||||
adminService *AdminService
|
adminService *AdminService
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWakuRpc(node *node.WakuNode, address string, port int, enableAdmin bool, enablePrivate bool, cacheCapacity int, log *zap.Logger) *WakuRpc {
|
func NewWakuRpc(node *node.WakuNode, address string, port int, enableAdmin bool, enablePrivate bool, enablePProf bool, cacheCapacity int, log *zap.Logger) *WakuRpc {
|
||||||
wrpc := new(WakuRpc)
|
wrpc := new(WakuRpc)
|
||||||
wrpc.log = log.Named("rpc")
|
wrpc.log = log.Named("rpc")
|
||||||
|
|
||||||
|
@ -39,6 +40,11 @@ func NewWakuRpc(node *node.WakuNode, address string, port int, enableAdmin bool,
|
||||||
wrpc.log.Info("served request", zap.String("path", r.URL.Path), zap.Duration("duration", time.Since(t)))
|
wrpc.log.Info("served request", zap.String("path", r.URL.Path), zap.Duration("duration", time.Since(t)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if enablePProf {
|
||||||
|
mux.PathPrefix("/debug/").Handler(http.DefaultServeMux)
|
||||||
|
mux.HandleFunc("/debug/pprof/", pprof.Index)
|
||||||
|
}
|
||||||
|
|
||||||
debugService := NewDebugService(node)
|
debugService := NewDebugService(node)
|
||||||
err := s.RegisterService(debugService, "Debug")
|
err := s.RegisterService(debugService, "Debug")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -109,6 +115,7 @@ func (r *WakuRpc) Start() {
|
||||||
if r.privateService != nil {
|
if r.privateService != nil {
|
||||||
go r.privateService.Start()
|
go r.privateService.Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
_ = r.server.ListenAndServe()
|
_ = r.server.ListenAndServe()
|
||||||
}()
|
}()
|
||||||
|
|
|
@ -14,7 +14,7 @@ func TestWakuRpc(t *testing.T) {
|
||||||
n, err := node.New(context.Background(), options)
|
n, err := node.New(context.Background(), options)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
rpc := NewWakuRpc(n, "127.0.0.1", 8080, true, true, 30, utils.Logger())
|
rpc := NewWakuRpc(n, "127.0.0.1", 8080, true, true, false, 30, utils.Logger())
|
||||||
require.NotNil(t, rpc.server)
|
require.NotNil(t, rpc.server)
|
||||||
require.Equal(t, rpc.server.Addr, "127.0.0.1:8080")
|
require.Equal(t, rpc.server.Addr, "127.0.0.1:8080")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue