Skip to content

Commit

Permalink
chore(cart): add tracing
Browse files Browse the repository at this point in the history
  • Loading branch information
IvanMaidurov committed Feb 1, 2024
1 parent 1f79296 commit c86d4bb
Show file tree
Hide file tree
Showing 15 changed files with 484 additions and 16 deletions.
19 changes: 19 additions & 0 deletions cart/application/cartCache.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"encoding/gob"
"fmt"
"go.opencensus.io/trace"
"strings"
"time"

Expand Down Expand Up @@ -114,6 +115,9 @@ func (cs *CartSessionCache) Inject(

// BuildIdentifier creates a CartCacheIdentifier based on the login state
func (cs *CartSessionCache) BuildIdentifier(ctx context.Context, session *web.Session) (CartCacheIdentifier, error) {
ctx, span := trace.StartSpan(ctx, "cart/CartSessionCache/BuildIdentifier")
defer span.End()

identity := cs.webIdentityService.Identify(ctx, web.RequestFromContext(ctx))
if identity != nil {
return CartCacheIdentifier{
Expand All @@ -139,6 +143,9 @@ func (cs *CartSessionCache) BuildIdentifier(ctx context.Context, session *web.Se

// GetCart fetches a Cart from the Cache
func (cs *CartSessionCache) GetCart(ctx context.Context, session *web.Session, id CartCacheIdentifier) (*cart.Cart, error) {
ctx, span := trace.StartSpan(ctx, "cart/CartSessionCache/GetCart")
defer span.End()

if cache, ok := session.Load(CartSessionCacheCacheKeyPrefix + id.CacheKey()); ok {
if cachedCartsEntry, ok := cache.(CachedCartEntry); ok {
cs.logger.WithContext(ctx).Debugf("Found cached cart: %v InValid: %v", id.CacheKey(), cachedCartsEntry.IsInvalid)
Expand Down Expand Up @@ -168,6 +175,9 @@ func (cs *CartSessionCache) GetCart(ctx context.Context, session *web.Session, i

// CacheCart adds a Cart to the Cache
func (cs *CartSessionCache) CacheCart(ctx context.Context, session *web.Session, id CartCacheIdentifier, cartForCache *cart.Cart) error {
ctx, span := trace.StartSpan(ctx, "cart/CartSessionCache/CacheCart")
defer span.End()

if cartForCache == nil {
return errors.New("no cart given to cache")
}
Expand All @@ -183,6 +193,9 @@ func (cs *CartSessionCache) CacheCart(ctx context.Context, session *web.Session,

// Invalidate a Cache Entry
func (cs *CartSessionCache) Invalidate(ctx context.Context, session *web.Session, id CartCacheIdentifier) error {
ctx, span := trace.StartSpan(ctx, "cart/CartSessionCache/Invalidate")
defer span.End()

if cache, ok := session.Load(CartSessionCacheCacheKeyPrefix + id.CacheKey()); ok {
if cachedCartsEntry, ok := cache.(CachedCartEntry); ok {
cachedCartsEntry.IsInvalid = true
Expand All @@ -197,6 +210,9 @@ func (cs *CartSessionCache) Invalidate(ctx context.Context, session *web.Session

// Delete a Cache entry
func (cs *CartSessionCache) Delete(ctx context.Context, session *web.Session, id CartCacheIdentifier) error {
ctx, span := trace.StartSpan(ctx, "cart/CartSessionCache/Delete")
defer span.End()

if _, ok := session.Load(CartSessionCacheCacheKeyPrefix + id.CacheKey()); ok {
session.Delete(CartSessionCacheCacheKeyPrefix + id.CacheKey())

Expand All @@ -209,6 +225,9 @@ func (cs *CartSessionCache) Delete(ctx context.Context, session *web.Session, id

// DeleteAll empties the Cache
func (cs *CartSessionCache) DeleteAll(ctx context.Context, session *web.Session) error {
ctx, span := trace.StartSpan(ctx, "cart/CartSessionCache/DeleteAll")
defer span.End()

deleted := false
for _, k := range session.Keys() {
if stringKey, ok := k.(string); ok {
Expand Down
52 changes: 52 additions & 0 deletions cart/application/cartReceiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"go.opencensus.io/trace"

"flamingo.me/flamingo/v3/core/auth"
"flamingo.me/flamingo/v3/framework/web"
Expand Down Expand Up @@ -92,6 +93,9 @@ func (cs *BaseCartReceiver) Inject(
// RestoreCart restores a previously used guest / customer cart
// deprecated: use CartService.RestoreCart(), ensure that your cart implements the CompleteBehaviour
func (cs *BaseCartReceiver) RestoreCart(ctx context.Context, session *web.Session, cartToRestore cartDomain.Cart) (*cartDomain.Cart, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/RestoreCart")
defer span.End()

identity := cs.webIdentityService.Identify(ctx, web.RequestFromContext(ctx))
if identity != nil {
restoredCart, err := cs.customerCartService.RestoreCart(ctx, identity, cartToRestore)
Expand All @@ -115,6 +119,9 @@ func (cs *BaseCartReceiver) RestoreCart(ctx context.Context, session *web.Sessio

// ShouldHaveCart - checks if there should be a cart. Indicated if a call to GetCart should return a real cart
func (cs *BaseCartReceiver) ShouldHaveCart(ctx context.Context, session *web.Session) bool {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/ShouldHaveCart")
defer span.End()

if cs.webIdentityService.Identify(ctx, web.RequestFromContext(ctx)) != nil {
return true
}
Expand All @@ -130,6 +137,9 @@ func (cs *BaseCartReceiver) ShouldHaveGuestCart(session *web.Session) bool {

// ViewDecoratedCart return a Cart for view
func (cs *CartReceiverService) ViewDecoratedCart(ctx context.Context, session *web.Session) (*decorator.DecoratedCart, error) {
ctx, span := trace.StartSpan(ctx, "cart/CartReceiverService/ViewDecoratedCart")
defer span.End()

cart, err := cs.ViewCart(ctx, session)
if err != nil {
return nil, err
Expand All @@ -140,6 +150,9 @@ func (cs *CartReceiverService) ViewDecoratedCart(ctx context.Context, session *w

// ViewDecoratedCartWithoutCache return a Cart for view
func (cs *CartReceiverService) ViewDecoratedCartWithoutCache(ctx context.Context, session *web.Session) (*decorator.DecoratedCart, error) {
ctx, span := trace.StartSpan(ctx, "cart/CartReceiverService/ViewDecoratedCartWithoutCache")
defer span.End()

cart, err := cs.GetCartWithoutCache(ctx, session)
if err != nil {
return nil, err
Expand All @@ -150,6 +163,9 @@ func (cs *CartReceiverService) ViewDecoratedCartWithoutCache(ctx context.Context

// ViewCart return a Cart for view
func (cs *BaseCartReceiver) ViewCart(ctx context.Context, session *web.Session) (*cartDomain.Cart, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/ViewCart")
defer span.End()

if cs.ShouldHaveCart(ctx, session) {
cart, _, err := cs.GetCart(ctx, session)
if err != nil {
Expand All @@ -163,6 +179,9 @@ func (cs *BaseCartReceiver) ViewCart(ctx context.Context, session *web.Session)
}

func (cs *BaseCartReceiver) storeCartInCacheIfCacheIsEnabled(ctx context.Context, session *web.Session, cart *cartDomain.Cart) error {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/storeCartInCacheIfCacheIsEnabled")
defer span.End()

if cs.cartCache == nil {
return errors.New("no cache")
}
Expand All @@ -177,6 +196,9 @@ func (cs *BaseCartReceiver) storeCartInCacheIfCacheIsEnabled(ctx context.Context

// GetCart Get the correct Cart (either Guest or User)
func (cs *BaseCartReceiver) GetCart(ctx context.Context, session *web.Session) (*cartDomain.Cart, cartDomain.ModifyBehaviour, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/GetCart")
defer span.End()

if cs.webIdentityService.Identify(ctx, web.RequestFromContext(ctx)) != nil {
return cs.getCustomerCart(ctx, session)
}
Expand All @@ -188,6 +210,9 @@ func (cs *BaseCartReceiver) GetCart(ctx context.Context, session *web.Session) (

// ModifyBehaviour returns the correct behaviour to modify the cart for the current user (guest/customer)
func (cs *BaseCartReceiver) ModifyBehaviour(ctx context.Context) (cartDomain.ModifyBehaviour, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/ModifyBehaviour")
defer span.End()

identity := cs.webIdentityService.Identify(ctx, web.RequestFromContext(ctx))
if identity != nil {
return cs.customerCartService.GetModifyBehaviour(ctx, identity)
Expand All @@ -197,6 +222,9 @@ func (cs *BaseCartReceiver) ModifyBehaviour(ctx context.Context) (cartDomain.Mod

// getCustomerCart
func (cs *BaseCartReceiver) getCustomerCart(ctx context.Context, session *web.Session) (*cartDomain.Cart, cartDomain.ModifyBehaviour, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/getCustomerCart")
defer span.End()

cart, found, err := cs.getCartFromCacheIfCacheIsEnabled(ctx, session)

switch err {
Expand Down Expand Up @@ -229,6 +257,9 @@ func (cs *BaseCartReceiver) getCustomerCart(ctx context.Context, session *web.Se
}

func (cs *BaseCartReceiver) getCartFromCacheIfCacheIsEnabled(ctx context.Context, session *web.Session) (*cartDomain.Cart, bool, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/getCartFromCacheIfCacheIsEnabled")
defer span.End()

if cs.cartCache == nil {
return nil, false, nil
}
Expand All @@ -253,6 +284,9 @@ func (cs *BaseCartReceiver) getCartFromCacheIfCacheIsEnabled(ctx context.Context

// getExistingGuestCart
func (cs *BaseCartReceiver) getExistingGuestCart(ctx context.Context, session *web.Session) (*cartDomain.Cart, cartDomain.ModifyBehaviour, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/getExistingGuestCart")
defer span.End()

cart, found, err := cs.getCartFromCacheIfCacheIsEnabled(ctx, session)

if err != nil {
Expand Down Expand Up @@ -296,6 +330,9 @@ func (cs *BaseCartReceiver) getExistingGuestCart(ctx context.Context, session *w

// getNewGuestCart
func (cs *BaseCartReceiver) getNewGuestCart(ctx context.Context, session *web.Session) (*cartDomain.Cart, cartDomain.ModifyBehaviour, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/getNewGuestCart")
defer span.End()

guestCart, err := cs.guestCartService.GetNewCart(ctx)
if err != nil {
if !errors.Is(err, context.Canceled) {
Expand Down Expand Up @@ -325,6 +362,9 @@ func (cs *BaseCartReceiver) getNewGuestCart(ctx context.Context, session *web.Se

// GetCartWithoutCache - forces to get the cart without cache
func (cs *BaseCartReceiver) GetCartWithoutCache(ctx context.Context, session *web.Session) (*cartDomain.Cart, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/GetCartWithoutCache")
defer span.End()

// Invalidate cart cache
if cs.eventRouter != nil {
cs.eventRouter.Dispatch(ctx, &cartDomain.InvalidateCartEvent{Session: session})
Expand All @@ -345,6 +385,9 @@ func (cs *BaseCartReceiver) GetCartWithoutCache(ctx context.Context, session *we

// ViewGuestCart try to get the guest Cart - even if the user is logged in
func (cs *BaseCartReceiver) ViewGuestCart(ctx context.Context, session *web.Session) (*cartDomain.Cart, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/ViewGuestCart")
defer span.End()

if cs.ShouldHaveGuestCart(session) {
guestCart, err := cs.getSessionGuestCart(ctx, session)
if err != nil {
Expand All @@ -370,6 +413,9 @@ func (cs *CartService) DeleteSavedSessionGuestCartID(session *web.Session) error

// getSessionGuestCart
func (cs *BaseCartReceiver) getSessionGuestCart(ctx context.Context, session *web.Session) (*cartDomain.Cart, error) {
ctx, span := trace.StartSpan(ctx, "cart/BaseCartReceiver/getSessionGuestCart")
defer span.End()

if guestcartid, ok := session.Load(GuestCartSessionKey); ok {
existingCart, err := cs.guestCartService.GetCart(ctx, guestcartid.(string))
if err != nil {
Expand All @@ -388,6 +434,9 @@ func (cs *BaseCartReceiver) getSessionGuestCart(ctx context.Context, session *we

// DecorateCart Get the correct Cart
func (cs *CartReceiverService) DecorateCart(ctx context.Context, cart *cartDomain.Cart) (*decorator.DecoratedCart, error) {
ctx, span := trace.StartSpan(ctx, "cart/CartReceiverService/DecorateCart")
defer span.End()

if cart == nil {
return nil, errors.New("no cart given")
}
Expand All @@ -397,6 +446,9 @@ func (cs *CartReceiverService) DecorateCart(ctx context.Context, cart *cartDomai

// GetDecoratedCart Get the correct Cart
func (cs *CartReceiverService) GetDecoratedCart(ctx context.Context, session *web.Session) (*decorator.DecoratedCart, cartDomain.ModifyBehaviour, error) {
ctx, span := trace.StartSpan(ctx, "cart/CartReceiverService/GetDecoratedCart")
defer span.End()

cart, behaviour, err := cs.GetCart(ctx, session)
if err != nil {
return nil, nil, err
Expand Down
Loading

0 comments on commit c86d4bb

Please sign in to comment.