| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package analytics
- import (
- "github.com/porter-dev/porter/pkg/logger"
- segment "gopkg.in/segmentio/analytics-go.v3"
- )
- type AnalyticsSegmentClient interface {
- Identify(segmentIdentifier) error
- Track(segmentTrack) error
- }
- type AnalyticsSegment struct {
- segment.Client
- isEnabled bool
- logger *logger.Logger
- }
- // Initialize the segment client and return a superset of it, the AnalyticsSegmentClient will handle cases when
- // the segment client failed on initialization or not enabled
- func InitializeAnalyticsSegmentClient(segmentClientKey string, logger *logger.Logger) AnalyticsSegmentClient {
- if segmentClientKey != "" {
- client := segment.New(segmentClientKey)
- if client == nil {
- return &AnalyticsSegment{
- isEnabled: false,
- logger: logger,
- }
- }
- return &AnalyticsSegment{
- Client: client,
- isEnabled: true,
- logger: logger,
- }
- }
- return &AnalyticsSegment{
- isEnabled: false,
- logger: logger,
- }
- }
- // Superset of segment client identify function, this will accept analytics defined identifiers only
- // and will log an error if the client is not initialized
- func (c *AnalyticsSegment) Identify(identifier segmentIdentifier) error {
- if !c.isEnabled {
- c.logger.Error().Msg("Analytics not enabled")
- return nil
- }
- err := c.Enqueue(segment.Identify{
- UserId: identifier.getUserId(),
- Traits: identifier.getTraits(),
- })
- return err
- }
- // Superset of segment client track function, this will accept analytics defined tracks only
- // and will log an error if the client is not initialized
- func (c *AnalyticsSegment) Track(track segmentTrack) error {
- if !c.isEnabled {
- c.logger.Error().Msg("Analytics not enabled")
- return nil
- }
- err := c.Enqueue(segment.Track{
- UserId: track.getUserId(),
- Event: string(track.getEvent()),
- Properties: track.getProperties(),
- })
- return err
- }
|