You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Luca Burgazzoli (JIRA)" <ji...@apache.org> on 2017/08/18 09:22:00 UTC
[jira] [Commented] (CAMEL-10026) HealthCheck API
[ https://issues.apache.org/jira/browse/CAMEL-10026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16131962#comment-16131962 ]
Luca Burgazzoli commented on CAMEL-10026:
-----------------------------------------
What do you think about the following basic definition ?
{code:java}
/**
* The health check.
*/
interface HealtCheck extends HasId, Callable<HealtCheck.Response> {
/**
* Response to an health check invocation.
*/
interface Response extends HasId {
enum State {
UP,
DOWN
}
/**
* The state of the service.
*/
State getState();
/**
* A message associated to the result, tipically used to provide more
* information for unhealty services.
*/
default Optional<String> getMessage() {
return Optional.empty();
}
/**
* An error associated to the result, tipically used for unhealty services.
*/
default Optional<Throwable> getError() {
return Optional.empty();
}
/**
* An optional key/value combination fo attrinutes. Tt can be used to
* store the component name, the endpoint id, etc.
*/
Map<String, Object> getAttributes();
}
}
/**
* A builder for {@link HealtCheck.Response}
*/
class ResponseBuilder implements Builder<HealtCheck.Response>{
public HealtCheck.Response build() {
...
}
public static ResponseBuilder named(String id) {
...
}
}
/**
* A registry for health checks.
*/
interface HealthCheckRegistry {
/**
* Registers a service {@link HealthCheck}.
*/
void register(HealtCheck check);
/**
* Unregisters a service {@link HealthCheck}.
*/
void unregister(HealtCheck check);
/**
* Returns the IDs of all registered health checks.
*/
Colelction<String> getCheckIDs();
/**
* Runs the health check with the given ID.
*/
HealtCheck.Response runCheck(String id);
/**
* Runs the registered health checks.
*/
Collection<HealtCheck.Response> runChecks();
}
interface CamelContext {
/**
* Returns an optional HealthCheckRegistry, by default no registry is present
* and it must be explicit activated. Components can register/unregister healt
* checks in response to life-cycle events (i.e. start/stop).
*
* This registry is not used by the camel context but it is up to the impl to
* properly use it, i.e.
*
* - a RouteController could use the registry to decide to restart a route
* with failing healt checks
* - spring boot could integrate such checks within its healt endpoint or
* make it available only as separate endpoint.
*
* As this new method in maked as default it should not introduce API breaks
* so it should be safe to introduce it in 2.20.x.
*/
default Optional<HealthCheckRegistry> getHealthCheckRegistry() {
return Optional.empty();
}
boolean isHealthCheckEnabled();
void setHealthCheckEnabled();
}
{code}
> HealthCheck API
> ---------------
>
> Key: CAMEL-10026
> URL: https://issues.apache.org/jira/browse/CAMEL-10026
> Project: Camel
> Issue Type: New Feature
> Components: camel-core
> Reporter: Claus Ibsen
> Fix For: 2.20.0
>
>
> Add a health check API to camel-core so this API can be queried from Java / JMX / spring-boot etc. so users can easily get a health check. This can be used for liveness/readiness checks for their Camel apps.
> The API should allow optional support for components to implement custom logic for health check. So a FTP component can connect to a FTP server and do a FTP list etc. A JDBC component does a SQL query, and so on.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)