mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package segmentanalytics
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/SigNoz/signoz/pkg/analytics"
|
|
"github.com/SigNoz/signoz/pkg/factory"
|
|
"github.com/SigNoz/signoz/pkg/types/analyticstypes"
|
|
segment "github.com/segmentio/analytics-go/v3"
|
|
)
|
|
|
|
type provider struct {
|
|
settings factory.ScopedProviderSettings
|
|
client segment.Client
|
|
stopC chan struct{}
|
|
}
|
|
|
|
func NewFactory() factory.ProviderFactory[analytics.Analytics, analytics.Config] {
|
|
return factory.NewProviderFactory(factory.MustNewName("segment"), New)
|
|
}
|
|
|
|
func New(ctx context.Context, providerSettings factory.ProviderSettings, config analytics.Config) (analytics.Analytics, error) {
|
|
settings := factory.NewScopedProviderSettings(providerSettings, "github.com/SigNoz/signoz/pkg/analytics/segmentanalytics")
|
|
|
|
client, err := segment.NewWithConfig(config.Segment.Key, segment.Config{
|
|
Logger: newSegmentLogger(settings),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &provider{
|
|
settings: settings,
|
|
client: client,
|
|
stopC: make(chan struct{}),
|
|
}, nil
|
|
}
|
|
|
|
func (provider *provider) Start(_ context.Context) error {
|
|
<-provider.stopC
|
|
return nil
|
|
}
|
|
|
|
func (provider *provider) Send(ctx context.Context, messages ...analyticstypes.Message) {
|
|
for _, message := range messages {
|
|
err := provider.client.Enqueue(message)
|
|
if err != nil {
|
|
provider.settings.Logger().WarnContext(ctx, "unable to send message to segment", "err", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (provider *provider) Stop(ctx context.Context) error {
|
|
if err := provider.client.Close(); err != nil {
|
|
provider.settings.Logger().WarnContext(ctx, "unable to close segment client", "err", err)
|
|
}
|
|
|
|
close(provider.stopC)
|
|
return nil
|
|
}
|