diff --git a/cmd/stcrashreceiver/sentry.go b/cmd/stcrashreceiver/sentry.go index b76759db..2480b3cf 100644 --- a/cmd/stcrashreceiver/sentry.go +++ b/cmd/stcrashreceiver/sentry.go @@ -12,6 +12,7 @@ import ( "io/ioutil" "regexp" "strings" + "sync" raven "github.com/getsentry/raven-go" "github.com/maruel/panicparse/stack" @@ -25,15 +26,27 @@ func init() { raven.SetSourceCodeLoader(loader) } +var ( + clients = make(map[string]*raven.Client) + clientsMut sync.Mutex +) + func sendReport(dsn, path string, report []byte) error { pkt, err := parseReport(path, report) if err != nil { return err } - cli, err := raven.New(dsn) - if err != nil { - return err + clientsMut.Lock() + defer clientsMut.Unlock() + + cli, ok := clients[dsn] + if !ok { + cli, err = raven.New(dsn) + if err != nil { + return err + } + clients[dsn] = cli } // The client sets release and such on the packet before sending, in the @@ -42,6 +55,7 @@ func sendReport(dsn, path string, report []byte) error { cli.SetRelease(pkt.Release) cli.SetEnvironment(pkt.Environment) + defer cli.Wait() _, errC := cli.Capture(pkt, nil) return <-errC }