segment.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package analytics
  2. import (
  3. "github.com/porter-dev/porter/internal/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. //
  16. /*
  17. Initialize the segment client and return a superset of it, the AnalyticsSegmentClient will handle cases when
  18. the segment client failed on initialization or not enabled
  19. */
  20. func InitializeAnalyticsSegmentClient(segmentClientKey string, logger *logger.Logger) AnalyticsSegmentClient {
  21. if segmentClientKey != "" {
  22. client := segment.New(segmentClientKey)
  23. if client == nil {
  24. return &AnalyticsSegment{
  25. isEnabled: false,
  26. logger: logger,
  27. }
  28. }
  29. return &AnalyticsSegment{
  30. Client: client,
  31. isEnabled: true,
  32. logger: logger,
  33. }
  34. }
  35. return &AnalyticsSegment{
  36. isEnabled: false,
  37. logger: logger,
  38. }
  39. }
  40. /*
  41. Superset of segment client identify function, this will accept analytics defined identifiers only
  42. and will log an error if the client is not initialized
  43. */
  44. func (c *AnalyticsSegment) Identify(identifier SegmentIdentifier) error {
  45. if !c.isEnabled {
  46. c.logger.Error().Msg("Analytics not enabled")
  47. return nil
  48. }
  49. err := c.Enqueue(segment.Identify{
  50. UserId: identifier.getUserId(),
  51. Traits: identifier.getTraits(),
  52. })
  53. return err
  54. }
  55. /*
  56. Superset of segment client track function, this will accept analytics defined tracks only
  57. and will log an error if the client is not initialized
  58. */
  59. func (c *AnalyticsSegment) Track(track SegmentTrack) error {
  60. if !c.isEnabled {
  61. c.logger.Error().Msg("Analytics not enabled")
  62. return nil
  63. }
  64. err := c.Enqueue(segment.Track{
  65. UserId: track.getUserId(),
  66. Event: string(track.getEvent()),
  67. Properties: track.getProperties(),
  68. })
  69. return err
  70. }