(method string, recovered interface{})
| 203 | } |
| 204 | |
| 205 | func (s *Server) handleRecovered(method string, recovered interface{}) bool { |
| 206 | if recovered != nil { |
| 207 | debug.PrintStack() |
| 208 | properties := map[string]any{ |
| 209 | "type": telemetry.ServerHeartbeatTypePanic, |
| 210 | "method": method, |
| 211 | "stack_trace": string(debug.Stack()), |
| 212 | } |
| 213 | if err, ok := recovered.(error); ok { |
| 214 | properties["recover"] = err.Error() |
| 215 | metadata := bugsnag.MetaData{} |
| 216 | metadata.Add("session", "method", method) |
| 217 | for property, value := range s.sessionTelemetryProperties { |
| 218 | metadata.Add("session", property, value) |
| 219 | } |
| 220 | metadata.Add("session", "arch", runtime.GOARCH) |
| 221 | metadata.Add("session", "os", runtime.GOOS) |
| 222 | _ = bugsnag.Notify(err, metadata) |
| 223 | } |
| 224 | s.Enqueue(telemetry.EventServerHeartbeat, properties) |
| 225 | return true |
| 226 | } |
| 227 | return false |
| 228 | } |
| 229 | |
| 230 | func (s *Server) handlePanic(method string) bool { |
| 231 | if r := recover(); r != nil { |
no test coverage detected