mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-07-27 16:22:02 +08:00
50 lines
1.3 KiB
Go
50 lines
1.3 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
|
|
startC chan struct{}
|
|
}
|
|
|
|
func NewProviderFactory() 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")
|
|
|
|
return &provider{
|
|
settings: settings,
|
|
client: segment.New(config.Key),
|
|
startC: make(chan struct{}),
|
|
}, nil
|
|
}
|
|
|
|
func (provider *provider) Start(_ context.Context) error {
|
|
<-provider.startC
|
|
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(_ context.Context) error {
|
|
close(provider.startC)
|
|
return nil
|
|
}
|