Переглянути джерело

Added new segment package and implemented

jnfrati 4 роки тому
батько
коміт
e1c5d57eb4

+ 64 - 0
internal/analytics/segment.go

@@ -0,0 +1,64 @@
+package analytics
+
+import (
+	"fmt"
+
+	segment "gopkg.in/segmentio/analytics-go.v3"
+)
+
+type AnalyticsSegmentClient interface {
+	Identify(userId string, userEmail string, isGithub bool) error
+	Track(userId string, event string, properties segment.Properties) error
+}
+
+type AnalyticsSegment struct {
+	segment.Client
+	isEnabled bool
+}
+
+func Initialize(segmentClientKey string) AnalyticsSegmentClient {
+	if segmentClientKey != "" {
+
+		client := segment.New(segmentClientKey)
+
+		return &AnalyticsSegment{
+			Client:    client,
+			isEnabled: true,
+		}
+	}
+
+	return &AnalyticsSegment{
+		isEnabled: false,
+	}
+}
+
+func (c *AnalyticsSegment) Identify(userId string, userEmail string, isGithub bool) error {
+
+	if !c.isEnabled {
+		fmt.Println("Analytics not enabled")
+		return nil
+	}
+
+	err := c.Enqueue(segment.Identify{
+		UserId: userId,
+		Traits: segment.NewTraits().
+			SetEmail(userEmail).
+			Set("github", isGithub),
+	})
+	return err
+}
+
+func (c *AnalyticsSegment) Track(userId string, event string, properties segment.Properties) error {
+	if !c.isEnabled {
+		fmt.Println("Analytics not enabled")
+		return nil
+	}
+
+	err := c.Enqueue(segment.Track{
+		UserId:     userId,
+		Event:      event,
+		Properties: properties,
+	})
+
+	return err
+}

+ 4 - 6
server/api/api.go

@@ -22,9 +22,9 @@ import (
 	"github.com/porter-dev/porter/internal/repository"
 	memory "github.com/porter-dev/porter/internal/repository/memory"
 	"github.com/porter-dev/porter/internal/validator"
-	segment "gopkg.in/segmentio/analytics-go.v3"
 	"helm.sh/helm/v3/pkg/storage"
 
+	"github.com/porter-dev/porter/internal/analytics"
 	"github.com/porter-dev/porter/internal/config"
 )
 
@@ -91,7 +91,7 @@ type App struct {
 	validator     *vr.Validate
 	translator    *ut.Translator
 	tokenConf     *token.TokenGeneratorConf
-	segmentClient *segment.Client
+	segmentClient analytics.AnalyticsSegmentClient
 }
 
 type AppCapabilities struct {
@@ -211,10 +211,8 @@ func New(conf *AppConfig) (*App, error) {
 		TokenSecret: conf.ServerConf.TokenGeneratorSecret,
 	}
 
-	if sc := conf.ServerConf; sc.SegmentClientKey != "" {
-		client := segment.New(sc.SegmentClientKey)
-		app.segmentClient = &client
-	}
+	newSegmentClient := analytics.Initialize(sc.SegmentClientKey)
+	app.segmentClient = newSegmentClient
 
 	return app, nil
 }

+ 3 - 16
server/api/oauth_github_handler.go

@@ -131,22 +131,9 @@ func (app *App) HandleGithubOAuthCallback(w http.ResponseWriter, r *http.Request
 		}
 
 		// send to segment
-		if app.segmentClient != nil {
-			client := *app.segmentClient
-			client.Enqueue(segment.Identify{
-				UserId: fmt.Sprintf("%v", user.ID),
-				Traits: segment.NewTraits().
-					SetEmail(user.Email).
-					Set("github", "true"),
-			})
-
-			client.Enqueue(segment.Track{
-				UserId: fmt.Sprintf("%v", user.ID),
-				Event:  "New User",
-				Properties: segment.NewProperties().
-					Set("email", user.Email),
-			})
-		}
+		userId := fmt.Sprintf("%v", user.ID)
+		app.segmentClient.Identify(userId, user.Email, true)
+		app.segmentClient.Track(userId, "New User", segment.NewProperties().Set("email", user.Email))
 
 		// log the user in
 		app.Logger.Info().Msgf("New user created: %d", user.ID)

+ 3 - 16
server/api/oauth_google_handler.go

@@ -96,22 +96,9 @@ func (app *App) HandleGoogleOAuthCallback(w http.ResponseWriter, r *http.Request
 	}
 
 	// send to segment
-	if app.segmentClient != nil {
-		client := *app.segmentClient
-		client.Enqueue(segment.Identify{
-			UserId: fmt.Sprintf("%v", user.ID),
-			Traits: segment.NewTraits().
-				SetEmail(user.Email).
-				Set("github", "true"),
-		})
-
-		client.Enqueue(segment.Track{
-			UserId: fmt.Sprintf("%v", user.ID),
-			Event:  "New User",
-			Properties: segment.NewProperties().
-				Set("email", user.Email),
-		})
-	}
+	userId := fmt.Sprintf("%v", user.ID)
+	app.segmentClient.Identify(userId, user.Email, true)
+	app.segmentClient.Track(userId, "New User", segment.NewProperties().Set("email", user.Email))
 
 	// log the user in
 	app.Logger.Info().Msgf("New user created: %d", user.ID)

+ 5 - 9
server/api/release_handler.go

@@ -1087,15 +1087,11 @@ func (app *App) HandleReleaseDeployWebhook(w http.ResponseWriter, r *http.Reques
 		return
 	}
 
-	if app.segmentClient != nil {
-		client := *app.segmentClient
-		client.Enqueue(segment.Track{
-			UserId: "anonymous",
-			Event:  "Triggered Re-deploy via Webhook",
-			Properties: segment.NewProperties().
-				Set("repository", repository),
-		})
-	}
+	app.segmentClient.Track(
+		"anonymous",
+		"Triggered Re-deploy via Webhook",
+		segment.NewProperties().Set("repository", repository),
+	)
 
 	w.WriteHeader(http.StatusOK)
 }

+ 3 - 17
server/api/user_handler.go

@@ -51,23 +51,9 @@ func (app *App) HandleCreateUser(w http.ResponseWriter, r *http.Request) {
 
 	if err == nil {
 		// send to segment
-		if app.segmentClient != nil {
-			client := *app.segmentClient
-
-			client.Enqueue(segment.Identify{
-				UserId: fmt.Sprintf("%v", user.ID),
-				Traits: segment.NewTraits().
-					SetEmail(user.Email).
-					Set("github", "false"),
-			})
-
-			client.Enqueue(segment.Track{
-				UserId: fmt.Sprintf("%v", user.ID),
-				Event:  "New User",
-				Properties: segment.NewProperties().
-					Set("email", user.Email),
-			})
-		}
+		userId := fmt.Sprintf("%v", user.ID)
+		app.segmentClient.Identify(userId, user.Email, false)
+		app.segmentClient.Track(userId, "New User", segment.NewProperties().Set("email", user.Email))
 
 		app.Logger.Info().Msgf("New user created: %d", user.ID)
 		var redirect string