Passed
Push — main ( 3ec306...c5cfaa )
by Yume
01:53 queued 44s
created

logger.ConvertSentryLevel   C

Complexity

Conditions 10

Size

Total Lines 20
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
eloc 20
dl 0
loc 20
rs 5.9999
c 0
b 0
f 0
nop 1

How to fix   Complexity   

Complexity

Complex classes like logger.ConvertSentryLevel often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
package logger
2
3
import (
4
	"strings"
5
6
	"github.com/getsentry/sentry-go"
7
	"github.com/memnix/memnix-rest/config"
8
	"github.com/uptrace/opentelemetry-go-extra/otelzap"
9
	"go.uber.org/zap"
10
	"go.uber.org/zap/zapcore"
11
)
12
13
// ConvertSentryLevel converts a zapcore.Level to a sentry.Level
14
func ConvertSentryLevel(level zapcore.Level) sentry.Level {
15
	switch level {
16
	case zapcore.InvalidLevel:
17
		return sentry.LevelFatal
18
	case zapcore.DebugLevel:
19
		return sentry.LevelDebug
20
	case zapcore.InfoLevel:
21
		return sentry.LevelInfo
22
	case zapcore.WarnLevel:
23
		return sentry.LevelWarning
24
	case zapcore.ErrorLevel:
25
		return sentry.LevelError
26
	case zapcore.DPanicLevel:
27
		return sentry.LevelFatal
28
	case zapcore.PanicLevel:
29
		return sentry.LevelFatal
30
	case zapcore.FatalLevel:
31
		return sentry.LevelFatal
32
	default:
33
		return sentry.LevelFatal
34
	}
35
}
36
37
func CreateZapLogger() (*otelzap.Logger, func()) {
38
	zapLogger, _ := zap.NewProduction(zap.Hooks(func(entry zapcore.Entry) error {
39
		defer sentry.Flush(config.SentryFlushTimeout)
40
		if entry.Level <= zapcore.InfoLevel {
41
			return nil
42
		}
43
		msg := strings.Builder{}
44
		msg.WriteString(entry.Message)
45
		msg.WriteString(" ")
46
		msg.WriteString(entry.Caller.TrimmedPath())
47
		event := sentry.NewEvent()
48
		event.Message = msg.String()
49
		event.Level = ConvertSentryLevel(entry.Level)
50
		sentry.CaptureEvent(event)
51
		return nil
52
	}))
53
54
	logger := otelzap.New(zapLogger, otelzap.WithTraceIDField(false))
55
	undo := otelzap.ReplaceGlobals(logger)
56
57
	return logger, undo
58
}
59