From 88e5acf3c6a522816bd13618ac077973ade0c145 Mon Sep 17 00:00:00 2001 From: Vladislav Byrgazov Date: Thu, 15 Aug 2024 13:51:07 +0500 Subject: [PATCH] Added pprof config Signed-off-by: Vladislav Byrgazov --- .golangci.yml | 2 +- README.md | 2 ++ main.go | 12 +++++++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 3dd6e6e..b2de32d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -36,7 +36,7 @@ linters-settings: dupl: threshold: 150 funlen: - Lines: 115 + Lines: 130 Statements: 60 goconst: min-len: 2 diff --git a/README.md b/README.md index 94cf0de..4b5baaf 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ docker build . * `NSM_REGISTER_SERVICE` - if true then registers network service on startup (default: "true") * `NSM_OPEN_TELEMETRY_ENDPOINT` - OpenTelemetry Collector Endpoint (default: "otel-collector.observability.svc.cluster.local:4317") * `NSM_METRICS_EXPORT_INTERVAL` - interval between mertics exports (default: "10s") +* `NSM_PPROF_ENABLED` - is pprof enabled (default: "false") +* `NSM_PPROF_LISTEN_ON` - pprof URL to ListenAndServe (default: "localhost:6060") # Testing diff --git a/main.go b/main.go index 6103b43..80057a0 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,6 @@ // Copyright (c) 2021-2023 Nordix Foundation. // -// Copyright (c) 2023 Cisco Foundation. +// Copyright (c) 2023-2024 Cisco Foundation. // // Copyright (c) 2024 OpenInfra Foundation Europe. All rights reserved. // @@ -77,6 +77,7 @@ import ( "github.com/networkservicemesh/sdk/pkg/tools/log" "github.com/networkservicemesh/sdk/pkg/tools/log/logruslogger" "github.com/networkservicemesh/sdk/pkg/tools/opentelemetry" + "github.com/networkservicemesh/sdk/pkg/tools/pprofutils" "github.com/networkservicemesh/sdk/pkg/tools/spiffejwt" "github.com/networkservicemesh/sdk/pkg/tools/token" "github.com/networkservicemesh/sdk/pkg/tools/tracing" @@ -104,6 +105,8 @@ type Config struct { RegisterService bool `default:"true" desc:"if true then registers network service on startup" split_words:"true"` OpenTelemetryEndpoint string `default:"otel-collector.observability.svc.cluster.local:4317" desc:"OpenTelemetry Collector Endpoint" split_words:"true"` MetricsExportInterval time.Duration `default:"10s" desc:"interval between mertics exports" split_words:"true"` + PprofEnabled bool `default:"false" desc:"is pprof enabled" split_words:"true"` + PprofListenOn string `default:"localhost:6060" desc:"pprof URL to ListenAndServe" split_words:"true"` } // Process prints and processes env to config @@ -300,6 +303,13 @@ func main() { }() } + // ******************************************************************************** + // Configure pprof + // ******************************************************************************** + if config.PprofEnabled { + go pprofutils.ListenAndServe(ctx, config.PprofListenOn) + } + // ******************************************************************************** log.FromContext(ctx).Infof("executing phase 2: run vpp and get a connection to it (time since start: %s)", time.Since(starttime)) // ********************************************************************************