Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions inventory/inventory/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
dep_location = os.path.normpath(os.path.join(os.path.dirname(__file__), '..', 'site-packages'))
sys.path.append(dep_location)

from flask import Flask, request, jsonify
from flask import Flask, request, jsonify, Response
import time
import signal

Expand Down Expand Up @@ -47,15 +47,19 @@ def __init__(self, id, name, image):

@app.route('/inventory', methods=['GET'])
def get_inventory():
resp = Response(jsonify([item.__dict__ for item in inventory_items]))
resp.headers.add("odigos-special-header", "inventory-service")
logging.info("Returning inventory")
return jsonify([item.__dict__ for item in inventory_items])
return resp

@app.route('/buy', methods=['POST'])
def buy_product():
product_id = request.args.get('id', type=int)
resp = Response(jsonify({"message": "Product purchased successfully"}))
resp.headers.add("odigos-special-header", "inventory-service")
logging.info(f"Buying product with id {product_id}")
time.sleep(1)
return jsonify({"message": "Product purchased successfully"})
return resp

def signal_handler(sig, frame):
logging.info('Terminating inventory service')
Expand Down
22 changes: 17 additions & 5 deletions membership/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,20 @@ import (
)

const (
httpPort = 8080
httpPort = 8080
pricingEndpointEnvName = "PRICING_SERVICE_HOST"
)

type IsMemberResponse struct {
IsMember bool `json:"isMember"`
}

func (imr *IsMemberResponse) CheckIsMember() bool {
return imr.IsMember
}

var tracer = otel.Tracer("github.com/keyval-dev/test-apps/kv-shop/membership")

func getPortFromEnvOrDefault() int {
port := httpPort
if envPort := os.Getenv("PORT"); envPort != "" {
Expand All @@ -36,16 +42,17 @@ func getPortFromEnvOrDefault() int {
return port
}

var tracer = otel.Tracer("github.com/keyval-dev/test-apps/kv-shop/membership")

func checkIfMember(ctx context.Context, userId uuid.UUID) bool {
_, span := tracer.Start(ctx, "checkIfMember")
defer span.End()

slog.Info("Checking if user is a member", "userId", userId)

// arbitrary decide if user is a member by it's id
isMember := userId.String()[29] >= '0' && userId.String()[29] <= '6'
res := IsMemberResponse{
IsMember: userId.String()[29] >= '0' && userId.String()[29] <= '6',
}
isMember := res.CheckIsMember()
span.SetAttributes(attribute.String("simple_demo.userId", userId.String()), attribute.Bool("simple_demo.is_member", isMember))

return isMember
Expand All @@ -54,9 +61,14 @@ func checkIfMember(ctx context.Context, userId uuid.UUID) bool {
func main() {
port := getPortFromEnvOrDefault()
slog.Info("Starting Membership service", "port", port)

http.HandleFunc("/isMember", func(writer http.ResponseWriter, request *http.Request) {
slog.Info("isMember called")

// inject odigos-special-header
writer.Header().Set("odigos-special-header", "membership-service")
request.Header.Set("odigos-special-header", "membership-service")

userId := uuid.New()

isMember := checkIfMember(request.Context(), userId)
Expand All @@ -77,7 +89,7 @@ func main() {
writer.WriteHeader(http.StatusInternalServerError)
return
}

req.Header.Set("odigos-special-header", "membership-service")
_, err = http.DefaultClient.Do(req)
if err != nil {
slog.Error("failed to call pricing service", "error", err)
Expand Down
Loading