ChaosLab · service intelligence

Dependency map

Explore how a local PetClinic request crosses services, what a failure could affect, and which observations support the prediction.

Saved snapshot · generated 2026-10-11 03:12:27 · this report does not poll live services

7active containers
14mapped dependencies
5user actions

Service topology

Source-backed relationships are reconciled with Docker Compose, Eureka, Zipkin, Prometheus and Locust observations. Missing telemetry is unknown, not zero impact. Dashed arrows are startup dependencies or manual corrections.

flowchart LR
  users(["Users (Locust)"])
  subgraph app["App services"]
    api_gateway["api-gateway<br/>100% of requests, 1 instance"]
    admin_server["admin-server<br/>0% of requests, 1 instance"]
    customers_service["customers-service<br/>71% of requests, 1 instance"]
    vets_service["vets-service<br/>22% of requests, 1 instance"]
    visits_service["visits-service<br/>40% of requests, 1 instance"]
    genai_service["genai-service<br/>0% of requests, 0 instances"]
  end
  subgraph platform["Platform"]
    config_server["config-server<br/>0% of requests, 1 instance"]
    discovery_server["discovery-server<br/>0% of requests, 1 instance"]
  end
  customers_db[("customers-db<br/>embedded in customers-service")]
  visits_db[("visits-db<br/>embedded in visits-service")]
  vets_db[("vets-db<br/>embedded in vets-service")]
  users ==> api_gateway
  api_gateway -.->|"manual correction"| customers_service
  api_gateway -.->|"manual correction"| visits_service
  api_gateway -->|"list vets"| vets_service
  api_gateway -->|"genai chat"| genai_service
  discovery_server -.->|"config at startup"| config_server
  customers_service -.->|"config at startup"| config_server
  visits_service -.->|"config at startup"| config_server
  vets_service -.->|"config at startup"| config_server
  api_gateway -.->|"config at startup"| config_server
  admin_server -.->|"config at startup"| config_server
  customers_service -.->|"discovery at startup"| discovery_server
  visits_service -.->|"discovery at startup"| discovery_server
  vets_service -.->|"discovery at startup"| discovery_server
  api_gateway -.->|"discovery at startup"| discovery_server
  admin_server -.->|"discovery at startup"| discovery_server
  customers_service -.->|"inferred persistence"| customers_db
  visits_service -.->|"inferred persistence"| visits_db
  vets_service -.->|"inferred persistence"| vets_db

Services

Traffic share and restart hints help identify high-impact targets.

ServiceRoleShare of user requestsInstancesAuto-restartNeeds at startupRisk hints
api-gatewayentry point100%1noconfig-server, discovery-serversingle instance; no auto-restart; on 100% of user requests
customers-serviceservice71%1noconfig-server, discovery-serversingle instance; no auto-restart; on 71% of user requests
visits-serviceservice40%1noconfig-server, discovery-serversingle instance; no auto-restart; on 40% of user requests
vets-serviceservice22%1noconfig-server, discovery-serversingle instance; no auto-restart; on 22% of user requests
admin-serverservice0%1noconfig-server, discovery-serversingle instance; no auto-restart
config-serverplatform0%1no-single instance; no auto-restart; 6 services need it to start
discovery-serverplatform0%1noconfig-serversingle instance; no auto-restart; 5 services need it to start
genai-serviceservice0%0noconfig-server, discovery-serverinactive profile
customers-dbdatastore0%unknownn/a-datasource not verified
visits-dbdatastore0%unknownn/a-datasource not verified
vets-dbdatastore0%unknownn/a-datasource not verified

User actions and data flows

Connect each user-visible route to the services it needs.

User actionRouteShare of requestsPasses throughSource
list owners/api/customer/owners32%api-gateway -> customers-serviceunknown
owner details/api/gateway/owners/\d+33%api-gateway -> customers-service -> visits-servicemanual correction
list vets/api/vet/vets22%api-gateway -> vets-serviceunknown
pet types/api/customer/petTypes7%api-gateway -> customers-serviceunknown
add visit/api/visit/owners/\d+/pets/\d+/visits7%api-gateway -> visits-serviceunknown

Dependency semantics

Runtime calls, fallbacks, and startup requirements have different failure effects.

