spring-projects/spring-xd — pull request #1181 by ilayaperumalg (2014-09-15 22:25:45+00:00)
Title: Expose detailed container/modules info from XD cluster

- XD-2093 Add deployment status to module metadata
- ModuleMetadata will now have:
- Unit (Stream/Job) name
- Module name (module label + index)
- Module type
- Unit deployment status
- Update `ModuleMetadataResource` with the changes
- Add a method in `ModuleMetadataController` to update the
deployment status for each stream/job module by referring
to stream/job repositories
- Fix `runtime modules` command and add the above fields in the result
- Change `runtime modules` to `cluster modules`
- Fix the tests

Add `deploymentStatus` to ModuleMetadata
- Previously it was updated with `ModuleMetadataResource`

XD-2092 Enhance container domain object

- Add `RuntimeContainer` that extends `Container` and also has:
- DeploymentSize
- DeployedModules
- Change `/runtime/containers` to `cluster/containers` and change the
REST endpoint to return the `DetailedContainer` objects
- Update resource assembler and domain object to use `DetailedContainer`
- Update tests

XD-2097 Shutdown containers from admin

- Enable `shutdown` endpoint for containers
- Keep the `mangementContextPath` the same for both admin/container
- ContainerRegistrar stores the container's port as container attribute
- If the container uses local port `0` then the port is known only when
the `EmbeddedServletContainer` is initialized
- Add `update` method in `ContainerRepository` to update the container data
- Update container data (attributes) along with container port info
- Add REST endpoint that shuts down container by `containerId`
- Get container host and port from container attributes
- Use `RestTemplate` to send `POST` request to shutdown the container
- Throw `NoSuchContainerException` if container is not found
- Add test

Handle error scenarios
- During `containerRepository.update` if the container path doesn't exist,
throw `NoSuchContainerException`
- Add tests for `containerRepository.update` scenarios
- Check `zkConnection` before calling `containerRepository.update`
- Throw `ContainerShutdownException` when the response to shutdown container
results in exception

Use the management port
- Use container server's `management` server port to access shutdown
endpoint.
- Handle the `EmbeddedServletContainerInitializedEvent` when the event
comes out of management server's servlet container. The namespace for this
context is set to `management`. Hence using that to distinguish the event
- Make sure the management port is always updated when the above
event is processed.
- Update the container attributes with mangement port (if used)
before registering with ZK on the `ZKContainerConnectionListener`s
onResume() and onConnect events

- Message rates from admin server

- Access jolokia endpoints for deployed modules' message rates
from admin controller
- This will allow us the client don't make direct connection
to the container