tracks.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. // CreateSegmentNewUserTrack creates a track of type "New User", which
  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. // CreateSegmentRedeployViaWebhookTrack creates a track of type "Triggered Re-deploy via Webhook", which
  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. // NewClusterEventOpts are the parameters for creating a "New Cluster Event" track
  63. type NewClusterEventOpts struct {
  64. UserId string
  65. ProjId string
  66. ClusterName string
  67. ClusterType string // EKS, DOKS, or GKE
  68. EventType string // connected, provisioned, or destroyed
  69. }
  70. // CreateSegmentNewClusterEvent creates a track of type "New Cluster Event", which
  71. // tracks whenever a cluster is newly provisioned, connected, or destroyed.
  72. func CreateSegmentNewClusterEvent(opts *NewClusterEventOpts) *segmentNewClusterEventTrack {
  73. return &segmentNewClusterEventTrack{
  74. userId: opts.UserId,
  75. projId: opts.ProjId,
  76. clusterName: opts.ClusterName,
  77. clusterType: opts.ClusterType,
  78. eventType: opts.EventType,
  79. }
  80. }
  81. func (t *segmentNewClusterEventTrack) getUserId() string {
  82. return t.userId
  83. }
  84. func (t *segmentNewClusterEventTrack) getEvent() SegmentEvent {
  85. return NewClusterEvent
  86. }
  87. func (t *segmentNewClusterEventTrack) getProperties() segment.Properties {
  88. return segment.NewProperties().Set("Project ID", t.projId).Set("Cluster Name", t.clusterName).Set("Cluster Type", t.clusterType).Set("Event Type", t.eventType)
  89. }