in modelwriter.go [174:259]
func (w *modelWriter) buildModelError(out *model.Error, e *ErrorData) {
out.ID = model.TraceID(e.ID)
out.TraceID = model.TraceID(e.TraceID)
out.ParentID = model.SpanID(e.ParentID)
out.TransactionID = model.SpanID(e.TransactionID)
out.Timestamp = model.Time(e.Timestamp.UTC())
out.Context = e.Context.build()
out.Culprit = e.Culprit
if !e.TransactionID.isZero() {
out.Transaction.Sampled = &e.transactionSampled
if e.transactionSampled {
out.Transaction.Type = e.transactionType
out.Transaction.Name = e.transactionName
}
}
// Create model stacktrace frames, and set the context.
w.modelStacktrace = w.modelStacktrace[:0]
var appendModelErrorStacktraceFrames func(exception *exceptionData)
appendModelErrorStacktraceFrames = func(exception *exceptionData) {
if len(exception.stacktrace) != 0 {
w.modelStacktrace = appendModelStacktraceFrames(w.modelStacktrace, exception.stacktrace)
}
for _, cause := range exception.cause {
appendModelErrorStacktraceFrames(&cause)
}
}
appendModelErrorStacktraceFrames(&e.exception)
if len(e.logStacktrace) != 0 {
w.modelStacktrace = appendModelStacktraceFrames(w.modelStacktrace, e.logStacktrace)
}
var modelStacktraceOffset int
if e.exception.message != "" {
var buildException func(exception *exceptionData) model.Exception
culprit := e.Culprit
buildException = func(exception *exceptionData) model.Exception {
out := model.Exception{
Message: exception.message,
Code: model.ExceptionCode{
String: exception.Code.String,
Number: exception.Code.Number,
},
Type: exception.Type.Name,
Module: exception.Type.PackagePath,
Handled: e.Handled,
}
if n := len(exception.stacktrace); n != 0 {
out.Stacktrace = w.modelStacktrace[modelStacktraceOffset : modelStacktraceOffset+n]
modelStacktraceOffset += n
}
if len(exception.attrs) != 0 {
out.Attributes = exception.attrs
}
if n := len(exception.cause); n > 0 {
out.Cause = make([]model.Exception, n)
for i := range exception.cause {
out.Cause[i] = buildException(&exception.cause[i])
}
}
if culprit == "" {
culprit = stacktraceCulprit(out.Stacktrace)
}
return out
}
out.Exception = buildException(&e.exception)
out.Culprit = culprit
}
if e.log.Message != "" {
out.Log = model.Log{
Message: e.log.Message,
Level: e.log.Level,
LoggerName: e.log.LoggerName,
ParamMessage: e.log.MessageFormat,
}
if n := len(e.logStacktrace); n != 0 {
out.Log.Stacktrace = w.modelStacktrace[modelStacktraceOffset : modelStacktraceOffset+n]
modelStacktraceOffset += n
if out.Culprit == "" {
out.Culprit = stacktraceCulprit(out.Log.Stacktrace)
}
}
}
out.Culprit = truncateString(out.Culprit)
}