tracks.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package analytics
  2. import (
  3. "fmt"
  4. "github.com/porter-dev/porter/internal/models"
  5. segment "gopkg.in/segmentio/analytics-go.v3"
  6. )
  7. type segmentTrack interface {
  8. getUserId() string
  9. getEvent() SegmentEvent
  10. getProperties() segment.Properties
  11. }
  12. type segmentNewUserTrack struct {
  13. userId string
  14. userEmail string
  15. }
  16. // Constructor for track of type "New User"
  17. // Tracks when a user has registered
  18. func CreateSegmentNewUserTrack(user *models.User) *segmentNewUserTrack {
  19. userId := fmt.Sprintf("%v", user.ID)
  20. return &segmentNewUserTrack{
  21. userId: userId,
  22. userEmail: user.Email,
  23. }
  24. }
  25. func (t *segmentNewUserTrack) getUserId() string {
  26. return t.userId
  27. }
  28. func (t *segmentNewUserTrack) getEvent() SegmentEvent {
  29. return NewUser
  30. }
  31. func (t *segmentNewUserTrack) getProperties() segment.Properties {
  32. return segment.NewProperties().Set("email", t.userEmail)
  33. }
  34. type segmentRedeployViaWebhookTrack struct {
  35. userId string
  36. repository string
  37. }
  38. // Constructor for track of type "Triggered Re-deploy via Webhook"
  39. // tracks whenever a repository is redeployed via webhook call
  40. func CreateSegmentRedeployViaWebhookTrack(userId string, repository string) *segmentRedeployViaWebhookTrack {
  41. return &segmentRedeployViaWebhookTrack{
  42. userId: userId,
  43. repository: repository,
  44. }
  45. }
  46. func (t *segmentRedeployViaWebhookTrack) getUserId() string {
  47. return t.userId
  48. }
  49. func (t *segmentRedeployViaWebhookTrack) getEvent() SegmentEvent {
  50. return RedeployViaWebhook
  51. }
  52. func (t *segmentRedeployViaWebhookTrack) getProperties() segment.Properties {
  53. return segment.NewProperties().Set("repository", t.repository)
  54. }
  55. type segmentNewClusterEventTrack struct {
  56. userId string
  57. projId string
  58. clusterName string
  59. clusterType string // EKS, DOKS, or GKE
  60. eventType string // connected, provisioned, or destroyed
  61. }
  62. // Constructor for track of type "New Cluster Event"
  63. // tracks whenever a cluster is newly provisioned, connected, or destroyed.
  64. func CreateSegmentNewClusterEvent(userId string, projId string, clusterName string, clusterType string, eventType string) *segmentNewClusterEventTrack {
  65. return &segmentNewClusterEventTrack{
  66. userId: userId,
  67. projId: projId,
  68. clusterName: clusterName,
  69. clusterType: clusterType,
  70. eventType: eventType,
  71. }
  72. }
  73. func (t *segmentNewClusterEventTrack) getUserId() string {
  74. return t.userId
  75. }
  76. func (t *segmentNewClusterEventTrack) getEvent() SegmentEvent {
  77. return NewClusterEvent
  78. }
  79. func (t *segmentNewClusterEventTrack) getProperties() segment.Properties {
  80. return segment.NewProperties().Set("Project ID", t.projId).Set("Cluster Name", t.clusterName).Set("Cluster Type", t.clusterType).Set("Event Type", t.eventType)
  81. }