Skip to content

Commit

Permalink
refactored after review comments
Browse files Browse the repository at this point in the history
Signed-off-by: Mikhail Avramenko <avramenkomihail15@gmail.com>
  • Loading branch information
Mixaster995 committed Nov 23, 2021
1 parent c2657b5 commit 4098b9f
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 48 deletions.
41 changes: 15 additions & 26 deletions internal/manager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,12 @@ import (
"github.com/networkservicemesh/sdk/pkg/networkservice/common/authorize"
"github.com/networkservicemesh/sdk/pkg/tools/grpcutils"
"github.com/networkservicemesh/sdk/pkg/tools/log"
"github.com/networkservicemesh/sdk/pkg/tools/log/logruslogger"
"github.com/networkservicemesh/sdk/pkg/tools/log/spanlogger"
"github.com/networkservicemesh/sdk/pkg/tools/opentracing"
"github.com/networkservicemesh/sdk/pkg/tools/spiffejwt"
"github.com/networkservicemesh/sdk/pkg/tools/token"

"github.com/networkservicemesh/cmd-nsmgr/internal/config"
"github.com/networkservicemesh/cmd-nsmgr/internal/utils"
)

const (
Expand All @@ -54,7 +53,7 @@ const (

type manager struct {
ctx context.Context
traceCtx context.Context
traceLogger log.Logger
configuration *config.Config
cancelFunc context.CancelFunc
mgr nsmgr.Nsmgr
Expand Down Expand Up @@ -85,25 +84,24 @@ func (m *manager) initSecurity() (err error) {
}

// RunNsmgr - start nsmgr.
func RunNsmgr(ctx, traceCtx context.Context, configuration *config.Config) error {
func RunNsmgr(ctx context.Context, configuration *config.Config) error {
starttime := time.Now()

m := &manager{
configuration: configuration,
}

log.EnableTracing(true)
traceCtx, finish := withTraceLogger(traceCtx, "start")
traceCtx := log.WithFields(ctx, map[string]interface{}{"cmd": "Nsmgr"})
traceLogger, finish := utils.GetTraceLogger(traceCtx, "start")
defer finish()

traceCtx = log.WithFields(traceCtx, map[string]interface{}{"cmd": "Nsmgr"})
m := &manager{
configuration: configuration,
traceLogger: traceLogger,
}

// Context to use for all things started in main
m.ctx, m.cancelFunc = context.WithCancel(ctx)
m.traceCtx = traceCtx

if err := m.initSecurity(); err != nil {
log.FromContext(m.traceCtx).Errorf("failed to create new spiffe TLS Peer %v", err)
m.traceLogger.Errorf("failed to create new spiffe TLS Peer %v", err)
return err
}

Expand Down Expand Up @@ -164,25 +162,16 @@ func RunNsmgr(ctx, traceCtx context.Context, configuration *config.Config) error
// Create GRPC server
m.startServers(m.server)

log.FromContext(m.traceCtx).Infof("Startup completed in %v", time.Since(starttime))
m.traceLogger.Infof("Startup completed in %v", time.Since(starttime))
starttime = time.Now()
<-m.ctx.Done()

log.FromContext(m.traceCtx).Infof("Exit requested. Uptime: %v", time.Since(starttime))
m.traceLogger.Infof("Exit requested. Uptime: %v", time.Since(starttime))
// If we here we need to call Stop
m.Stop()
return nil
}

func withTraceLogger(ctx context.Context, operation string) (c context.Context, f func()) {
ctx, sLogger, span, sFinish := spanlogger.FromContext(ctx, operation)
ctx, lLogger, lFinish := logruslogger.FromSpan(ctx, span, operation)
return log.WithLog(ctx, sLogger, lLogger), func() {
sFinish()
lFinish()
}
}

func createListenFolders(configuration *config.Config) {
for i := 0; i < len(configuration.ListenOn); i++ {
u := &configuration.ListenOn[i]
Expand All @@ -199,7 +188,7 @@ func waitErrChan(ctx context.Context, errChan <-chan error, m *manager) {
case err := <-errChan:
// We need to cal cancel global context, since it could be multiple context of this kind
m.cancelFunc()
log.FromContext(m.traceCtx).Warnf("failed to serve: %v", err)
m.traceLogger.Warnf("failed to serve: %v", err)
}
}

Expand All @@ -220,7 +209,7 @@ func (m *manager) getPublicURL() string {
}
addrs, err := net.InterfaceAddrs()
if err != nil {
log.FromContext(m.traceCtx).Warn(err.Error())
m.traceLogger.Warn(err.Error())
return u.String()
}
for _, a := range addrs {
Expand All @@ -242,7 +231,7 @@ func (m *manager) startServers(server *grpc.Server) {
go func() {
// Create a required number of servers
errChan := grpcutils.ListenAndServe(m.ctx, listenURL, server)
log.FromContext(m.traceCtx).Infof("NSMGR Listening on: %v", listenURL.String())
m.traceLogger.Infof("NSMGR Listening on: %v", listenURL.String())
// For public schemas we need to perform registation of nsmgr into registry.
wg.Done()

Expand Down
37 changes: 37 additions & 0 deletions internal/utils/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright (c) 2021 Doc.ai and/or its affiliates.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package utils contains useful tools
package utils

import (
"context"

"github.com/networkservicemesh/sdk/pkg/tools/log"
"github.com/networkservicemesh/sdk/pkg/tools/log/logruslogger"
"github.com/networkservicemesh/sdk/pkg/tools/log/spanlogger"
)

// GetTraceLogger creates grouped logger with span and logrus loggers
func GetTraceLogger(ctx context.Context, operation string) (logger log.Logger, cancelFunc func()) {
ctx, sLogger, span, sFinish := spanlogger.FromContext(ctx, operation)
ctx, lLogger, lFinish := logruslogger.FromSpan(ctx, span, operation)
ctxWithLog := log.WithLog(ctx, sLogger, lLogger)
return log.FromContext(ctxWithLog), func() {
sFinish()
lFinish()
}
}
31 changes: 10 additions & 21 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,10 @@ import (

"github.com/networkservicemesh/cmd-nsmgr/internal/config"
"github.com/networkservicemesh/cmd-nsmgr/internal/manager"
"github.com/networkservicemesh/cmd-nsmgr/internal/utils"
"github.com/networkservicemesh/sdk/pkg/tools/debug"
"github.com/networkservicemesh/sdk/pkg/tools/jaeger"
"github.com/networkservicemesh/sdk/pkg/tools/log"
"github.com/networkservicemesh/sdk/pkg/tools/log/logruslogger"
"github.com/networkservicemesh/sdk/pkg/tools/log/spanlogger"
)

func main() {
Expand All @@ -49,16 +48,15 @@ func main() {
)
defer cancel()

traceCtx, finish := withTraceLogger(ctx, "nsmgr")
traceCtx := log.WithFields(ctx, map[string]interface{}{"cmd": os.Args[:1]})
traceLogger, finish := utils.GetTraceLogger(traceCtx, "nsmgr")
defer finish()

traceCtx = log.WithFields(traceCtx, map[string]interface{}{"cmd": os.Args[:1]})

// ********************************************************************************
// Debug self if necessary
// ********************************************************************************
if err := debug.Self(); err != nil {
log.FromContext(traceCtx).Infof("%s", err)
traceLogger.Infof("%s", err)
}

// ********************************************************************************
Expand All @@ -72,31 +70,22 @@ func main() {
// Get cfg from environment
cfg := &config.Config{}
if err := envconfig.Usage("nsm", cfg); err != nil {
log.FromContext(traceCtx).Fatal(err)
traceLogger.Fatal(err)
}
if err := envconfig.Process("nsm", cfg); err != nil {
log.FromContext(traceCtx).Fatalf("error processing cfg from env: %+v", err)
traceLogger.Fatalf("error processing cfg from env: %+v", err)
}

log.FromContext(traceCtx).Infof("Using configuration: %v", cfg)
traceLogger.Infof("Using configuration: %v", cfg)

level, err := logrus.ParseLevel(cfg.LogLevel)
if err != nil {
log.FromContext(traceCtx).Fatalf("invalid log level %s", cfg.LogLevel)
traceLogger.Fatalf("invalid log level %s", cfg.LogLevel)
}
logrus.SetLevel(level)

err = manager.RunNsmgr(ctx, traceCtx, cfg)
err = manager.RunNsmgr(ctx, cfg)
if err != nil {
log.FromContext(traceCtx).Fatalf("error executing rootCmd: %v", err)
}
}

func withTraceLogger(ctx context.Context, operation string) (c context.Context, f func()) {
ctx, sLogger, span, sFinish := spanlogger.FromContext(ctx, operation)
ctx, lLogger, lFinish := logruslogger.FromSpan(ctx, span, operation)
return log.WithLog(ctx, sLogger, lLogger), func() {
sFinish()
lFinish()
traceLogger.Fatalf("error executing rootCmd: %v", err)
}
}
2 changes: 1 addition & 1 deletion test/test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ func (s *testSetup) Start() {
s.init()

go func() {
e := manager.RunNsmgr(s.ctx, s.ctx, s.configuration)
e := manager.RunNsmgr(s.ctx, s.configuration)
require.Nil(s.t, e)
}()

Expand Down

0 comments on commit 4098b9f

Please sign in to comment.