1
0
mirror of https://github.com/netsampler/goflow2.git synced 2024-05-06 15:54:52 +00:00
2023-12-09 11:56:30 -08:00

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,
}
}