Просмотр исходного кода

add analytics and activate pre-provision preflight check for both credential and cloudformation flows (#2866)

Feroze Mohideen 3 лет назад
Родитель
Сommit
68c5b289bb

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

@@ -45,6 +45,16 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
 		}))
 	}
 
+	if request.Step == "pre-provisioning-check-started" {
+		v.Config().AnalyticsClient.Track(analytics.PreProvisionCheckTrack(&analytics.PreProvisionCheckTrackOpts{
+			UserScopedTrackOpts: analytics.GetUserScopedTrackOpts(user.ID),
+			Email:               user.Email,
+			FirstName:           user.FirstName,
+			LastName:            user.LastName,
+			CompanyName:         user.CompanyName,
+		}))
+	}
+
 	if request.Step == "provisioning-started" {
 		v.Config().AnalyticsClient.Track(analytics.ProvisioningAttemptTrack(&analytics.ProvisioningAttemptTrackOpts{
 			UserScopedTrackOpts: analytics.GetUserScopedTrackOpts(user.ID),

+ 1 - 1
api/types/project_integration.go

@@ -69,7 +69,7 @@ type AWSIntegration struct {
 	// The project that this integration belongs to
 	ProjectID uint `json:"project_id"`
 
-	// The AWS arn this is integration is linked to
+	// The AWS arn this integration is linked to
 	AWSArn string `json:"aws_arn"`
 }
 

+ 1 - 5
dashboard/src/components/ProvisionerForm.tsx

@@ -37,11 +37,7 @@ const ProvisionerForm: React.FC<Props> = ({
         Configure settings for your AWS environment.
       </Text>
       <Spacer y={1} />
-      {useAssumeRole ? (
-        <ProvisionerSettings credentialId={credentialId} />
-      ) : (
-        <ProvisionerSettingsOld credentialId={credentialId} />
-      )}
+      <ProvisionerSettings credentialId={credentialId} />
     </>
   );
 };

+ 7 - 5
dashboard/src/components/ProvisionerSettings.tsx

@@ -91,11 +91,11 @@ const ProvisionerSettings: React.FC<Props> = (props) => {
   const [isReadOnly, setIsReadOnly] = useState(false);
   const [errorMessage, setErrorMessage] = useState<string>(undefined);
 
-  const markProvisioningStarted = async () => {
+  const markStepStarted = async (step: string) => {
     try {
-      const res = await api.updateOnboardingStep(
+      await api.updateOnboardingStep(
         "<token>",
-        { step: "provisioning-started" },
+        { step },
         {}
       );
     } catch (err) {
@@ -123,8 +123,6 @@ const ProvisionerSettings: React.FC<Props> = (props) => {
   };
 
   const createCluster = async () => {
-    markProvisioningStarted();
-
     var data = new Contract({
       cluster: new Cluster({
         projectId: currentProject.id,
@@ -173,6 +171,8 @@ const ProvisionerSettings: React.FC<Props> = (props) => {
     try {
       setIsReadOnly(true);
       setErrorMessage(undefined);
+      markStepStarted("pre-provisioning-check-started");
+
       await api.preflightCheckAWSUsage(
         "<token>",
         {
@@ -184,6 +184,8 @@ const ProvisionerSettings: React.FC<Props> = (props) => {
         }
       );
 
+      markStepStarted("provisioning-started");
+
       const res = await api.createContract("<token>", data, {
         project_id: currentProject.id,
       });

+ 1 - 0
internal/analytics/track_events.go

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

+ 23 - 0
internal/analytics/tracks.go

@@ -162,6 +162,29 @@ func CredentialStepTrack(opts *CredentialStepTrackOpts) segmentTrack {
 	)
 }
 
+// PreProvisionCheckTrackOpts are the options for creating a track when a user checks if they can provision
+type PreProvisionCheckTrackOpts struct {
+	*UserScopedTrackOpts
+
+	Email       string
+	FirstName   string
+	LastName    string
+	CompanyName string
+}
+
+// PreProvisionCheckTrack returns a track for when a user attempts provisioning
+func PreProvisionCheckTrack(opts *PreProvisionCheckTrackOpts) 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, PreProvisionCheck),
+	)
+}
+
 // ProvisioningAttemptedTrackOpts are the options for creating a track when a user attempts provisioning
 type ProvisioningAttemptTrackOpts struct {
 	*UserScopedTrackOpts