ConsumerProviderFeaturePurposePhaseVerifiedIf unavailableEvidence
api-gatewaycustomers-servicelist ownersroutingruntimeverifiedGateway route returns its 503 fallbackspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/resources/application.yml; chaoslab run kill customers-service (2026-10-10); chaoslab run cpu customers-service --cpus 0.1 (2026-10-10)
api-gatewaycustomers-serviceowner detailsrequest_dataruntimeverifiedOwner lookup has no local fallbackspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java#getOwnerDetails; chaoslab run kill customers-service (2026-10-10); chaoslab run cpu customers-service --cpus 0.1 (2026-10-10)
api-gatewayvisits-serviceowner detailsrequest_dataruntimeverifiedCircuit breaker can supply an empty visits listspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java#emptyVisitsForPets; chaoslab run delay visits-service --delay-ms 600 (2026-10-10); chaoslab run loss visits-service --loss-pct 30 (2026-10-10); chaoslab run kill visits-service (2026-10-10)
api-gatewayvets-servicelist vetsroutingruntimeverifiedGateway route returns its 503 fallbackspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/resources/application.yml; chaoslab run pause vets-service (2026-10-10)
api-gatewaycustomers-servicepet typesroutingruntimeverifiedGateway route returns its 503 fallbackspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/resources/application.yml; chaoslab run kill customers-service (2026-10-10)
api-gatewayvisits-serviceadd visitroutingruntimeverifiedGateway route returns its 503 fallbackspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/resources/application.yml; chaoslab run delay visits-service --delay-ms 600 (2026-10-10); chaoslab run loss visits-service --loss-pct 30 (2026-10-10); chaoslab run kill visits-service (2026-10-10)
api-gatewaygenai-servicegenai chatroutingruntimeverifiedOptional chatbot route returns its 503 fallbackspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/resources/application.yml
discovery-serverconfig-serverserviceconfigurationstartup, restartverifiedDocker-profile config import failsspring-petclinic-microservices/spring-petclinic-discovery-server/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
discovery-serverconfig-serverserviceconfigurationruntimeunknownRunning service may retain its loaded configurationspring-petclinic-microservices/spring-petclinic-discovery-server/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
customers-serviceconfig-serverserviceconfigurationstartup, restartverifiedDocker-profile config import failsspring-petclinic-microservices/spring-petclinic-customers-service/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
customers-serviceconfig-serverserviceconfigurationruntimeunknownRunning service may retain its loaded configurationspring-petclinic-microservices/spring-petclinic-customers-service/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
visits-serviceconfig-serverserviceconfigurationstartup, restartverifiedDocker-profile config import failsspring-petclinic-microservices/spring-petclinic-visits-service/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
visits-serviceconfig-serverserviceconfigurationruntimeunknownRunning service may retain its loaded configurationspring-petclinic-microservices/spring-petclinic-visits-service/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
vets-serviceconfig-serverserviceconfigurationstartup, restartverifiedDocker-profile config import failsspring-petclinic-microservices/spring-petclinic-vets-service/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
vets-serviceconfig-serverserviceconfigurationruntimeunknownRunning service may retain its loaded configurationspring-petclinic-microservices/spring-petclinic-vets-service/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
api-gatewayconfig-serverserviceconfigurationstartup, restartverifiedDocker-profile config import failsspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
api-gatewayconfig-serverserviceconfigurationruntimeunknownRunning service may retain its loaded configurationspring-petclinic-microservices/spring-petclinic-api-gateway/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
admin-serverconfig-serverserviceconfigurationstartup, restartverifiedDocker-profile config import failsspring-petclinic-microservices/spring-petclinic-admin-server/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
admin-serverconfig-serverserviceconfigurationruntimeunknownRunning service may retain its loaded configurationspring-petclinic-microservices/spring-petclinic-admin-server/src/main/resources/application.yml; spring-petclinic-microservices/docker-compose.yml
genai-serviceconfig-serverserviceconfigurationstartup, restartverifiedDocker-profile config import failsspring-petclinic-microservices/spring-petclinic-genai-service/src/main/resources/application.yml
genai-serviceconfig-serverserviceconfigurationruntimeunknownRunning service may retain its loaded configurationspring-petclinic-microservices/spring-petclinic-genai-service/src/main/resources/application.yml
customers-servicediscovery-serverserviceservice_discoveryruntime, restartinferredRegistration or lookup may fail; existing addresses may remain usablespring-petclinic-microservices/docker-compose.yml
customers-servicediscovery-serverserviceservice_discoverystartupverifiedCompose startup waits for healthy Discoveryspring-petclinic-microservices/docker-compose.yml
visits-servicediscovery-serverserviceservice_discoveryruntime, restartinferredRegistration or lookup may fail; existing addresses may remain usablespring-petclinic-microservices/docker-compose.yml
visits-servicediscovery-serverserviceservice_discoverystartupverifiedCompose startup waits for healthy Discoveryspring-petclinic-microservices/docker-compose.yml
vets-servicediscovery-serverserviceservice_discoveryruntime, restartinferredRegistration or lookup may fail; existing addresses may remain usablespring-petclinic-microservices/docker-compose.yml
vets-servicediscovery-serverserviceservice_discoverystartupverifiedCompose startup waits for healthy Discoveryspring-petclinic-microservices/docker-compose.yml
api-gatewaydiscovery-serverserviceservice_discoveryruntime, restartinferredRegistration or lookup may fail; existing addresses may remain usablespring-petclinic-microservices/docker-compose.yml
api-gatewaydiscovery-serverserviceservice_discoverystartupverifiedCompose startup waits for healthy Discoveryspring-petclinic-microservices/docker-compose.yml
admin-serverdiscovery-serverserviceservice_discoveryruntime, restartinferredRegistration or lookup may fail; existing addresses may remain usablespring-petclinic-microservices/docker-compose.yml
admin-serverdiscovery-serverserviceservice_discoverystartupverifiedCompose startup waits for healthy Discoveryspring-petclinic-microservices/docker-compose.yml
genai-servicediscovery-serverserviceservice_discoveryruntime, restartinferredRegistration or lookup may fail; existing addresses may remain usablespring-petclinic-microservices/docker-compose.yml
genai-servicediscovery-serverserviceservice_discoverystartupverifiedCompose startup waits for healthy Discoveryspring-petclinic-microservices/docker-compose.yml
customers-servicecustomers-dbservicepersistenceruntimeinferredunknownspring-petclinic-microservices/spring-petclinic-customers-service/pom.xml
visits-servicevisits-dbservicepersistenceruntimeinferredunknownspring-petclinic-microservices/spring-petclinic-visits-service/pom.xml
vets-servicevets-dbservicepersistenceruntimeinferredunknownspring-petclinic-microservices/spring-petclinic-vets-service/pom.xml

