|
|
@@ -9,6 +9,7 @@ import (
|
|
|
"github.com/porter-dev/porter/api/types"
|
|
|
"github.com/porter-dev/porter/internal/analytics"
|
|
|
"github.com/porter-dev/porter/internal/models"
|
|
|
+ "github.com/porter-dev/porter/internal/telemetry"
|
|
|
)
|
|
|
|
|
|
type UpdateOnboardingStepHandler struct {
|
|
|
@@ -26,26 +27,47 @@ func NewUpdateOnboardingStepHandler(
|
|
|
}
|
|
|
|
|
|
func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
|
- user, _ := r.Context().Value(types.UserScope).(*models.User)
|
|
|
- project, _ := r.Context().Value(types.ProjectScope).(*models.Project)
|
|
|
+ ctx, span := telemetry.NewSpan(r.Context(), "serve-update-onboarding-step")
|
|
|
+ defer span.End()
|
|
|
+
|
|
|
+ user, _ := ctx.Value(types.UserScope).(*models.User)
|
|
|
+ project, _ := ctx.Value(types.ProjectScope).(*models.Project)
|
|
|
|
|
|
request := &types.UpdateOnboardingStepRequest{}
|
|
|
+
|
|
|
+ // intentionally do not return error so as not to block post-reporting steps
|
|
|
if ok := v.DecodeAndValidate(w, r, request); !ok {
|
|
|
- return
|
|
|
+ _ = telemetry.Error(ctx, span, nil, "error decoding request")
|
|
|
}
|
|
|
|
|
|
if request.Step == "project-delete" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.ProjectDeleteTrack(&analytics.ProjectCreateDeleteTrackOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.ProjectDeleteTrack(&analytics.ProjectCreateDeleteTrackOpts{
|
|
|
+ ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
+ Email: user.Email,
|
|
|
+ FirstName: user.FirstName,
|
|
|
+ LastName: user.LastName,
|
|
|
+ CompanyName: user.CompanyName,
|
|
|
+ }))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking project delete")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if request.Step == "cluster-delete" {
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.ClusterDeleteTrack(&analytics.ClusterDeleteTrackOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
LastName: user.LastName,
|
|
|
CompanyName: user.CompanyName,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking cluster delete")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "cost-consent-opened" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.CostConsentOpenedTrack(&analytics.CostConsentOpenedTrackOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.CostConsentOpenedTrack(&analytics.CostConsentOpenedTrackOpts{
|
|
|
UserScopedTrackOpts: analytics.GetUserScopedTrackOpts(user.ID),
|
|
|
Provider: request.Provider,
|
|
|
Email: user.Email,
|
|
|
@@ -53,10 +75,13 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
LastName: user.LastName,
|
|
|
CompanyName: user.CompanyName,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking cost consent opened")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "cost-consent-complete" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.CostConsentCompletedTrack(&analytics.CostConsentCompletedTrackOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.CostConsentCompletedTrack(&analytics.CostConsentCompletedTrackOpts{
|
|
|
UserScopedTrackOpts: analytics.GetUserScopedTrackOpts(user.ID),
|
|
|
Provider: request.Provider,
|
|
|
Email: user.Email,
|
|
|
@@ -64,10 +89,13 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
LastName: user.LastName,
|
|
|
CompanyName: user.CompanyName,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking cost consent completed")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "aws-account-id-complete" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.AWSInputTrack(&analytics.AWSInputTrackOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.AWSInputTrack(&analytics.AWSInputTrackOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
@@ -75,10 +103,13 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
CompanyName: user.CompanyName,
|
|
|
AccountId: request.AccountId,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking aws input")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "aws-login-redirect-success" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.AWSLoginRedirectSuccess(&analytics.AWSRedirectOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.AWSLoginRedirectSuccess(&analytics.AWSRedirectOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
@@ -87,10 +118,13 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
AccountId: request.AccountId,
|
|
|
LoginURL: request.LoginURL,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking aws login redirect")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "aws-cloudformation-redirect-success" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.AWSCloudformationRedirectSuccess(&analytics.AWSRedirectOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.AWSCloudformationRedirectSuccess(&analytics.AWSRedirectOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
@@ -100,10 +134,13 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
CloudformationURL: request.CloudformationURL,
|
|
|
ExternalId: request.ExternalId,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking aws cloudformation redirect")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "aws-create-integration-success" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.AWSCreateIntegrationSucceeded(&analytics.AWSCreateIntegrationOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.AWSCreateIntegrationSucceeded(&analytics.AWSCreateIntegrationOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
@@ -111,10 +148,13 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
CompanyName: user.CompanyName,
|
|
|
AccountId: request.AccountId,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking aws create integration")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "aws-create-integration-failure" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.AWSCreateIntegrationFailed(&analytics.AWSCreateIntegrationOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.AWSCreateIntegrationFailed(&analytics.AWSCreateIntegrationOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
@@ -124,26 +164,35 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
ErrorMessage: request.ErrorMessage,
|
|
|
ExternalId: request.ExternalId,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking aws create integration failure")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "credential-step-complete" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.CredentialStepTrack(&analytics.CredentialStepTrackOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.CredentialStepTrack(&analytics.CredentialStepTrackOpts{
|
|
|
UserScopedTrackOpts: analytics.GetUserScopedTrackOpts(user.ID),
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking credential step complete")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "pre-provisioning-check-started" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.PreProvisionCheckTrack(&analytics.PreProvisionCheckTrackOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.PreProvisionCheckTrack(&analytics.PreProvisionCheckTrackOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
LastName: user.LastName,
|
|
|
CompanyName: user.CompanyName,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking pre-provisioning check started")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "provisioning-started" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.ProvisioningAttemptTrack(&analytics.ProvisioningAttemptTrackOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.ProvisioningAttemptTrack(&analytics.ProvisioningAttemptTrackOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
@@ -151,10 +200,13 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
CompanyName: user.CompanyName,
|
|
|
Region: request.Region,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking provisioning started")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if request.Step == "provisioning-failed" {
|
|
|
- v.Config().AnalyticsClient.Track(analytics.ProvisionFailureTrack(&analytics.ProvisioningAttemptTrackOpts{
|
|
|
+ err := v.Config().AnalyticsClient.Track(analytics.ProvisionFailureTrack(&analytics.ProvisioningAttemptTrackOpts{
|
|
|
ProjectScopedTrackOpts: analytics.GetProjectScopedTrackOpts(user.ID, project.ID),
|
|
|
Email: user.Email,
|
|
|
FirstName: user.FirstName,
|
|
|
@@ -163,6 +215,9 @@ func (v *UpdateOnboardingStepHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
|
|
ErrorMessage: request.ErrorMessage,
|
|
|
Region: request.Region,
|
|
|
}))
|
|
|
+ if err != nil {
|
|
|
+ _ = telemetry.Error(ctx, span, err, "error tracking provisioning failure")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
v.WriteResult(w, r, user.ToUserType())
|