41 lines
1.6 KiB
Go
41 lines
1.6 KiB
Go
package report
|
|
|
|
import (
|
|
"github.com/getsentry/sentry-go/internal/protocol"
|
|
"github.com/getsentry/sentry-go/internal/ratelimit"
|
|
)
|
|
|
|
// ClientReportRecorder is used by components that need to record lost/discarded events.
|
|
type ClientReportRecorder interface {
|
|
Record(reason DiscardReason, category ratelimit.Category, quantity int64)
|
|
RecordOne(reason DiscardReason, category ratelimit.Category)
|
|
RecordForEnvelope(reason DiscardReason, envelope *protocol.Envelope)
|
|
RecordItem(reason DiscardReason, item protocol.TelemetryItem)
|
|
}
|
|
|
|
// ClientReportProvider is used by the single component responsible for sending client reports.
|
|
type ClientReportProvider interface {
|
|
TakeReport() *ClientReport
|
|
AttachToEnvelope(envelope *protocol.Envelope)
|
|
}
|
|
|
|
// noopRecorder is a no-op implementation of ClientReportRecorder.
|
|
type noopRecorder struct{}
|
|
|
|
func (noopRecorder) Record(DiscardReason, ratelimit.Category, int64) {}
|
|
func (noopRecorder) RecordOne(DiscardReason, ratelimit.Category) {}
|
|
func (noopRecorder) RecordForEnvelope(DiscardReason, *protocol.Envelope) {}
|
|
func (noopRecorder) RecordItem(DiscardReason, protocol.TelemetryItem) {}
|
|
|
|
// noopProvider is a no-op implementation of ClientReportProvider.
|
|
type noopProvider struct{}
|
|
|
|
func (noopProvider) TakeReport() *ClientReport { return nil }
|
|
func (noopProvider) AttachToEnvelope(_ *protocol.Envelope) {}
|
|
|
|
// NoopRecorder returns a no-op ClientReportRecorder that silently discards all records.
|
|
func NoopRecorder() ClientReportRecorder { return noopRecorder{} }
|
|
|
|
// NoopProvider returns a no-op ClientReportProvider that always returns nil reports.
|
|
func NoopProvider() ClientReportProvider { return noopProvider{} }
|