mirror of
https://github.com/netsampler/goflow2.git
synced 2024-05-06 15:54:52 +00:00
40 lines
889 B
Go
40 lines
889 B
Go
package debug
|
|
|
|
import (
|
|
"runtime/debug"
|
|
|
|
"github.com/netsampler/goflow2/v2/producer"
|
|
)
|
|
|
|
type PanicProducerWrapper struct {
|
|
wrapped producer.ProducerInterface
|
|
}
|
|
|
|
func (p *PanicProducerWrapper) Produce(msg interface{}, args *producer.ProduceArgs) (flowMessageSet []producer.ProducerMessage, err error) {
|
|
|
|
defer func() {
|
|
if pErr := recover(); pErr != nil {
|
|
|
|
pErrC, _ := pErr.(string)
|
|
err = &PanicErrorMessage{Msg: msg, Inner: pErrC, Stacktrace: debug.Stack()}
|
|
}
|
|
}()
|
|
|
|
flowMessageSet, err = p.wrapped.Produce(msg, args)
|
|
return flowMessageSet, err
|
|
}
|
|
|
|
func (p *PanicProducerWrapper) Close() {
|
|
p.wrapped.Close()
|
|
}
|
|
|
|
func (p *PanicProducerWrapper) Commit(flowMessageSet []producer.ProducerMessage) {
|
|
p.wrapped.Commit(flowMessageSet)
|
|
}
|
|
|
|
func WrapPanicProducer(wrapped producer.ProducerInterface) producer.ProducerInterface {
|
|
return &PanicProducerWrapper{
|
|
wrapped: wrapped,
|
|
}
|
|
}
|