Potential blast radius

Qualitative predictions for a selected target, failure, and phase. Each impact includes its evidence and uncertainty.

Latest run comparison

No run for this snapshot yet.

Evidence and freshness

Review source status and manual corrections before treating a prediction as current.

Runtime source status

  • docker compose: available (observed 2026-10-10T21:42:27+00:00)
  • docker: available (observed 2026-10-10T21:42:27+00:00)
  • eureka: available (observed 2026-10-10T21:42:27+00:00)
  • prometheus: available (observed 2026-10-10T21:42:27+00:00)
  • zipkin: empty (observed 2026-10-10T21:42:27+00:00)
  • locust: available (observed 2026-10-10T21:42:27+00:00)

Notes and manual corrections

  • 'owner details': traces only show nothing; added from map-overrides.json: ApiGatewayController calls customers-service and then visits-service with WebClient, but the trace context is lost on this path, so Zipkin only sees the gateway. Verified in ApiGatewayController.java. The active datastore behind each service is not established by this controller.
  • 'list owners': no recent trace; source-backed route is retained, additional runtime calls may be unknown
  • 'list vets': no recent trace; source-backed route is retained, additional runtime calls may be unknown
  • 'pet types': no recent trace; source-backed route is retained, additional runtime calls may be unknown
  • 'add visit': no recent trace; source-backed route is retained, additional runtime calls may be unknown

Sources

  • docker compose: 11 containers, 7 app services
  • eureka: 5 services registered
  • zipkin: 0 traces and 0 call edges from the last 15 minutes
  • locust: 404 user requests across 5 actions