From 9e0cf01523d35dee6f7fdea47a2366ec3c34c072 Mon Sep 17 00:00:00 2001 From: ersonp Date: Tue, 11 May 2021 22:23:31 +0530 Subject: [PATCH 1/2] Setup node VM --- pkg/setup/node.go | 13 ++----------- pkg/setup/node_test.go | 6 +++++- pkg/setup/rpc_gateway.go | 2 +- pkg/setup/setupmetrics/empty.go | 5 +++++ pkg/setup/setupmetrics/victoria_metrics.go | 20 ++++++++++++++++++++ 5 files changed, 33 insertions(+), 13 deletions(-) diff --git a/pkg/setup/node.go b/pkg/setup/node.go index 7ce9cbcf69..7c6b5c4199 100644 --- a/pkg/setup/node.go +++ b/pkg/setup/node.go @@ -106,19 +106,10 @@ func (sn *Node) Serve(ctx context.Context, m setupmetrics.Metrics) error { // * Intermediary rules are broadcasted to the intermediary routers. // * Edge rules are broadcasted to the responding router. // * Edge rules is returned (to the initiating router). -func CreateRouteGroup(ctx context.Context, dialer snet.Dialer, biRt routing.BidirectionalRoute) (resp routing.EdgeRules, err error) { - start := time.Now() +func CreateRouteGroup(ctx context.Context, dialer snet.Dialer, biRt routing.BidirectionalRoute, metrics setupmetrics.Metrics) (resp routing.EdgeRules, err error) { log := logging.MustGetLogger(fmt.Sprintf("request:%s->%s", biRt.Desc.SrcPK(), biRt.Desc.DstPK())) log.Info("Processing request.") - defer func() { - elapsed := time.Since(start) - log := log.WithField("elapsed", elapsed) - if err != nil { - log.WithError(err).Warn("Request processed with error.") - } else { - log.Info("Request processed successfully.") - } - }() + defer metrics.RecordRoute()(&err) // Ensure bi routes input is valid. if err = biRt.Check(); err != nil { diff --git a/pkg/setup/node_test.go b/pkg/setup/node_test.go index 0ccd78b08c..560c57f270 100644 --- a/pkg/setup/node_test.go +++ b/pkg/setup/node_test.go @@ -18,6 +18,7 @@ import ( "github.com/stretchr/testify/require" "github.com/skycoin/skywire/pkg/routing" + "github.com/skycoin/skywire/pkg/setup/setupmetrics" ) func TestMain(m *testing.M) { @@ -74,11 +75,14 @@ func TestCreateRouteGroup(t *testing.T) { // arrange: mock dialer dialer := newMockDialer(t, routers) + // arrange: mock dialer + metrics := setupmetrics.NewEmpty() + // arrange: bidirectional route input biRt := biRouteFromKeys(tc.fwdPKs, tc.revPKs, tc.SrcPort, tc.DstPort) // act - resp, err := CreateRouteGroup(context.TODO(), dialer, biRt) + resp, err := CreateRouteGroup(context.TODO(), dialer, biRt, metrics) if err == nil { // if successful, inject response (response edge rules) to responding router var ok bool diff --git a/pkg/setup/rpc_gateway.go b/pkg/setup/rpc_gateway.go index 7b5a30da2d..dd8ebf7502 100644 --- a/pkg/setup/rpc_gateway.go +++ b/pkg/setup/rpc_gateway.go @@ -38,7 +38,7 @@ func (g *RPCGateway) DialRouteGroup(route routing.BidirectionalRoute, rules *rou } }() - initRules, err := CreateRouteGroup(ctx, g.Dialer, route) + initRules, err := CreateRouteGroup(ctx, g.Dialer, route, g.Metrics) if err != nil { return err } diff --git a/pkg/setup/setupmetrics/empty.go b/pkg/setup/setupmetrics/empty.go index b20a66056e..c2ae375c87 100644 --- a/pkg/setup/setupmetrics/empty.go +++ b/pkg/setup/setupmetrics/empty.go @@ -16,3 +16,8 @@ type Empty struct{} func (Empty) RecordRequest() func(*routing.EdgeRules, *error) { return func(*routing.EdgeRules, *error) {} } + +// RecordRoute implements `Metrics`. +func (Empty) RecordRoute() func(*error) { + return func(*error) {} +} diff --git a/pkg/setup/setupmetrics/victoria_metrics.go b/pkg/setup/setupmetrics/victoria_metrics.go index 6c35a137a9..d0f02dc15c 100644 --- a/pkg/setup/setupmetrics/victoria_metrics.go +++ b/pkg/setup/setupmetrics/victoria_metrics.go @@ -12,6 +12,7 @@ import ( // Metrics collects metrics in prometheus format. type Metrics interface { RecordRequest() func(*routing.EdgeRules, *error) + RecordRoute() func(*error) } // VictoriaMetrics implements `Metrics` using Victoria Metrics. @@ -19,6 +20,9 @@ type VictoriaMetrics struct { activeRequests *metricsutil.VictoriaMetricsIntGaugeWrapper reqDurationsFailed *metrics.Histogram reqDurationsSuccesses *metrics.Histogram + routesSetup *metricsutil.VictoriaMetricsIntGaugeWrapper + routesSetupFailed *metricsutil.VictoriaMetricsIntGaugeWrapper + routesSetupDuration *metrics.Histogram } // NewVictoriaMetrics returns the Victoria Metrics implementation of Metrics. @@ -27,6 +31,9 @@ func NewVictoriaMetrics() *VictoriaMetrics { activeRequests: metricsutil.NewVictoriaMetricsIntGauge("active_request_count"), reqDurationsFailed: metrics.GetOrCreateHistogram("request_durations{success=\"true\"}"), reqDurationsSuccesses: metrics.GetOrCreateHistogram("request_durations{success=\"false\"}"), + routesSetup: metricsutil.NewVictoriaMetricsIntGauge("no_of_route_setups"), + routesSetupFailed: metricsutil.NewVictoriaMetricsIntGauge("no_of_failed_route_setups"), + routesSetupDuration: metrics.GetOrCreateHistogram("route_setup{success=\"true\"}"), } } @@ -45,3 +52,16 @@ func (m *VictoriaMetrics) RecordRequest() func(rules *routing.EdgeRules, err *er m.activeRequests.Dec() } } + +// RecordRoute implements `Metrics`. +func (m *VictoriaMetrics) RecordRoute() func(err *error) { + start := time.Now() + m.routesSetup.Inc() + + return func(err *error) { + m.routesSetupDuration.UpdateDuration(start) + if *err != nil { + m.routesSetupFailed.Inc() + } + } +} From 61e9079cda89fee92b2bd66be6a3f865fa42e983 Mon Sep 17 00:00:00 2001 From: ersonp Date: Tue, 11 May 2021 22:27:06 +0530 Subject: [PATCH 2/2] Minor updates --- cmd/skywire-visor/commands/root.go | 5 ++--- go.sum | 4 +++- pkg/setup/setupmetrics/victoria_metrics.go | 2 +- pkg/visor/hypervisorconfig/config.go | 3 +-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/skywire-visor/commands/root.go b/cmd/skywire-visor/commands/root.go index a3dfc251ed..f85a4c74c6 100644 --- a/cmd/skywire-visor/commands/root.go +++ b/cmd/skywire-visor/commands/root.go @@ -2,8 +2,10 @@ package commands import ( "context" + "embed" "fmt" "io" + "io/fs" "io/ioutil" "net/http" _ "net/http/pprof" // nolint:gosec // https://golang.org/doc/diagnostics.html#profiling @@ -13,9 +15,6 @@ import ( "syscall" "time" - "embed" - "io/fs" - "github.com/pkg/profile" "github.com/skycoin/dmsg/buildinfo" "github.com/skycoin/dmsg/cmdutil" diff --git a/go.sum b/go.sum index 6fc55219eb..e3a49dc301 100644 --- a/go.sum +++ b/go.sum @@ -275,7 +275,6 @@ golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcm golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= @@ -328,6 +327,7 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -354,10 +354,12 @@ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= diff --git a/pkg/setup/setupmetrics/victoria_metrics.go b/pkg/setup/setupmetrics/victoria_metrics.go index d0f02dc15c..c9ec56cc9d 100644 --- a/pkg/setup/setupmetrics/victoria_metrics.go +++ b/pkg/setup/setupmetrics/victoria_metrics.go @@ -33,7 +33,7 @@ func NewVictoriaMetrics() *VictoriaMetrics { reqDurationsSuccesses: metrics.GetOrCreateHistogram("request_durations{success=\"false\"}"), routesSetup: metricsutil.NewVictoriaMetricsIntGauge("no_of_route_setups"), routesSetupFailed: metricsutil.NewVictoriaMetricsIntGauge("no_of_failed_route_setups"), - routesSetupDuration: metrics.GetOrCreateHistogram("route_setup{success=\"true\"}"), + routesSetupDuration: metrics.GetOrCreateHistogram("route_setup_duration{success=\"true\"}"), } } diff --git a/pkg/visor/hypervisorconfig/config.go b/pkg/visor/hypervisorconfig/config.go index 1b165cc331..637e815a89 100644 --- a/pkg/visor/hypervisorconfig/config.go +++ b/pkg/visor/hypervisorconfig/config.go @@ -3,14 +3,13 @@ package hypervisorconfig import ( "encoding/hex" "encoding/json" + "io/fs" "log" "net/http" "os" "path/filepath" "time" - "io/fs" - "github.com/skycoin/dmsg/cipher" "github.com/skycoin/skywire/pkg/skyenv"