segment.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package analytics
  2. import (
  3. "github.com/porter-dev/porter/pkg/logger"
  4. segment "gopkg.in/segmentio/analytics-go.v3"
  5. )
  6. type AnalyticsSegmentClient interface {
  7. Identify(segmentIdentifier) error
  8. Track(segmentTrack) error
  9. }
  10. type AnalyticsSegment struct {
  11. segment.Client
  12. isEnabled bool
  13. logger *logger.Logger
  14. }
  15. // Initialize the segment client and return a superset of it, the AnalyticsSegmentClient will handle cases when
  16. // the segment client failed on initialization or not enabled
  17. func InitializeAnalyticsSegmentClient(segmentClientKey string, logger *logger.Logger) AnalyticsSegmentClient {
  18. if segmentClientKey != "" {
  19. client := segment.New(segmentClientKey)
  20. if client == nil {
  21. return &AnalyticsSegment{
  22. isEnabled: false,
  23. logger: logger,
  24. }
  25. }
  26. return &AnalyticsSegment{
  27. Client: client,
  28. isEnabled: true,
  29. logger: logger,
  30. }
  31. }
  32. return &AnalyticsSegment{
  33. isEnabled: false,
  34. logger: logger,
  35. }
  36. }
  37. // Superset of segment client identify function, this will accept analytics defined identifiers only
  38. // and will log an error if the client is not initialized
  39. func (c *AnalyticsSegment) Identify(identifier segmentIdentifier) error {
  40. if !c.isEnabled {
  41. c.logger.Error().Msg("Analytics not enabled")
  42. return nil
  43. }
  44. err := c.Enqueue(segment.Identify{
  45. UserId: identifier.getUserId(),
  46. Traits: identifier.getTraits(),
  47. })
  48. return err
  49. }
  50. // Superset of segment client track function, this will accept analytics defined tracks only
  51. // and will log an error if the client is not initialized
  52. func (c *AnalyticsSegment) Track(track segmentTrack) error {
  53. if !c.isEnabled {
  54. c.logger.Error().Msg("Analytics not enabled")
  55. return nil
  56. }
  57. err := c.Enqueue(segment.Track{
  58. UserId: track.getUserId(),
  59. Event: string(track.getEvent()),
  60. Properties: track.getProperties(),
  61. })
  62. return err
  63. }