49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package telemetry
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/getsentry/sentry-go/internal/protocol"
|
|
"github.com/getsentry/sentry-go/internal/ratelimit"
|
|
)
|
|
|
|
// Buffer is the top-level buffer that wraps the scheduler and category buffers.
|
|
type Buffer struct {
|
|
scheduler *Scheduler
|
|
}
|
|
|
|
// NewBuffer creates a new Buffer with the given configuration.
|
|
func NewBuffer(
|
|
storage map[ratelimit.Category]Storage[protocol.EnvelopeItemConvertible],
|
|
transport protocol.TelemetryTransport,
|
|
dsn *protocol.Dsn,
|
|
sdkInfo *protocol.SdkInfo,
|
|
) *Buffer {
|
|
scheduler := NewScheduler(storage, transport, dsn, sdkInfo)
|
|
scheduler.Start()
|
|
|
|
return &Buffer{
|
|
scheduler: scheduler,
|
|
}
|
|
}
|
|
|
|
// Add adds an EnvelopeItemConvertible to the appropriate buffer based on its category.
|
|
func (b *Buffer) Add(item protocol.EnvelopeItemConvertible) bool {
|
|
return b.scheduler.Add(item)
|
|
}
|
|
|
|
// Flush forces all buffers to flush within the given timeout.
|
|
func (b *Buffer) Flush(timeout time.Duration) bool {
|
|
return b.scheduler.Flush(timeout)
|
|
}
|
|
|
|
// FlushWithContext flushes with a custom context for cancellation.
|
|
func (b *Buffer) FlushWithContext(ctx context.Context) bool {
|
|
return b.scheduler.FlushWithContext(ctx)
|
|
}
|
|
|
|
// Close stops the buffer, flushes remaining data, and releases resources.
|
|
func (b *Buffer) Close(timeout time.Duration) {
|
|
b.scheduler.Stop(timeout)
|
|
}
|