Public maps · eShop

eShop, mapped from the code.

Microsoft's .NET Aspire reference app: ASP.NET Core APIs, a gRPC basket, Blazor web apps and MAUI clients over REST, gRPC and a RabbitMQ event bus. Kuuhaku read its source at commit dc7ea49, with no configuration and no hand-fixing, and found 19 services in C# and 31 connections: 20 over HTTP, 9 through queues, 1 through a shared database and 1 over gRPC. Each one below says how it was found.

Open the live mapMap your own repos
Kuuhaku's map of eShop: 19 services grouped into consumers and services, with 31 connections drawn between them

Services

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

ServiceStackRoleCallsCalled by
ordering_apiC# · ASP.NET Coreservice76
eventbusC# · .NETservice08
catalog_apiC# · ASP.NET Coreservice33
identity_apiC# · ASP.NET Coreservice06
webappC# · ASP.NET Coreconsumer51
basket_apiC# · ASP.NET Coreservice23
webhooks_apiC# · ASP.NET Coreservice23
eshop_apphostC# · .NETconsumer40
orderprocessorC# · .NETservice30
paymentprocessorC# · ASP.NET Coreservice21
webhookclientC# · ASP.NET Coreservice20
clientappC# · .NETconsumer10
eshop_servicedefaultsC# · .NETservice00
eventbusrabbitmqC# · .NETservice00
hybridappC# · .NETconsumer00
integrationeventlogefC# · .NETservice00
ordering_domainC# · .NETservice00
ordering_infrastructureC# · .NETservice00
webappcomponentsC# · .NETconsumer00

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
basket_apieventbusHTTPinferred1"eventbus" in Extensions/Extensions.cs:18
basket_apiidentity_apiHTTPconfig—WithReference identity-api in AppHost.cs
catalog_apieventbusHTTPinferred1"eventbus" in Extensions/Extensions.cs:31
catalog_apiordering_apiqueueinferred2new OrderStockConfirmedIntegrationEvent(…) in catalog_api IntegrationEvents/EventHandling/OrderStatusChangedToAwaitingValidationIntegrationEventHandler.cs:29, consumed in ordering_api Application/IntegrationEvents/EventHandling/OrderStockConfirmedIntegrationEventHandler.cs:6; new OrderStockRejectedIntegrationEvent(…) in catalog_api IntegrationEvents/EventHandling/OrderStatusChangedToAwaitingValidationIntegrationEventHandler.cs:28, consumed in ordering_api Application/IntegrationEvents/EventHandling/OrderStockRejectedIntegrationEventHandler.cs:4; new OrderStockConfirmedIntegrationEvent(…) in catalog_api IntegrationEvents/EventHandling/OrderStatusChangedToAwaitingValidationIntegrationEventHandler.cs:29, consumed in ordering_api Extensions/Extensions.cs:56; new OrderStockRejectedIntegrationEvent(…) in catalog_api IntegrationEvents/EventHandling/OrderStatusChangedToAwaitingValidationIntegrationEventHandler.cs:28, consumed in ordering_api Extensions/Extensions.cs:57
catalog_apiwebhooks_apiqueueinferred1new ProductPriceChangedIntegrationEvent(…) in catalog_api Apis/CatalogApi.cs:395, consumed in webhooks_api Extensions/Extensions.cs:21; new ProductPriceChangedIntegrationEvent(…) in catalog_api Apis/CatalogApi.cs:395, consumed in webhooks_api IntegrationEvents/ProductPriceChangedIntegrationEventHandler.cs:3
clientappbasket_apigRPCinferred1Basket client in Services/Basket/BasketService.cs, served in basket_api/Grpc/BasketService.cs
eshop_apphostcatalog_apiHTTPconfig11URL worked out at AppHost.cs:64, sent by ConfigureMobileBffRoutes in Extensions.cs:97
eshop_apphosteventbusHTTPinferred1"eventbus" in AppHost.cs:10
eshop_apphostidentity_apiHTTPconfig—YARP mobile-bff routes to identity-api in AppHost.cs
eshop_apphostordering_apiHTTPconfig—YARP mobile-bff routes to ordering-api in AppHost.cs
ordering_apibasket_apiqueueinferred1new OrderStartedIntegrationEvent(…) in ordering_api Application/Commands/CreateOrderCommandHandler.cs:32, consumed in basket_api Extensions/Extensions.cs:19; new OrderStartedIntegrationEvent(…) in ordering_api Application/Commands/CreateOrderCommandHandler.cs:32, consumed in basket_api IntegrationEvents/EventHandling/OrderStartedIntegrationEventHandler.cs:8
ordering_apicatalog_apiqueueinferred2new OrderStatusChangedToAwaitingValidationIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToAwaitingValidationDomainEventHandler.cs:33, consumed in catalog_api Extensions/Extensions.cs:32; new OrderStatusChangedToPaidIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToPaidDomainEventHandler.cs:32, consumed in catalog_api Extensions/Extensions.cs:33; new OrderStatusChangedToAwaitingValidationIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToAwaitingValidationDomainEventHandler.cs:33, consumed in catalog_api IntegrationEvents/EventHandling/OrderStatusChangedToAwaitingValidationIntegrationEventHandler.cs:7; new OrderStatusChangedToPaidIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToPaidDomainEventHandler.cs:32, consumed in catalog_api IntegrationEvents/EventHandling/OrderStatusChangedToPaidIntegrationEventHandler.cs:6
ordering_apieventbusHTTPinferred1"eventbus" in Extensions/Extensions.cs:28
ordering_apiidentity_apiHTTPconfig—WithReference identity-api in AppHost.cs
ordering_apipaymentprocessorqueueinferred1new OrderStatusChangedToStockConfirmedIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToStockConfirmedDomainEventHandler.cs:30, consumed in paymentprocessor IntegrationEvents/EventHandling/OrderStatusChangedToStockConfirmedIntegrationEventHandler.cs:7; new OrderStatusChangedToStockConfirmedIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToStockConfirmedDomainEventHandler.cs:30, consumed in paymentprocessor Program.cs:6
ordering_apiwebappqueueinferred5new OrderStatusChangedToAwaitingValidationIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToAwaitingValidationDomainEventHandler.cs:33, consumed in webapp Extensions/Extensions.cs:45; new OrderStatusChangedToPaidIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToPaidDomainEventHandler.cs:32, consumed in webapp Extensions/Extensions.cs:46; new OrderStatusChangedToStockConfirmedIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToStockConfirmedDomainEventHandler.cs:30, consumed in webapp Extensions/Extensions.cs:47; new OrderStatusChangedToShippedIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderShippedDomainEventHandler.cs:30, consumed in webapp Extensions/Extensions.cs:48
ordering_apiwebhooks_apiqueueinferred2new OrderStatusChangedToShippedIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderShippedDomainEventHandler.cs:30, consumed in webhooks_api Extensions/Extensions.cs:22; new OrderStatusChangedToPaidIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToPaidDomainEventHandler.cs:32, consumed in webhooks_api Extensions/Extensions.cs:23; new OrderStatusChangedToPaidIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderStatusChangedToPaidDomainEventHandler.cs:32, consumed in webhooks_api IntegrationEvents/OrderStatusChangedToPaidIntegrationEventHandler.cs:6; new OrderStatusChangedToShippedIntegrationEvent(…) in ordering_api Application/DomainEventHandlers/OrderShippedDomainEventHandler.cs:30, consumed in webhooks_api IntegrationEvents/OrderStatusChangedToShippedIntegrationEventHandler.cs:6
orderprocessoreventbusHTTPinferred1"eventbus" in Extensions/Extensions.cs:10
orderprocessorordering_apishared databaseconfig—WithReference(orderDb) in orderprocessor and WithReference(orderDb) in ordering_api name the same database aspire orderingdb
orderprocessorordering_apiqueueinferred1new GracePeriodConfirmedIntegrationEvent(…) in orderprocessor Services/GracePeriodManagerService.cs:56, consumed in ordering_api Application/IntegrationEvents/EventHandling/GracePeriodConfirmedIntegrationEventHandler.cs:5; new GracePeriodConfirmedIntegrationEvent(…) in orderprocessor Services/GracePeriodManagerService.cs:56, consumed in ordering_api Extensions/Extensions.cs:55
paymentprocessoreventbusHTTPinferred1"EventBus" in Program.cs:5
paymentprocessorordering_apiqueueinferred2new OrderPaymentFailedIntegrationEvent(…) in paymentprocessor IntegrationEvents/EventHandling/OrderStatusChangedToStockConfirmedIntegrationEventHandler.cs:27, consumed in ordering_api Application/IntegrationEvents/EventHandling/OrderPaymentFailedIntegrationEventHandler.cs:6; new OrderPaymentSucceededIntegrationEvent(…) in paymentprocessor IntegrationEvents/EventHandling/OrderStatusChangedToStockConfirmedIntegrationEventHandler.cs:23, consumed in ordering_api Application/IntegrationEvents/EventHandling/OrderPaymentSucceededIntegrationEventHandler.cs:6; new OrderPaymentFailedIntegrationEvent(…) in paymentprocessor IntegrationEvents/EventHandling/OrderStatusChangedToStockConfirmedIntegrationEventHandler.cs:27, consumed in ordering_api Extensions/Extensions.cs:58; new OrderPaymentSucceededIntegrationEvent(…) in paymentprocessor IntegrationEvents/EventHandling/OrderStatusChangedToStockConfirmedIntegrationEventHandler.cs:23, consumed in ordering_api Extensions/Extensions.cs:59
webappbasket_apiHTTPconfig1http://basket-api in Extensions/Extensions.cs; WithReference basket-api in AppHost.cs
webappcatalog_apiHTTPconfig8URL worked out at Program.cs:32
webappeventbusHTTPinferred1"EventBus" in Extensions/Extensions.cs:17
webappidentity_apiHTTPconfig—WithReference identity-api in AppHost.cs
webappordering_apiHTTPconfig2URL worked out at Services/OrderingService.cs:9
webhookclientidentity_apiHTTPconfig—WithReference identity-api in AppHost.cs
webhookclientwebhooks_apiHTTPconfig2URL worked out at Services/WebHooksClient.cs:7
webhooks_apieventbusHTTPinferred1"eventbus" in Extensions/Extensions.cs:7
webhooks_apiidentity_apiHTTPconfig—WithReference identity-api in AppHost.cs

Left for a person

4 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.