Sock Shop, mapped from the code.
Weaveworks' Sock Shop: a Node front end with Java and Go services and RabbitMQ, one repository per service. Kuuhaku read its source, with no configuration and no hand-fixing, and found 8 services in Java, Go and JavaScript, and 7 connections: 6 over HTTP and 1 through a queue. Each one below says how it was found.
Services
Every repo or deployable the scanner found, with how many connections leave it and reach it.
| Service | Stack | Role | Calls | Called by |
|---|---|---|---|---|
front_end | JavaScript · Express | service | 4 | 0 |
orders | Java · Spring Boot | service | 2 | 1 |
shipping | Java · Spring Boot | service | 1 | 1 |
carts | Java · Spring Boot | service | 0 | 1 |
catalogue | Go | service | 0 | 1 |
payment | Go | service | 0 | 1 |
queue_master | Java · Spring Boot | worker | 0 | 1 |
user | Go | service | 0 | 1 |
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.
| From | To | Type | Evidence | Call sites | How it was found |
|---|---|---|---|---|---|
front_end | carts | HTTP | config | 7 | literal in code: carts is the application or compose service name of carts |
front_end | catalogue | HTTP | config | 8 | literal in code: catalogue is the application or compose service name of catalogue |
front_end | orders | HTTP | config | 4 | literal in code: orders is the application or compose service name of orders |
front_end | user | HTTP | config | 16 | literal in code: user is the application or compose service name of user |
orders | payment | HTTP | inferred | 1 | "payment" in src/main/java/works/weave/socks/orders/config/OrdersConfigurationProperties.java:12 |
orders | shipping | HTTP | inferred | 1 | "shipping" in src/main/java/works/weave/socks/orders/config/OrdersConfigurationProperties.java:16 |
shipping | queue_master | queue | inferred | 1 | 1 queue published by shipping, consumed by queue_master |
Left for a person
1 item the scanner would not settle on its own and put in the review inbox instead of guessing:
requestinfront_end: base URL assigned at runtime (api/orders/index.js:83)
Other systems
- OpenTelemetry Demo: 23 services, 30 connections
- Train Ticket: 48 services, 140 connections
- Online Boutique: 12 services, 16 connections
- eShop: 19 services, 31 connections
- Robot Shop: 9 services, 12 connections
- Bank of Anthos: 8 services, 9 connections
- Quarkus Super Heroes: 7 services, 6 connections
- Spring PetClinic Microservices: 7 services, 14 connections
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.