Public maps · Online Boutique

Online Boutique, mapped from the code.

Google's microservices demo: eleven services in Go, C#, Node, Python and Java talking gRPC. Kuuhaku read its source at commit 38e7348, with no configuration and no hand-fixing, and found 12 services in Java, Go, JavaScript and Python, and 16 connections: 14 over gRPC and 2 over HTTP. Each one below says how it was found.

Open the live mapMap your own repos
Kuuhaku's map of Online Boutique: 12 services grouped into consumers and services, with 16 connections drawn between them

Services

Every repo or deployable the scanner found, with how many connections leave it and reach it.

ServiceStackRoleCallsCalled by
frontendGo · Go · muxservice81
checkoutserviceGoservice61
productcatalogserviceGoservice03
cartservicenot read: unknown onlyservice02
currencyserviceJavaScript · Nodeservice02
recommendationservicePythonservice11
shippingserviceGoservice02
adserviceJavaservice01
emailservicePythonservice01
loadgeneratorPython · Flaskconsumer10
paymentserviceJavaScript · Nodeservice01
shoppingassistantservicePython · Flaskservice01

Connections

config: the address is written in configuration (an env file, a compose file, a proxy route) and the call is matched to it. inferred: the call's path matches a route of the target and nothing contradicts it. Call sites count the places in the code that make the call.

FromToTypeEvidenceCall sitesHow it was found
checkoutservicecartservicegRPCconfig3CART_SERVICE_ADDR = cartservice:7070 in checkoutservice.yaml; CartService client in main.go, served in cartservice/src/services/CartService.cs
checkoutservicecurrencyservicegRPCconfig2CURRENCY_SERVICE_ADDR = currencyservice:7000 in checkoutservice.yaml; CurrencyService client in main.go, served in currencyservice/server.js
checkoutserviceemailservicegRPCconfig2EMAIL_SERVICE_ADDR = emailservice:5000 in checkoutservice.yaml; EmailService client in main.go, served in emailservice/email_server.py
checkoutservicepaymentservicegRPCconfig2PAYMENT_SERVICE_ADDR = paymentservice:50051 in checkoutservice.yaml; PaymentService client in main.go, served in paymentservice/server.js
checkoutserviceproductcatalogservicegRPCconfig2PRODUCT_CATALOG_SERVICE_ADDR = productcatalogservice:3550 in checkoutservice.yaml; ProductCatalogService client in main.go, served in productcatalogservice/server.go
checkoutserviceshippingservicegRPCconfig3SHIPPING_SERVICE_ADDR = shippingservice:50051 in checkoutservice.yaml; ShippingService client in main.go, served in shippingservice/main.go
frontendadservicegRPCconfig2AD_SERVICE_ADDR = adservice:9555 in frontend.yaml; AdService client in rpc.go, served in adservice/src/main/java/hipstershop/AdService.java
frontendcartservicegRPCconfig4CART_SERVICE_ADDR = cartservice:7070 in frontend.yaml; CartService client in rpc.go, served in cartservice/src/services/CartService.cs
frontendcheckoutservicegRPCconfig2CHECKOUT_SERVICE_ADDR = checkoutservice:5050 in frontend.yaml; CheckoutService client in handlers.go, served in checkoutservice/main.go
frontendcurrencyservicegRPCconfig3CURRENCY_SERVICE_ADDR = currencyservice:7000 in frontend.yaml; CurrencyService client in rpc.go, served in currencyservice/server.js
frontendproductcatalogservicegRPCconfig3PRODUCT_CATALOG_SERVICE_ADDR = productcatalogservice:3550 in frontend.yaml; ProductCatalogService client in rpc.go, served in productcatalogservice/server.go
frontendrecommendationservicegRPCconfig2RECOMMENDATION_SERVICE_ADDR = recommendationservice:8080 in frontend.yaml; RecommendationService client in rpc.go, served in recommendationservice/recommendation_server.py
frontendshippingservicegRPCconfig2SHIPPING_SERVICE_ADDR = shippingservice:50051 in frontend.yaml; ShippingService client in rpc.go, served in shippingservice/main.go
frontendshoppingassistantserviceHTTPconfig1SHOPPING_ASSISTANT_SERVICE_ADDR = shoppingassistantservice:80 in frontend.yaml
loadgeneratorfrontendHTTPconfig1FRONTEND_ADDR = frontend:80 in loadgenerator.yaml
recommendationserviceproductcatalogservicegRPCconfig2PRODUCT_CATALOG_SERVICE_ADDR = productcatalogservice:3550 in recommendationservice.yaml; ProductCatalogService client in recommendation_server.py, served in productcatalogservice/server.go

Left for a person

2 items the scanner would not settle on its own and put in the review inbox instead of guessing:

Other systems

Your own system

Run npx kuuhaku scan . in a folder of repos: it reads the code on your machine and only the graph leaves it. Or connect GitHub or Bitbucket and let the hosted runner scan with a read-only key. The map, a page per repo, a review inbox and a check on every pull request follow. Start free.