Parcourir la source

Account id track (#3246)

* ping on account id

* aws inputted

---------

Co-authored-by: Justin Rhee <jusrhee@Justins-MacBook-Air.local>
jusrhee il y a 2 ans
Parent
commit
33f44bfffe

+ 10 - 0
api/server/handlers/user/update_onboarding_step.go

@@ -55,6 +55,16 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
 		}))
 	}
 
+	if request.Step == "aws-account-id-complete" {
+		v.Config().AnalyticsClient.Track(analytics.AWSInputTrack(&analytics.AWSInputTrackOpts{
+			UserScopedTrackOpts: analytics.GetUserScopedTrackOpts(user.ID),
+			Email:               user.Email,
+			FirstName:           user.FirstName,
+			LastName:            user.LastName,
+			CompanyName:         user.CompanyName,
+		}))
+	}
+
 	if request.Step == "credential-step-complete" {
 		v.Config().AnalyticsClient.Track(analytics.CredentialStepTrack(&analytics.CredentialStepTrackOpts{
 			UserScopedTrackOpts: analytics.GetUserScopedTrackOpts(user.ID),

+ 12 - 0
dashboard/src/components/CloudFormationForm.tsx

@@ -31,11 +31,19 @@ const CloudFormationForm: React.FC<Props> = ({
   proceed,
   switchToCredentialFlow
 }) => {
+  const [hasSentAWSNotif, setHasSentAWSNotif] = useState(false);
   const [grantPermissionsError, setGrantPermissionsError] = useState("");
   const [roleStatus, setRoleStatus] = useState("");
   const [errorMessage, setErrorMessage] = useState(undefined);
   const [AWSAccountID, setAWSAccountID] = useState("");
   const { currentProject } = useContext(Context);
+  const markStepStarted = async (step: string) => {
+    try {
+      await api.updateOnboardingStep("<token>", { step }, {});
+    } catch (err) {
+      // console.log(err);
+    }
+  };
 
   const getExternalId = () => {
     let externalId = localStorage.getItem(AWSAccountID)
@@ -116,6 +124,10 @@ const CloudFormationForm: React.FC<Props> = ({
               if (e === "open-sesame") {
                 switchToCredentialFlow();
               }
+              if (e.trim().length === 12 && !hasSentAWSNotif) {
+                setHasSentAWSNotif(true);
+                markStepStarted("aws-account-id-complete");
+              }
               setGrantPermissionsError("");
               setAWSAccountID(e.trim());
             }}

+ 1 - 0
internal/analytics/track_events.go

@@ -12,6 +12,7 @@ const (
 	CostConsentComplete    SegmentEvent = "Cost Consent Complete"
 	CredentialStepComplete SegmentEvent = "Credential Step Complete"
 	PreProvisionCheck      SegmentEvent = "Pre Provision Check Started"
+	AWSInputted            SegmentEvent = "AWS Account ID Inputted"
 	ProvisioningAttempted  SegmentEvent = "Provisioning Attempted"
 
 	ClusterProvisioningStart   SegmentEvent = "Cluster Provisioning Started"

+ 23 - 0
internal/analytics/tracks.go

@@ -180,6 +180,29 @@ func CostConsentCompletedTrack(opts *CostConsentCompletedTrackOpts) segmentTrack
 	)
 }
 
+// AWSInputTrackOpts are the options for creating a track when a user inputs a complete AWS account ID
+type AWSInputTrackOpts struct {
+	*UserScopedTrackOpts
+
+	Email       string
+	FirstName   string
+	LastName    string
+	CompanyName string
+}
+
+// AWSInputTrack returns a track for when a user inputs a complete AWS account ID
+func AWSInputTrack(opts *AWSInputTrackOpts) segmentTrack {
+	additionalProps := make(map[string]interface{})
+	additionalProps["email"] = opts.Email
+	additionalProps["name"] = opts.FirstName + " " + opts.LastName
+	additionalProps["company"] = opts.CompanyName
+
+	return getSegmentUserTrack(
+		opts.UserScopedTrackOpts,
+		getDefaultSegmentTrack(additionalProps, AWSInputted),
+	)
+}
+
 // CredentialStepTrackOpts are the options for creating a track when a user completes the credential step
 type CredentialStepTrackOpts struct {
 	*UserScopedTrackOpts