Browse Source

initial telemetry for invite flow (#3046)

Co-authored-by: David Townley <davidtownley@Davids-MacBook-Air.local>
dt3-5 3 years ago
parent
commit
e33c458678
2 changed files with 20 additions and 14 deletions
  1. 0 11
      api/server/handlers/user/create.go
  2. 20 3
      ee/api/server/handlers/invite/create.go

+ 0 - 11
api/server/handlers/user/create.go

@@ -1,12 +1,9 @@
 package user
 
 import (
-	"context"
 	"fmt"
 	"net/http"
 
-	"github.com/porter-dev/porter/internal/telemetry"
-
 	"github.com/porter-dev/porter/api/server/authn"
 	"github.com/porter-dev/porter/api/server/handlers"
 	"github.com/porter-dev/porter/api/server/shared"
@@ -34,14 +31,6 @@ func NewUserCreateHandler(
 }
 
 func (u *UserCreateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
-	tracer, _ := telemetry.InitTracer(context.Background(), u.Config().TelemetryConfig)
-	defer tracer.Shutdown()
-
-	// just for demonstration purposes
-	_, span := telemetry.NewSpan(context.Background(), "create-new-user")
-	defer span.End()
-	telemetry.WithAttributes(span, telemetry.AttributeKV{Key: "hello-world", Value: "hello, world!"})
-
 	request := &types.CreateUserRequest{}
 
 	ok := u.DecodeAndValidate(w, r, request)

+ 20 - 3
ee/api/server/handlers/invite/create.go

@@ -4,10 +4,13 @@
 package invite
 
 import (
+	"context"
 	"fmt"
 	"net/http"
 	"time"
 
+	"github.com/porter-dev/porter/internal/telemetry"
+
 	"github.com/porter-dev/porter/api/server/handlers"
 	"github.com/porter-dev/porter/api/server/shared"
 	"github.com/porter-dev/porter/api/server/shared/apierrors"
@@ -33,27 +36,41 @@ func NewInviteCreateHandler(
 }
 
 func (c *InviteCreateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	tracer, _ := telemetry.InitTracer(context.Background(), c.Config().TelemetryConfig)
+	defer tracer.Shutdown()
+
+	// just for demonstration purposes
+	ctx, span := telemetry.NewSpan(r.Context(), "serve-create-invite")
+	defer span.End()
+
 	user, _ := r.Context().Value(types.UserScope).(*models.User)
 	project, _ := r.Context().Value(types.ProjectScope).(*models.Project)
 
 	request := &types.CreateInviteRequest{}
 
 	if ok := c.DecodeAndValidate(w, r, request); !ok {
+		telemetry.WithAttributes(span, telemetry.AttributeKV{Key: "message", Value: "failed to decode and validate request"})
 		return
 	}
 
 	// create invite model
 	invite, err := CreateInviteWithProject(request, project.ID)
 	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(telemetry.Error(ctx, span, err, "error creating invite with project")))
 		return
 	}
 
+	telemetry.WithAttributes(span,
+		telemetry.AttributeKV{Key: "project-id", Value: invite.ProjectID},
+		telemetry.AttributeKV{Key: "user-id", Value: invite.UserID},
+		telemetry.AttributeKV{Key: "kind", Value: invite.Kind},
+	)
+
 	// write to database
 	invite, err = c.Repo().Invite().CreateInvite(invite)
 
 	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(telemetry.Error(ctx, span, err, "error creating invite in repo")))
 		return
 	}
 
@@ -67,7 +84,7 @@ func (c *InviteCreateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 			ProjectOwnerEmail: user.Email,
 		},
 	); err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(telemetry.Error(ctx, span, err, "error sending project invite email")))
 		return
 	}