func Capture()

in xray/capture.go [18:49]


func Capture(ctx context.Context, name string, fn func(context.Context) error) (err error) {
	c, seg := BeginSubsegment(ctx, name)

	defer func() {
		if seg != nil {
			seg.Close(err)
		} else {
			cfg := GetRecorder(ctx)
			failedMessage := fmt.Sprintf("failed to end subsegment: subsegment '%v' cannot be found.", name)
			if cfg != nil && cfg.ContextMissingStrategy != nil {
				cfg.ContextMissingStrategy.ContextMissing(failedMessage)
			} else {
				globalCfg.ContextMissingStrategy().ContextMissing(failedMessage)
			}
		}
	}()

	defer func() {
		if p := recover(); p != nil {
			err = seg.ParentSegment.GetConfiguration().ExceptionFormattingStrategy.Panicf("%v", p)
			panic(p)
		}
	}()

	if c == nil && seg == nil {
		err = fn(ctx)
	} else {
		err = fn(c)
	}

	return err
}