MCPcopy Create free account
hub / github.com/TheThingsNetwork/lorawan-stack / forward

Method forward

pkg/log/middleware/sentry/sentry.go:45–91  ·  view source on GitHub ↗
(e log.Entry)

Source from the content-addressed store, hash-verified

43}
44
45func (s *Sentry) forward(e log.Entry) *sentry.EventID {
46 fields := e.Fields().Fields()
47
48 switch fields["namespace"] {
49 case "grpc", "web": // gRPC and web have their own Sentry integration.
50 return nil
51 }
52
53 var err error
54 if errField, ok := fields["error"]; ok {
55 if errField, ok := errField.(error); ok {
56 err = errField
57 }
58 }
59 evt := sentryerrors.NewEvent(err)
60 evt.Message = e.Message()
61 if err == nil {
62 evt.Level = sentry.LevelError
63 }
64
65 evt.Contexts["log fields"] = fields
66
67 for k, v := range fields {
68 switch k {
69 case "namespace":
70 evt.Tags["log.namespace"] = fmt.Sprint(v)
71 case "auth.user_id":
72 evt.User.ID = fmt.Sprint(v)
73 case "peer.real_ip":
74 evt.User.IPAddress = fmt.Sprint(v)
75 case "grpc.service", "grpc.method",
76 "auth.token_type", "auth.token_id":
77 evt.Tags[k] = fmt.Sprint(v)
78 case "dev_addr", "mac_version", "phy_version":
79 evt.Tags[k] = fmt.Sprint(v)
80 default:
81 if strings.HasSuffix(k, "_id") || strings.HasSuffix(k, "_uid") || strings.HasSuffix(k, "_eui") {
82 if after, ok := strings.CutPrefix(k, "grpc.request."); ok {
83 k = after
84 }
85 evt.Tags[k] = fmt.Sprint(v)
86 }
87 }
88 }
89
90 return sentry.CaptureEvent(evt)
91}

Callers 1

WrapMethod · 0.95

Calls 2

FieldsMethod · 0.65
MessageMethod · 0.65

Tested by

no test coverage detected