You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by Luca Burgazzoli <lb...@gmail.com> on 2017/09/04 14:01:18 UTC

Health Check API

Hello,

I've been working a little on the Health Check API [1] implementation an
the code is available in my Apache Camel fork [2]. There is now a a new
package [3] that defines the following concepts:

- HealthCheck

  this represent an health check and defines the some basic contract i.e
  the response;

- HealthCheckConfiguration

  this is a basic coonfiguration object that holds some basic settings
  like the minimum delay between calls, the number of time a service may
  be reported as unhealthy before meking the check as failed; beside
  those simple options, is then responsability of the check impl. to
  eventually implement further limitations;

- HealthCheckRegistry

  this is just a registry, it doesn't have any method to trigger checks
  and it has intentionally been kept simple as in the future it may be
  superseeded by an internal camel registry [4];

- HealthCheckRepository

  this is a simple interface to define health check providers and by
  default there is one that grabs all the checks available in the
  registry so you can add your own check i.e. istantiating your bean
  in spring/spring-boot; components can provide theirs own repository.

- HealthCheckService

  this is a simple service that runs in the background and invokes the
  checks according to a schedule.

The default camel context sets-up a default implementation of the health
check registry which you can override by putting your own implementation
in the camel registry as usual. Check are not active by default so you
need to explicit enable/configure them.

The current implementation has a number of limitations:

- it is spring-boot oriented for demostration purpose so you can't
  access health checks using JMX (but it is planned);
- it is focused on monitoring the status of external systems so there
  are a few implementations based on the Component verifier extension:

  1. a ServiceNow instance check to report if an instances is alive
  2. a simple undertow based http check that issue an http get to an
     http endpoint

  There is also a simple consul repository that let you to reuse consul
  checks [5] so i.e. you can have a single check to monitor the status
  of twitter and reuse it in all your microservices.

  An example can be found in my fork [6]

My next goals are:

1. define some core checks to monitor the health of the camel context
   i.e. fail if there is an excessive number of errors, if the latency
   is too high, etc.
2. expose check through JMX.
3. use health checks for ServiceCall EIP
4. use health checks in Clustering/Superving route controller


Any feedback is very welcome,
Luca


[1] https://issues.apache.org/jira/browse/CAMEL-10026
[2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
[3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
[4] https://issues.apache.org/jira/browse/CAMEL-10792
[5] https://www.consul.io/docs/agent/checks.html
[6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks


---
Luca Burgazzoli

Re: Health Check API

Posted by Luca Burgazzoli <lb...@gmail.com>.
Good catch, will change it

---
Luca Burgazzoli


On Tue, Sep 19, 2017 at 3:07 PM, Claus Ibsen <cl...@gmail.com> wrote:
> Hi
>
> Thanks the health mbean looks good.
>
> However I wonder if using a date is the right type for "interval"
> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java#L251
>
> Is interval a specific date, eg 2017-1-1 12:59:55 or is it not a
> number like 2000 for every 2000 milli seconds?
>
>
> On Tue, Sep 19, 2017 at 2:50 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>> Hi Claus,
>> the branch is still [1] and the management parts is in api/management [2].
>>
>> [1] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/api/management
>>
>> ---
>> Luca Burgazzoli
>>
>>
>> On Tue, Sep 19, 2017 at 2:26 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>> On Tue, Sep 19, 2017 at 2:22 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>> Hello,
>>>>
>>>> I've added some info through JMX, would you mind review it before merging ?
>>>>
>>>
>>> Can you post the link to the branch where those latest code changes are
>>>
>>>> Regards,
>>>> Luca
>>>>
>>>>
>>>> ---
>>>> Luca Burgazzoli
>>>>
>>>>
>>>> On Fri, Sep 8, 2017 at 4:20 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>>> Hello,
>>>>>
>>>>> I've just pushed some bits to my fork to cleanup the implementation
>>>>> and implement some basic checks for routes status. In addition, to
>>>>> make it suitable to be included in camel 2.20, I've reduced the scope
>>>>> of the implementation to be almost limited to core/internal health
>>>>> checks and to provide a good foundation for people to write their own
>>>>> advanced checks if needed (component checks such as those for undertow
>>>>> and servicenow has been removed).
>>>>>
>>>>> Any feedback is really appreciated.
>>>>>
>>>>>
>>>>> ---
>>>>> Luca Burgazzoli
>>>>>
>>>>>
>>>>> On Tue, Sep 5, 2017 at 2:25 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>>>> ---
>>>>>> Luca Burgazzoli
>>>>>>
>>>>>>
>>>>>> On Tue, Sep 5, 2017 at 2:17 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>>>>> Hi Luca
>>>>>>>
>>>>>>> Looks really good.
>>>>>>>
>>>>>>> There is a few typo's and the likes in the source code I looked at.
>>>>>>> Will try to do a github comment so you can see them as well later, or
>>>>>>> when the code is merged later.
>>>>>>>
>>>>>>> 1)
>>>>>>> For the doCall implementation when you implement a health check, then
>>>>>>> what would happen if that methods throws an runtime exception? I think
>>>>>>> we need to clarify on the javadoc what the contract is, and if an
>>>>>>> exception would then render the check to be status = DOWN or what?
>>>>>>>
>>>>>>
>>>>>> I'd expect the implementation to wrap it and decide if the service is
>>>>>> healthy or not so yeah, I'll make it clear.
>>>>>>
>>>>>>>
>>>>>>> 2)
>>>>>>> I think the spring boot auto configuration prefixes for the health
>>>>>>> checks for the components such as undertow, servicenow etc should all
>>>>>>> be under the same prefix as the component itself, eg
>>>>>>>
>>>>>>> eg
>>>>>>> camel.undertow.health.checks[spring-health].interval = 5s
>>>>>>>
>>>>>>> should be
>>>>>>> camel.component.undertow.health.checks[spring-health].interval = 5s
>>>>>>>
>>>>>>> Then everything you can configure in the undertow component is with
>>>>>>> the same prefix and its consistent.
>>>>>>>
>>>>>>
>>>>>> Agree.
>>>>>>
>>>>>>>
>>>>>>> 3)
>>>>>>> To implement a custom health check and have spring boot auto
>>>>>>> configuration, then you would have to write that configuration code
>>>>>>> yourself / manually?
>>>>>>>
>>>>>>
>>>>>> At the moment yes as the layout is not defined but it may be
>>>>>> eventually auto generated like the starters.
>>>>>>
>>>>>>>
>>>>>>> 4)
>>>>>>> I wonder in the servicenow health check where you configure the
>>>>>>> instance id, username etc again, whether you may want to be able to
>>>>>>> just refer to the existing configuration so you do not repeat
>>>>>>> yourself?
>>>>>>>
>>>>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L66
>>>>>>>
>>>>>>
>>>>>> Yeah, that was an example non properly cleaned up/explained but by
>>>>>> default the servicenow reuse component's configuration.
>>>>>>
>>>>>>>
>>>>>>> 5)
>>>>>>> In this example it is a bit confusing that the comment say the health
>>>>>>> check is enabled and then the value below is false
>>>>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L36
>>>>>>>
>>>>>>> 6)
>>>>>>> ... and as well there is 2 indicator.enabled in that example.
>>>>>>
>>>>>> Yeah, it definitively need to be cleaned up.
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>>>>>> Hi Luca
>>>>>>>>
>>>>>>>> I will take a closer look tomorrow, I just peaked a bit today.
>>>>>>>>
>>>>>>>> Just to be sure, the implementation of the logic that performs the
>>>>>>>> actual health check is agnostic? i.e. its not tied to must be using
>>>>>>>> Spring Boot. And that logic is if possible reusing the "ping check"
>>>>>>>> (i.e. verifier extension).
>>>>>>>>
>>>>>>>> So the spring boot health check is currently for making it easier for
>>>>>>>> end users to configure it via spring boot configuration?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>>>>>>> Hello,
>>>>>>>>>
>>>>>>>>> I've been working a little on the Health Check API [1] implementation an
>>>>>>>>> the code is available in my Apache Camel fork [2]. There is now a a new
>>>>>>>>> package [3] that defines the following concepts:
>>>>>>>>>
>>>>>>>>> - HealthCheck
>>>>>>>>>
>>>>>>>>>   this represent an health check and defines the some basic contract i.e
>>>>>>>>>   the response;
>>>>>>>>>
>>>>>>>>> - HealthCheckConfiguration
>>>>>>>>>
>>>>>>>>>   this is a basic coonfiguration object that holds some basic settings
>>>>>>>>>   like the minimum delay between calls, the number of time a service may
>>>>>>>>>   be reported as unhealthy before meking the check as failed; beside
>>>>>>>>>   those simple options, is then responsability of the check impl. to
>>>>>>>>>   eventually implement further limitations;
>>>>>>>>>
>>>>>>>>> - HealthCheckRegistry
>>>>>>>>>
>>>>>>>>>   this is just a registry, it doesn't have any method to trigger checks
>>>>>>>>>   and it has intentionally been kept simple as in the future it may be
>>>>>>>>>   superseeded by an internal camel registry [4];
>>>>>>>>>
>>>>>>>>> - HealthCheckRepository
>>>>>>>>>
>>>>>>>>>   this is a simple interface to define health check providers and by
>>>>>>>>>   default there is one that grabs all the checks available in the
>>>>>>>>>   registry so you can add your own check i.e. istantiating your bean
>>>>>>>>>   in spring/spring-boot; components can provide theirs own repository.
>>>>>>>>>
>>>>>>>>> - HealthCheckService
>>>>>>>>>
>>>>>>>>>   this is a simple service that runs in the background and invokes the
>>>>>>>>>   checks according to a schedule.
>>>>>>>>>
>>>>>>>>> The default camel context sets-up a default implementation of the health
>>>>>>>>> check registry which you can override by putting your own implementation
>>>>>>>>> in the camel registry as usual. Check are not active by default so you
>>>>>>>>> need to explicit enable/configure them.
>>>>>>>>>
>>>>>>>>> The current implementation has a number of limitations:
>>>>>>>>>
>>>>>>>>> - it is spring-boot oriented for demostration purpose so you can't
>>>>>>>>>   access health checks using JMX (but it is planned);
>>>>>>>>> - it is focused on monitoring the status of external systems so there
>>>>>>>>>   are a few implementations based on the Component verifier extension:
>>>>>>>>>
>>>>>>>>>   1. a ServiceNow instance check to report if an instances is alive
>>>>>>>>>   2. a simple undertow based http check that issue an http get to an
>>>>>>>>>      http endpoint
>>>>>>>>>
>>>>>>>>>   There is also a simple consul repository that let you to reuse consul
>>>>>>>>>   checks [5] so i.e. you can have a single check to monitor the status
>>>>>>>>>   of twitter and reuse it in all your microservices.
>>>>>>>>>
>>>>>>>>>   An example can be found in my fork [6]
>>>>>>>>>
>>>>>>>>> My next goals are:
>>>>>>>>>
>>>>>>>>> 1. define some core checks to monitor the health of the camel context
>>>>>>>>>    i.e. fail if there is an excessive number of errors, if the latency
>>>>>>>>>    is too high, etc.
>>>>>>>>> 2. expose check through JMX.
>>>>>>>>> 3. use health checks for ServiceCall EIP
>>>>>>>>> 4. use health checks in Clustering/Superving route controller
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Any feedback is very welcome,
>>>>>>>>> Luca
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>>>>>>>>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>>>>>>>>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>>>>>>>>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>>>>>>>>> [5] https://www.consul.io/docs/agent/checks.html
>>>>>>>>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>> Luca Burgazzoli
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Claus Ibsen
>>>>>>>> -----------------
>>>>>>>> http://davsclaus.com @davsclaus
>>>>>>>> Camel in Action 2: https://www.manning.com/ibsen2
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Claus Ibsen
>>>>>>> -----------------
>>>>>>> http://davsclaus.com @davsclaus
>>>>>>> Camel in Action 2: https://www.manning.com/ibsen2
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> -----------------
>>> http://davsclaus.com @davsclaus
>>> Camel in Action 2: https://www.manning.com/ibsen2
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Thanks the health mbean looks good.

However I wonder if using a date is the right type for "interval"
https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java#L251

Is interval a specific date, eg 2017-1-1 12:59:55 or is it not a
number like 2000 for every 2000 milli seconds?


On Tue, Sep 19, 2017 at 2:50 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
> Hi Claus,
> the branch is still [1] and the management parts is in api/management [2].
>
> [1] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/api/management
>
> ---
> Luca Burgazzoli
>
>
> On Tue, Sep 19, 2017 at 2:26 PM, Claus Ibsen <cl...@gmail.com> wrote:
>> On Tue, Sep 19, 2017 at 2:22 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>> Hello,
>>>
>>> I've added some info through JMX, would you mind review it before merging ?
>>>
>>
>> Can you post the link to the branch where those latest code changes are
>>
>>> Regards,
>>> Luca
>>>
>>>
>>> ---
>>> Luca Burgazzoli
>>>
>>>
>>> On Fri, Sep 8, 2017 at 4:20 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>> Hello,
>>>>
>>>> I've just pushed some bits to my fork to cleanup the implementation
>>>> and implement some basic checks for routes status. In addition, to
>>>> make it suitable to be included in camel 2.20, I've reduced the scope
>>>> of the implementation to be almost limited to core/internal health
>>>> checks and to provide a good foundation for people to write their own
>>>> advanced checks if needed (component checks such as those for undertow
>>>> and servicenow has been removed).
>>>>
>>>> Any feedback is really appreciated.
>>>>
>>>>
>>>> ---
>>>> Luca Burgazzoli
>>>>
>>>>
>>>> On Tue, Sep 5, 2017 at 2:25 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>>> ---
>>>>> Luca Burgazzoli
>>>>>
>>>>>
>>>>> On Tue, Sep 5, 2017 at 2:17 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>>>> Hi Luca
>>>>>>
>>>>>> Looks really good.
>>>>>>
>>>>>> There is a few typo's and the likes in the source code I looked at.
>>>>>> Will try to do a github comment so you can see them as well later, or
>>>>>> when the code is merged later.
>>>>>>
>>>>>> 1)
>>>>>> For the doCall implementation when you implement a health check, then
>>>>>> what would happen if that methods throws an runtime exception? I think
>>>>>> we need to clarify on the javadoc what the contract is, and if an
>>>>>> exception would then render the check to be status = DOWN or what?
>>>>>>
>>>>>
>>>>> I'd expect the implementation to wrap it and decide if the service is
>>>>> healthy or not so yeah, I'll make it clear.
>>>>>
>>>>>>
>>>>>> 2)
>>>>>> I think the spring boot auto configuration prefixes for the health
>>>>>> checks for the components such as undertow, servicenow etc should all
>>>>>> be under the same prefix as the component itself, eg
>>>>>>
>>>>>> eg
>>>>>> camel.undertow.health.checks[spring-health].interval = 5s
>>>>>>
>>>>>> should be
>>>>>> camel.component.undertow.health.checks[spring-health].interval = 5s
>>>>>>
>>>>>> Then everything you can configure in the undertow component is with
>>>>>> the same prefix and its consistent.
>>>>>>
>>>>>
>>>>> Agree.
>>>>>
>>>>>>
>>>>>> 3)
>>>>>> To implement a custom health check and have spring boot auto
>>>>>> configuration, then you would have to write that configuration code
>>>>>> yourself / manually?
>>>>>>
>>>>>
>>>>> At the moment yes as the layout is not defined but it may be
>>>>> eventually auto generated like the starters.
>>>>>
>>>>>>
>>>>>> 4)
>>>>>> I wonder in the servicenow health check where you configure the
>>>>>> instance id, username etc again, whether you may want to be able to
>>>>>> just refer to the existing configuration so you do not repeat
>>>>>> yourself?
>>>>>>
>>>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L66
>>>>>>
>>>>>
>>>>> Yeah, that was an example non properly cleaned up/explained but by
>>>>> default the servicenow reuse component's configuration.
>>>>>
>>>>>>
>>>>>> 5)
>>>>>> In this example it is a bit confusing that the comment say the health
>>>>>> check is enabled and then the value below is false
>>>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L36
>>>>>>
>>>>>> 6)
>>>>>> ... and as well there is 2 indicator.enabled in that example.
>>>>>
>>>>> Yeah, it definitively need to be cleaned up.
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>>>>> Hi Luca
>>>>>>>
>>>>>>> I will take a closer look tomorrow, I just peaked a bit today.
>>>>>>>
>>>>>>> Just to be sure, the implementation of the logic that performs the
>>>>>>> actual health check is agnostic? i.e. its not tied to must be using
>>>>>>> Spring Boot. And that logic is if possible reusing the "ping check"
>>>>>>> (i.e. verifier extension).
>>>>>>>
>>>>>>> So the spring boot health check is currently for making it easier for
>>>>>>> end users to configure it via spring boot configuration?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> I've been working a little on the Health Check API [1] implementation an
>>>>>>>> the code is available in my Apache Camel fork [2]. There is now a a new
>>>>>>>> package [3] that defines the following concepts:
>>>>>>>>
>>>>>>>> - HealthCheck
>>>>>>>>
>>>>>>>>   this represent an health check and defines the some basic contract i.e
>>>>>>>>   the response;
>>>>>>>>
>>>>>>>> - HealthCheckConfiguration
>>>>>>>>
>>>>>>>>   this is a basic coonfiguration object that holds some basic settings
>>>>>>>>   like the minimum delay between calls, the number of time a service may
>>>>>>>>   be reported as unhealthy before meking the check as failed; beside
>>>>>>>>   those simple options, is then responsability of the check impl. to
>>>>>>>>   eventually implement further limitations;
>>>>>>>>
>>>>>>>> - HealthCheckRegistry
>>>>>>>>
>>>>>>>>   this is just a registry, it doesn't have any method to trigger checks
>>>>>>>>   and it has intentionally been kept simple as in the future it may be
>>>>>>>>   superseeded by an internal camel registry [4];
>>>>>>>>
>>>>>>>> - HealthCheckRepository
>>>>>>>>
>>>>>>>>   this is a simple interface to define health check providers and by
>>>>>>>>   default there is one that grabs all the checks available in the
>>>>>>>>   registry so you can add your own check i.e. istantiating your bean
>>>>>>>>   in spring/spring-boot; components can provide theirs own repository.
>>>>>>>>
>>>>>>>> - HealthCheckService
>>>>>>>>
>>>>>>>>   this is a simple service that runs in the background and invokes the
>>>>>>>>   checks according to a schedule.
>>>>>>>>
>>>>>>>> The default camel context sets-up a default implementation of the health
>>>>>>>> check registry which you can override by putting your own implementation
>>>>>>>> in the camel registry as usual. Check are not active by default so you
>>>>>>>> need to explicit enable/configure them.
>>>>>>>>
>>>>>>>> The current implementation has a number of limitations:
>>>>>>>>
>>>>>>>> - it is spring-boot oriented for demostration purpose so you can't
>>>>>>>>   access health checks using JMX (but it is planned);
>>>>>>>> - it is focused on monitoring the status of external systems so there
>>>>>>>>   are a few implementations based on the Component verifier extension:
>>>>>>>>
>>>>>>>>   1. a ServiceNow instance check to report if an instances is alive
>>>>>>>>   2. a simple undertow based http check that issue an http get to an
>>>>>>>>      http endpoint
>>>>>>>>
>>>>>>>>   There is also a simple consul repository that let you to reuse consul
>>>>>>>>   checks [5] so i.e. you can have a single check to monitor the status
>>>>>>>>   of twitter and reuse it in all your microservices.
>>>>>>>>
>>>>>>>>   An example can be found in my fork [6]
>>>>>>>>
>>>>>>>> My next goals are:
>>>>>>>>
>>>>>>>> 1. define some core checks to monitor the health of the camel context
>>>>>>>>    i.e. fail if there is an excessive number of errors, if the latency
>>>>>>>>    is too high, etc.
>>>>>>>> 2. expose check through JMX.
>>>>>>>> 3. use health checks for ServiceCall EIP
>>>>>>>> 4. use health checks in Clustering/Superving route controller
>>>>>>>>
>>>>>>>>
>>>>>>>> Any feedback is very welcome,
>>>>>>>> Luca
>>>>>>>>
>>>>>>>>
>>>>>>>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>>>>>>>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>>>>>>>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>>>>>>>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>>>>>>>> [5] https://www.consul.io/docs/agent/checks.html
>>>>>>>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>>>>>>>
>>>>>>>>
>>>>>>>> ---
>>>>>>>> Luca Burgazzoli
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Claus Ibsen
>>>>>>> -----------------
>>>>>>> http://davsclaus.com @davsclaus
>>>>>>> Camel in Action 2: https://www.manning.com/ibsen2
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Claus Ibsen
>>>>>> -----------------
>>>>>> http://davsclaus.com @davsclaus
>>>>>> Camel in Action 2: https://www.manning.com/ibsen2
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> http://davsclaus.com @davsclaus
>> Camel in Action 2: https://www.manning.com/ibsen2



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Luca Burgazzoli <lb...@gmail.com>.
Hi Claus,
the branch is still [1] and the management parts is in api/management [2].

[1] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
[2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/api/management

---
Luca Burgazzoli


On Tue, Sep 19, 2017 at 2:26 PM, Claus Ibsen <cl...@gmail.com> wrote:
> On Tue, Sep 19, 2017 at 2:22 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>> Hello,
>>
>> I've added some info through JMX, would you mind review it before merging ?
>>
>
> Can you post the link to the branch where those latest code changes are
>
>> Regards,
>> Luca
>>
>>
>> ---
>> Luca Burgazzoli
>>
>>
>> On Fri, Sep 8, 2017 at 4:20 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>> Hello,
>>>
>>> I've just pushed some bits to my fork to cleanup the implementation
>>> and implement some basic checks for routes status. In addition, to
>>> make it suitable to be included in camel 2.20, I've reduced the scope
>>> of the implementation to be almost limited to core/internal health
>>> checks and to provide a good foundation for people to write their own
>>> advanced checks if needed (component checks such as those for undertow
>>> and servicenow has been removed).
>>>
>>> Any feedback is really appreciated.
>>>
>>>
>>> ---
>>> Luca Burgazzoli
>>>
>>>
>>> On Tue, Sep 5, 2017 at 2:25 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>> ---
>>>> Luca Burgazzoli
>>>>
>>>>
>>>> On Tue, Sep 5, 2017 at 2:17 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>>> Hi Luca
>>>>>
>>>>> Looks really good.
>>>>>
>>>>> There is a few typo's and the likes in the source code I looked at.
>>>>> Will try to do a github comment so you can see them as well later, or
>>>>> when the code is merged later.
>>>>>
>>>>> 1)
>>>>> For the doCall implementation when you implement a health check, then
>>>>> what would happen if that methods throws an runtime exception? I think
>>>>> we need to clarify on the javadoc what the contract is, and if an
>>>>> exception would then render the check to be status = DOWN or what?
>>>>>
>>>>
>>>> I'd expect the implementation to wrap it and decide if the service is
>>>> healthy or not so yeah, I'll make it clear.
>>>>
>>>>>
>>>>> 2)
>>>>> I think the spring boot auto configuration prefixes for the health
>>>>> checks for the components such as undertow, servicenow etc should all
>>>>> be under the same prefix as the component itself, eg
>>>>>
>>>>> eg
>>>>> camel.undertow.health.checks[spring-health].interval = 5s
>>>>>
>>>>> should be
>>>>> camel.component.undertow.health.checks[spring-health].interval = 5s
>>>>>
>>>>> Then everything you can configure in the undertow component is with
>>>>> the same prefix and its consistent.
>>>>>
>>>>
>>>> Agree.
>>>>
>>>>>
>>>>> 3)
>>>>> To implement a custom health check and have spring boot auto
>>>>> configuration, then you would have to write that configuration code
>>>>> yourself / manually?
>>>>>
>>>>
>>>> At the moment yes as the layout is not defined but it may be
>>>> eventually auto generated like the starters.
>>>>
>>>>>
>>>>> 4)
>>>>> I wonder in the servicenow health check where you configure the
>>>>> instance id, username etc again, whether you may want to be able to
>>>>> just refer to the existing configuration so you do not repeat
>>>>> yourself?
>>>>>
>>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L66
>>>>>
>>>>
>>>> Yeah, that was an example non properly cleaned up/explained but by
>>>> default the servicenow reuse component's configuration.
>>>>
>>>>>
>>>>> 5)
>>>>> In this example it is a bit confusing that the comment say the health
>>>>> check is enabled and then the value below is false
>>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L36
>>>>>
>>>>> 6)
>>>>> ... and as well there is 2 indicator.enabled in that example.
>>>>
>>>> Yeah, it definitively need to be cleaned up.
>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>>>> Hi Luca
>>>>>>
>>>>>> I will take a closer look tomorrow, I just peaked a bit today.
>>>>>>
>>>>>> Just to be sure, the implementation of the logic that performs the
>>>>>> actual health check is agnostic? i.e. its not tied to must be using
>>>>>> Spring Boot. And that logic is if possible reusing the "ping check"
>>>>>> (i.e. verifier extension).
>>>>>>
>>>>>> So the spring boot health check is currently for making it easier for
>>>>>> end users to configure it via spring boot configuration?
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> I've been working a little on the Health Check API [1] implementation an
>>>>>>> the code is available in my Apache Camel fork [2]. There is now a a new
>>>>>>> package [3] that defines the following concepts:
>>>>>>>
>>>>>>> - HealthCheck
>>>>>>>
>>>>>>>   this represent an health check and defines the some basic contract i.e
>>>>>>>   the response;
>>>>>>>
>>>>>>> - HealthCheckConfiguration
>>>>>>>
>>>>>>>   this is a basic coonfiguration object that holds some basic settings
>>>>>>>   like the minimum delay between calls, the number of time a service may
>>>>>>>   be reported as unhealthy before meking the check as failed; beside
>>>>>>>   those simple options, is then responsability of the check impl. to
>>>>>>>   eventually implement further limitations;
>>>>>>>
>>>>>>> - HealthCheckRegistry
>>>>>>>
>>>>>>>   this is just a registry, it doesn't have any method to trigger checks
>>>>>>>   and it has intentionally been kept simple as in the future it may be
>>>>>>>   superseeded by an internal camel registry [4];
>>>>>>>
>>>>>>> - HealthCheckRepository
>>>>>>>
>>>>>>>   this is a simple interface to define health check providers and by
>>>>>>>   default there is one that grabs all the checks available in the
>>>>>>>   registry so you can add your own check i.e. istantiating your bean
>>>>>>>   in spring/spring-boot; components can provide theirs own repository.
>>>>>>>
>>>>>>> - HealthCheckService
>>>>>>>
>>>>>>>   this is a simple service that runs in the background and invokes the
>>>>>>>   checks according to a schedule.
>>>>>>>
>>>>>>> The default camel context sets-up a default implementation of the health
>>>>>>> check registry which you can override by putting your own implementation
>>>>>>> in the camel registry as usual. Check are not active by default so you
>>>>>>> need to explicit enable/configure them.
>>>>>>>
>>>>>>> The current implementation has a number of limitations:
>>>>>>>
>>>>>>> - it is spring-boot oriented for demostration purpose so you can't
>>>>>>>   access health checks using JMX (but it is planned);
>>>>>>> - it is focused on monitoring the status of external systems so there
>>>>>>>   are a few implementations based on the Component verifier extension:
>>>>>>>
>>>>>>>   1. a ServiceNow instance check to report if an instances is alive
>>>>>>>   2. a simple undertow based http check that issue an http get to an
>>>>>>>      http endpoint
>>>>>>>
>>>>>>>   There is also a simple consul repository that let you to reuse consul
>>>>>>>   checks [5] so i.e. you can have a single check to monitor the status
>>>>>>>   of twitter and reuse it in all your microservices.
>>>>>>>
>>>>>>>   An example can be found in my fork [6]
>>>>>>>
>>>>>>> My next goals are:
>>>>>>>
>>>>>>> 1. define some core checks to monitor the health of the camel context
>>>>>>>    i.e. fail if there is an excessive number of errors, if the latency
>>>>>>>    is too high, etc.
>>>>>>> 2. expose check through JMX.
>>>>>>> 3. use health checks for ServiceCall EIP
>>>>>>> 4. use health checks in Clustering/Superving route controller
>>>>>>>
>>>>>>>
>>>>>>> Any feedback is very welcome,
>>>>>>> Luca
>>>>>>>
>>>>>>>
>>>>>>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>>>>>>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>>>>>>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>>>>>>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>>>>>>> [5] https://www.consul.io/docs/agent/checks.html
>>>>>>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>>>>>>
>>>>>>>
>>>>>>> ---
>>>>>>> Luca Burgazzoli
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Claus Ibsen
>>>>>> -----------------
>>>>>> http://davsclaus.com @davsclaus
>>>>>> Camel in Action 2: https://www.manning.com/ibsen2
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Claus Ibsen
>>>>> -----------------
>>>>> http://davsclaus.com @davsclaus
>>>>> Camel in Action 2: https://www.manning.com/ibsen2
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Claus Ibsen <cl...@gmail.com>.
On Tue, Sep 19, 2017 at 2:22 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
> Hello,
>
> I've added some info through JMX, would you mind review it before merging ?
>

Can you post the link to the branch where those latest code changes are

> Regards,
> Luca
>
>
> ---
> Luca Burgazzoli
>
>
> On Fri, Sep 8, 2017 at 4:20 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>> Hello,
>>
>> I've just pushed some bits to my fork to cleanup the implementation
>> and implement some basic checks for routes status. In addition, to
>> make it suitable to be included in camel 2.20, I've reduced the scope
>> of the implementation to be almost limited to core/internal health
>> checks and to provide a good foundation for people to write their own
>> advanced checks if needed (component checks such as those for undertow
>> and servicenow has been removed).
>>
>> Any feedback is really appreciated.
>>
>>
>> ---
>> Luca Burgazzoli
>>
>>
>> On Tue, Sep 5, 2017 at 2:25 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>> ---
>>> Luca Burgazzoli
>>>
>>>
>>> On Tue, Sep 5, 2017 at 2:17 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>> Hi Luca
>>>>
>>>> Looks really good.
>>>>
>>>> There is a few typo's and the likes in the source code I looked at.
>>>> Will try to do a github comment so you can see them as well later, or
>>>> when the code is merged later.
>>>>
>>>> 1)
>>>> For the doCall implementation when you implement a health check, then
>>>> what would happen if that methods throws an runtime exception? I think
>>>> we need to clarify on the javadoc what the contract is, and if an
>>>> exception would then render the check to be status = DOWN or what?
>>>>
>>>
>>> I'd expect the implementation to wrap it and decide if the service is
>>> healthy or not so yeah, I'll make it clear.
>>>
>>>>
>>>> 2)
>>>> I think the spring boot auto configuration prefixes for the health
>>>> checks for the components such as undertow, servicenow etc should all
>>>> be under the same prefix as the component itself, eg
>>>>
>>>> eg
>>>> camel.undertow.health.checks[spring-health].interval = 5s
>>>>
>>>> should be
>>>> camel.component.undertow.health.checks[spring-health].interval = 5s
>>>>
>>>> Then everything you can configure in the undertow component is with
>>>> the same prefix and its consistent.
>>>>
>>>
>>> Agree.
>>>
>>>>
>>>> 3)
>>>> To implement a custom health check and have spring boot auto
>>>> configuration, then you would have to write that configuration code
>>>> yourself / manually?
>>>>
>>>
>>> At the moment yes as the layout is not defined but it may be
>>> eventually auto generated like the starters.
>>>
>>>>
>>>> 4)
>>>> I wonder in the servicenow health check where you configure the
>>>> instance id, username etc again, whether you may want to be able to
>>>> just refer to the existing configuration so you do not repeat
>>>> yourself?
>>>>
>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L66
>>>>
>>>
>>> Yeah, that was an example non properly cleaned up/explained but by
>>> default the servicenow reuse component's configuration.
>>>
>>>>
>>>> 5)
>>>> In this example it is a bit confusing that the comment say the health
>>>> check is enabled and then the value below is false
>>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L36
>>>>
>>>> 6)
>>>> ... and as well there is 2 indicator.enabled in that example.
>>>
>>> Yeah, it definitively need to be cleaned up.
>>>
>>>>
>>>>
>>>>
>>>> On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>>> Hi Luca
>>>>>
>>>>> I will take a closer look tomorrow, I just peaked a bit today.
>>>>>
>>>>> Just to be sure, the implementation of the logic that performs the
>>>>> actual health check is agnostic? i.e. its not tied to must be using
>>>>> Spring Boot. And that logic is if possible reusing the "ping check"
>>>>> (i.e. verifier extension).
>>>>>
>>>>> So the spring boot health check is currently for making it easier for
>>>>> end users to configure it via spring boot configuration?
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>>>> Hello,
>>>>>>
>>>>>> I've been working a little on the Health Check API [1] implementation an
>>>>>> the code is available in my Apache Camel fork [2]. There is now a a new
>>>>>> package [3] that defines the following concepts:
>>>>>>
>>>>>> - HealthCheck
>>>>>>
>>>>>>   this represent an health check and defines the some basic contract i.e
>>>>>>   the response;
>>>>>>
>>>>>> - HealthCheckConfiguration
>>>>>>
>>>>>>   this is a basic coonfiguration object that holds some basic settings
>>>>>>   like the minimum delay between calls, the number of time a service may
>>>>>>   be reported as unhealthy before meking the check as failed; beside
>>>>>>   those simple options, is then responsability of the check impl. to
>>>>>>   eventually implement further limitations;
>>>>>>
>>>>>> - HealthCheckRegistry
>>>>>>
>>>>>>   this is just a registry, it doesn't have any method to trigger checks
>>>>>>   and it has intentionally been kept simple as in the future it may be
>>>>>>   superseeded by an internal camel registry [4];
>>>>>>
>>>>>> - HealthCheckRepository
>>>>>>
>>>>>>   this is a simple interface to define health check providers and by
>>>>>>   default there is one that grabs all the checks available in the
>>>>>>   registry so you can add your own check i.e. istantiating your bean
>>>>>>   in spring/spring-boot; components can provide theirs own repository.
>>>>>>
>>>>>> - HealthCheckService
>>>>>>
>>>>>>   this is a simple service that runs in the background and invokes the
>>>>>>   checks according to a schedule.
>>>>>>
>>>>>> The default camel context sets-up a default implementation of the health
>>>>>> check registry which you can override by putting your own implementation
>>>>>> in the camel registry as usual. Check are not active by default so you
>>>>>> need to explicit enable/configure them.
>>>>>>
>>>>>> The current implementation has a number of limitations:
>>>>>>
>>>>>> - it is spring-boot oriented for demostration purpose so you can't
>>>>>>   access health checks using JMX (but it is planned);
>>>>>> - it is focused on monitoring the status of external systems so there
>>>>>>   are a few implementations based on the Component verifier extension:
>>>>>>
>>>>>>   1. a ServiceNow instance check to report if an instances is alive
>>>>>>   2. a simple undertow based http check that issue an http get to an
>>>>>>      http endpoint
>>>>>>
>>>>>>   There is also a simple consul repository that let you to reuse consul
>>>>>>   checks [5] so i.e. you can have a single check to monitor the status
>>>>>>   of twitter and reuse it in all your microservices.
>>>>>>
>>>>>>   An example can be found in my fork [6]
>>>>>>
>>>>>> My next goals are:
>>>>>>
>>>>>> 1. define some core checks to monitor the health of the camel context
>>>>>>    i.e. fail if there is an excessive number of errors, if the latency
>>>>>>    is too high, etc.
>>>>>> 2. expose check through JMX.
>>>>>> 3. use health checks for ServiceCall EIP
>>>>>> 4. use health checks in Clustering/Superving route controller
>>>>>>
>>>>>>
>>>>>> Any feedback is very welcome,
>>>>>> Luca
>>>>>>
>>>>>>
>>>>>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>>>>>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>>>>>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>>>>>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>>>>>> [5] https://www.consul.io/docs/agent/checks.html
>>>>>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> Luca Burgazzoli
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Claus Ibsen
>>>>> -----------------
>>>>> http://davsclaus.com @davsclaus
>>>>> Camel in Action 2: https://www.manning.com/ibsen2
>>>>
>>>>
>>>>
>>>> --
>>>> Claus Ibsen
>>>> -----------------
>>>> http://davsclaus.com @davsclaus
>>>> Camel in Action 2: https://www.manning.com/ibsen2



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Luca Burgazzoli <lb...@gmail.com>.
Hello,

I've added some info through JMX, would you mind review it before merging ?

Regards,
Luca


---
Luca Burgazzoli


On Fri, Sep 8, 2017 at 4:20 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
> Hello,
>
> I've just pushed some bits to my fork to cleanup the implementation
> and implement some basic checks for routes status. In addition, to
> make it suitable to be included in camel 2.20, I've reduced the scope
> of the implementation to be almost limited to core/internal health
> checks and to provide a good foundation for people to write their own
> advanced checks if needed (component checks such as those for undertow
> and servicenow has been removed).
>
> Any feedback is really appreciated.
>
>
> ---
> Luca Burgazzoli
>
>
> On Tue, Sep 5, 2017 at 2:25 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>> ---
>> Luca Burgazzoli
>>
>>
>> On Tue, Sep 5, 2017 at 2:17 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>> Hi Luca
>>>
>>> Looks really good.
>>>
>>> There is a few typo's and the likes in the source code I looked at.
>>> Will try to do a github comment so you can see them as well later, or
>>> when the code is merged later.
>>>
>>> 1)
>>> For the doCall implementation when you implement a health check, then
>>> what would happen if that methods throws an runtime exception? I think
>>> we need to clarify on the javadoc what the contract is, and if an
>>> exception would then render the check to be status = DOWN or what?
>>>
>>
>> I'd expect the implementation to wrap it and decide if the service is
>> healthy or not so yeah, I'll make it clear.
>>
>>>
>>> 2)
>>> I think the spring boot auto configuration prefixes for the health
>>> checks for the components such as undertow, servicenow etc should all
>>> be under the same prefix as the component itself, eg
>>>
>>> eg
>>> camel.undertow.health.checks[spring-health].interval = 5s
>>>
>>> should be
>>> camel.component.undertow.health.checks[spring-health].interval = 5s
>>>
>>> Then everything you can configure in the undertow component is with
>>> the same prefix and its consistent.
>>>
>>
>> Agree.
>>
>>>
>>> 3)
>>> To implement a custom health check and have spring boot auto
>>> configuration, then you would have to write that configuration code
>>> yourself / manually?
>>>
>>
>> At the moment yes as the layout is not defined but it may be
>> eventually auto generated like the starters.
>>
>>>
>>> 4)
>>> I wonder in the servicenow health check where you configure the
>>> instance id, username etc again, whether you may want to be able to
>>> just refer to the existing configuration so you do not repeat
>>> yourself?
>>>
>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L66
>>>
>>
>> Yeah, that was an example non properly cleaned up/explained but by
>> default the servicenow reuse component's configuration.
>>
>>>
>>> 5)
>>> In this example it is a bit confusing that the comment say the health
>>> check is enabled and then the value below is false
>>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L36
>>>
>>> 6)
>>> ... and as well there is 2 indicator.enabled in that example.
>>
>> Yeah, it definitively need to be cleaned up.
>>
>>>
>>>
>>>
>>> On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>>> Hi Luca
>>>>
>>>> I will take a closer look tomorrow, I just peaked a bit today.
>>>>
>>>> Just to be sure, the implementation of the logic that performs the
>>>> actual health check is agnostic? i.e. its not tied to must be using
>>>> Spring Boot. And that logic is if possible reusing the "ping check"
>>>> (i.e. verifier extension).
>>>>
>>>> So the spring boot health check is currently for making it easier for
>>>> end users to configure it via spring boot configuration?
>>>>
>>>>
>>>>
>>>> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>>> Hello,
>>>>>
>>>>> I've been working a little on the Health Check API [1] implementation an
>>>>> the code is available in my Apache Camel fork [2]. There is now a a new
>>>>> package [3] that defines the following concepts:
>>>>>
>>>>> - HealthCheck
>>>>>
>>>>>   this represent an health check and defines the some basic contract i.e
>>>>>   the response;
>>>>>
>>>>> - HealthCheckConfiguration
>>>>>
>>>>>   this is a basic coonfiguration object that holds some basic settings
>>>>>   like the minimum delay between calls, the number of time a service may
>>>>>   be reported as unhealthy before meking the check as failed; beside
>>>>>   those simple options, is then responsability of the check impl. to
>>>>>   eventually implement further limitations;
>>>>>
>>>>> - HealthCheckRegistry
>>>>>
>>>>>   this is just a registry, it doesn't have any method to trigger checks
>>>>>   and it has intentionally been kept simple as in the future it may be
>>>>>   superseeded by an internal camel registry [4];
>>>>>
>>>>> - HealthCheckRepository
>>>>>
>>>>>   this is a simple interface to define health check providers and by
>>>>>   default there is one that grabs all the checks available in the
>>>>>   registry so you can add your own check i.e. istantiating your bean
>>>>>   in spring/spring-boot; components can provide theirs own repository.
>>>>>
>>>>> - HealthCheckService
>>>>>
>>>>>   this is a simple service that runs in the background and invokes the
>>>>>   checks according to a schedule.
>>>>>
>>>>> The default camel context sets-up a default implementation of the health
>>>>> check registry which you can override by putting your own implementation
>>>>> in the camel registry as usual. Check are not active by default so you
>>>>> need to explicit enable/configure them.
>>>>>
>>>>> The current implementation has a number of limitations:
>>>>>
>>>>> - it is spring-boot oriented for demostration purpose so you can't
>>>>>   access health checks using JMX (but it is planned);
>>>>> - it is focused on monitoring the status of external systems so there
>>>>>   are a few implementations based on the Component verifier extension:
>>>>>
>>>>>   1. a ServiceNow instance check to report if an instances is alive
>>>>>   2. a simple undertow based http check that issue an http get to an
>>>>>      http endpoint
>>>>>
>>>>>   There is also a simple consul repository that let you to reuse consul
>>>>>   checks [5] so i.e. you can have a single check to monitor the status
>>>>>   of twitter and reuse it in all your microservices.
>>>>>
>>>>>   An example can be found in my fork [6]
>>>>>
>>>>> My next goals are:
>>>>>
>>>>> 1. define some core checks to monitor the health of the camel context
>>>>>    i.e. fail if there is an excessive number of errors, if the latency
>>>>>    is too high, etc.
>>>>> 2. expose check through JMX.
>>>>> 3. use health checks for ServiceCall EIP
>>>>> 4. use health checks in Clustering/Superving route controller
>>>>>
>>>>>
>>>>> Any feedback is very welcome,
>>>>> Luca
>>>>>
>>>>>
>>>>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>>>>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>>>>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>>>>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>>>>> [5] https://www.consul.io/docs/agent/checks.html
>>>>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>>>>
>>>>>
>>>>> ---
>>>>> Luca Burgazzoli
>>>>
>>>>
>>>>
>>>> --
>>>> Claus Ibsen
>>>> -----------------
>>>> http://davsclaus.com @davsclaus
>>>> Camel in Action 2: https://www.manning.com/ibsen2
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> -----------------
>>> http://davsclaus.com @davsclaus
>>> Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Luca Burgazzoli <lb...@gmail.com>.
Hello,

I've just pushed some bits to my fork to cleanup the implementation
and implement some basic checks for routes status. In addition, to
make it suitable to be included in camel 2.20, I've reduced the scope
of the implementation to be almost limited to core/internal health
checks and to provide a good foundation for people to write their own
advanced checks if needed (component checks such as those for undertow
and servicenow has been removed).

Any feedback is really appreciated.


---
Luca Burgazzoli


On Tue, Sep 5, 2017 at 2:25 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
> ---
> Luca Burgazzoli
>
>
> On Tue, Sep 5, 2017 at 2:17 PM, Claus Ibsen <cl...@gmail.com> wrote:
>> Hi Luca
>>
>> Looks really good.
>>
>> There is a few typo's and the likes in the source code I looked at.
>> Will try to do a github comment so you can see them as well later, or
>> when the code is merged later.
>>
>> 1)
>> For the doCall implementation when you implement a health check, then
>> what would happen if that methods throws an runtime exception? I think
>> we need to clarify on the javadoc what the contract is, and if an
>> exception would then render the check to be status = DOWN or what?
>>
>
> I'd expect the implementation to wrap it and decide if the service is
> healthy or not so yeah, I'll make it clear.
>
>>
>> 2)
>> I think the spring boot auto configuration prefixes for the health
>> checks for the components such as undertow, servicenow etc should all
>> be under the same prefix as the component itself, eg
>>
>> eg
>> camel.undertow.health.checks[spring-health].interval = 5s
>>
>> should be
>> camel.component.undertow.health.checks[spring-health].interval = 5s
>>
>> Then everything you can configure in the undertow component is with
>> the same prefix and its consistent.
>>
>
> Agree.
>
>>
>> 3)
>> To implement a custom health check and have spring boot auto
>> configuration, then you would have to write that configuration code
>> yourself / manually?
>>
>
> At the moment yes as the layout is not defined but it may be
> eventually auto generated like the starters.
>
>>
>> 4)
>> I wonder in the servicenow health check where you configure the
>> instance id, username etc again, whether you may want to be able to
>> just refer to the existing configuration so you do not repeat
>> yourself?
>>
>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L66
>>
>
> Yeah, that was an example non properly cleaned up/explained but by
> default the servicenow reuse component's configuration.
>
>>
>> 5)
>> In this example it is a bit confusing that the comment say the health
>> check is enabled and then the value below is false
>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L36
>>
>> 6)
>> ... and as well there is 2 indicator.enabled in that example.
>
> Yeah, it definitively need to be cleaned up.
>
>>
>>
>>
>> On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
>>> Hi Luca
>>>
>>> I will take a closer look tomorrow, I just peaked a bit today.
>>>
>>> Just to be sure, the implementation of the logic that performs the
>>> actual health check is agnostic? i.e. its not tied to must be using
>>> Spring Boot. And that logic is if possible reusing the "ping check"
>>> (i.e. verifier extension).
>>>
>>> So the spring boot health check is currently for making it easier for
>>> end users to configure it via spring boot configuration?
>>>
>>>
>>>
>>> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>>> Hello,
>>>>
>>>> I've been working a little on the Health Check API [1] implementation an
>>>> the code is available in my Apache Camel fork [2]. There is now a a new
>>>> package [3] that defines the following concepts:
>>>>
>>>> - HealthCheck
>>>>
>>>>   this represent an health check and defines the some basic contract i.e
>>>>   the response;
>>>>
>>>> - HealthCheckConfiguration
>>>>
>>>>   this is a basic coonfiguration object that holds some basic settings
>>>>   like the minimum delay between calls, the number of time a service may
>>>>   be reported as unhealthy before meking the check as failed; beside
>>>>   those simple options, is then responsability of the check impl. to
>>>>   eventually implement further limitations;
>>>>
>>>> - HealthCheckRegistry
>>>>
>>>>   this is just a registry, it doesn't have any method to trigger checks
>>>>   and it has intentionally been kept simple as in the future it may be
>>>>   superseeded by an internal camel registry [4];
>>>>
>>>> - HealthCheckRepository
>>>>
>>>>   this is a simple interface to define health check providers and by
>>>>   default there is one that grabs all the checks available in the
>>>>   registry so you can add your own check i.e. istantiating your bean
>>>>   in spring/spring-boot; components can provide theirs own repository.
>>>>
>>>> - HealthCheckService
>>>>
>>>>   this is a simple service that runs in the background and invokes the
>>>>   checks according to a schedule.
>>>>
>>>> The default camel context sets-up a default implementation of the health
>>>> check registry which you can override by putting your own implementation
>>>> in the camel registry as usual. Check are not active by default so you
>>>> need to explicit enable/configure them.
>>>>
>>>> The current implementation has a number of limitations:
>>>>
>>>> - it is spring-boot oriented for demostration purpose so you can't
>>>>   access health checks using JMX (but it is planned);
>>>> - it is focused on monitoring the status of external systems so there
>>>>   are a few implementations based on the Component verifier extension:
>>>>
>>>>   1. a ServiceNow instance check to report if an instances is alive
>>>>   2. a simple undertow based http check that issue an http get to an
>>>>      http endpoint
>>>>
>>>>   There is also a simple consul repository that let you to reuse consul
>>>>   checks [5] so i.e. you can have a single check to monitor the status
>>>>   of twitter and reuse it in all your microservices.
>>>>
>>>>   An example can be found in my fork [6]
>>>>
>>>> My next goals are:
>>>>
>>>> 1. define some core checks to monitor the health of the camel context
>>>>    i.e. fail if there is an excessive number of errors, if the latency
>>>>    is too high, etc.
>>>> 2. expose check through JMX.
>>>> 3. use health checks for ServiceCall EIP
>>>> 4. use health checks in Clustering/Superving route controller
>>>>
>>>>
>>>> Any feedback is very welcome,
>>>> Luca
>>>>
>>>>
>>>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>>>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>>>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>>>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>>>> [5] https://www.consul.io/docs/agent/checks.html
>>>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>>>
>>>>
>>>> ---
>>>> Luca Burgazzoli
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> -----------------
>>> http://davsclaus.com @davsclaus
>>> Camel in Action 2: https://www.manning.com/ibsen2
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> http://davsclaus.com @davsclaus
>> Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Luca Burgazzoli <lb...@gmail.com>.
---
Luca Burgazzoli


On Tue, Sep 5, 2017 at 2:17 PM, Claus Ibsen <cl...@gmail.com> wrote:
> Hi Luca
>
> Looks really good.
>
> There is a few typo's and the likes in the source code I looked at.
> Will try to do a github comment so you can see them as well later, or
> when the code is merged later.
>
> 1)
> For the doCall implementation when you implement a health check, then
> what would happen if that methods throws an runtime exception? I think
> we need to clarify on the javadoc what the contract is, and if an
> exception would then render the check to be status = DOWN or what?
>

I'd expect the implementation to wrap it and decide if the service is
healthy or not so yeah, I'll make it clear.

>
> 2)
> I think the spring boot auto configuration prefixes for the health
> checks for the components such as undertow, servicenow etc should all
> be under the same prefix as the component itself, eg
>
> eg
> camel.undertow.health.checks[spring-health].interval = 5s
>
> should be
> camel.component.undertow.health.checks[spring-health].interval = 5s
>
> Then everything you can configure in the undertow component is with
> the same prefix and its consistent.
>

Agree.

>
> 3)
> To implement a custom health check and have spring boot auto
> configuration, then you would have to write that configuration code
> yourself / manually?
>

At the moment yes as the layout is not defined but it may be
eventually auto generated like the starters.

>
> 4)
> I wonder in the servicenow health check where you configure the
> instance id, username etc again, whether you may want to be able to
> just refer to the existing configuration so you do not repeat
> yourself?
>
> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L66
>

Yeah, that was an example non properly cleaned up/explained but by
default the servicenow reuse component's configuration.

>
> 5)
> In this example it is a bit confusing that the comment say the health
> check is enabled and then the value below is false
> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L36
>
> 6)
> ... and as well there is 2 indicator.enabled in that example.

Yeah, it definitively need to be cleaned up.

>
>
>
> On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
>> Hi Luca
>>
>> I will take a closer look tomorrow, I just peaked a bit today.
>>
>> Just to be sure, the implementation of the logic that performs the
>> actual health check is agnostic? i.e. its not tied to must be using
>> Spring Boot. And that logic is if possible reusing the "ping check"
>> (i.e. verifier extension).
>>
>> So the spring boot health check is currently for making it easier for
>> end users to configure it via spring boot configuration?
>>
>>
>>
>> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>>> Hello,
>>>
>>> I've been working a little on the Health Check API [1] implementation an
>>> the code is available in my Apache Camel fork [2]. There is now a a new
>>> package [3] that defines the following concepts:
>>>
>>> - HealthCheck
>>>
>>>   this represent an health check and defines the some basic contract i.e
>>>   the response;
>>>
>>> - HealthCheckConfiguration
>>>
>>>   this is a basic coonfiguration object that holds some basic settings
>>>   like the minimum delay between calls, the number of time a service may
>>>   be reported as unhealthy before meking the check as failed; beside
>>>   those simple options, is then responsability of the check impl. to
>>>   eventually implement further limitations;
>>>
>>> - HealthCheckRegistry
>>>
>>>   this is just a registry, it doesn't have any method to trigger checks
>>>   and it has intentionally been kept simple as in the future it may be
>>>   superseeded by an internal camel registry [4];
>>>
>>> - HealthCheckRepository
>>>
>>>   this is a simple interface to define health check providers and by
>>>   default there is one that grabs all the checks available in the
>>>   registry so you can add your own check i.e. istantiating your bean
>>>   in spring/spring-boot; components can provide theirs own repository.
>>>
>>> - HealthCheckService
>>>
>>>   this is a simple service that runs in the background and invokes the
>>>   checks according to a schedule.
>>>
>>> The default camel context sets-up a default implementation of the health
>>> check registry which you can override by putting your own implementation
>>> in the camel registry as usual. Check are not active by default so you
>>> need to explicit enable/configure them.
>>>
>>> The current implementation has a number of limitations:
>>>
>>> - it is spring-boot oriented for demostration purpose so you can't
>>>   access health checks using JMX (but it is planned);
>>> - it is focused on monitoring the status of external systems so there
>>>   are a few implementations based on the Component verifier extension:
>>>
>>>   1. a ServiceNow instance check to report if an instances is alive
>>>   2. a simple undertow based http check that issue an http get to an
>>>      http endpoint
>>>
>>>   There is also a simple consul repository that let you to reuse consul
>>>   checks [5] so i.e. you can have a single check to monitor the status
>>>   of twitter and reuse it in all your microservices.
>>>
>>>   An example can be found in my fork [6]
>>>
>>> My next goals are:
>>>
>>> 1. define some core checks to monitor the health of the camel context
>>>    i.e. fail if there is an excessive number of errors, if the latency
>>>    is too high, etc.
>>> 2. expose check through JMX.
>>> 3. use health checks for ServiceCall EIP
>>> 4. use health checks in Clustering/Superving route controller
>>>
>>>
>>> Any feedback is very welcome,
>>> Luca
>>>
>>>
>>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>>> [5] https://www.consul.io/docs/agent/checks.html
>>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>>
>>>
>>> ---
>>> Luca Burgazzoli
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> http://davsclaus.com @davsclaus
>> Camel in Action 2: https://www.manning.com/ibsen2
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Claus Ibsen <cl...@gmail.com>.
Hi Luca

Looks really good.

There is a few typo's and the likes in the source code I looked at.
Will try to do a github comment so you can see them as well later, or
when the code is merged later.

1)
For the doCall implementation when you implement a health check, then
what would happen if that methods throws an runtime exception? I think
we need to clarify on the javadoc what the contract is, and if an
exception would then render the check to be status = DOWN or what?


2)
I think the spring boot auto configuration prefixes for the health
checks for the components such as undertow, servicenow etc should all
be under the same prefix as the component itself, eg

eg
camel.undertow.health.checks[spring-health].interval = 5s

should be
camel.component.undertow.health.checks[spring-health].interval = 5s

Then everything you can configure in the undertow component is with
the same prefix and its consistent.


3)
To implement a custom health check and have spring boot auto
configuration, then you would have to write that configuration code
yourself / manually?


4)
I wonder in the servicenow health check where you configure the
instance id, username etc again, whether you may want to be able to
just refer to the existing configuration so you do not repeat
yourself?

https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L66


5)
In this example it is a bit confusing that the comment say the health
check is enabled and then the value below is false
https://github.com/lburgazzoli/apache-camel/blob/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks/application/src/main/resources/application.properties#L36

6)
... and as well there is 2 indicator.enabled in that example.



On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
> Hi Luca
>
> I will take a closer look tomorrow, I just peaked a bit today.
>
> Just to be sure, the implementation of the logic that performs the
> actual health check is agnostic? i.e. its not tied to must be using
> Spring Boot. And that logic is if possible reusing the "ping check"
> (i.e. verifier extension).
>
> So the spring boot health check is currently for making it easier for
> end users to configure it via spring boot configuration?
>
>
>
> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>> Hello,
>>
>> I've been working a little on the Health Check API [1] implementation an
>> the code is available in my Apache Camel fork [2]. There is now a a new
>> package [3] that defines the following concepts:
>>
>> - HealthCheck
>>
>>   this represent an health check and defines the some basic contract i.e
>>   the response;
>>
>> - HealthCheckConfiguration
>>
>>   this is a basic coonfiguration object that holds some basic settings
>>   like the minimum delay between calls, the number of time a service may
>>   be reported as unhealthy before meking the check as failed; beside
>>   those simple options, is then responsability of the check impl. to
>>   eventually implement further limitations;
>>
>> - HealthCheckRegistry
>>
>>   this is just a registry, it doesn't have any method to trigger checks
>>   and it has intentionally been kept simple as in the future it may be
>>   superseeded by an internal camel registry [4];
>>
>> - HealthCheckRepository
>>
>>   this is a simple interface to define health check providers and by
>>   default there is one that grabs all the checks available in the
>>   registry so you can add your own check i.e. istantiating your bean
>>   in spring/spring-boot; components can provide theirs own repository.
>>
>> - HealthCheckService
>>
>>   this is a simple service that runs in the background and invokes the
>>   checks according to a schedule.
>>
>> The default camel context sets-up a default implementation of the health
>> check registry which you can override by putting your own implementation
>> in the camel registry as usual. Check are not active by default so you
>> need to explicit enable/configure them.
>>
>> The current implementation has a number of limitations:
>>
>> - it is spring-boot oriented for demostration purpose so you can't
>>   access health checks using JMX (but it is planned);
>> - it is focused on monitoring the status of external systems so there
>>   are a few implementations based on the Component verifier extension:
>>
>>   1. a ServiceNow instance check to report if an instances is alive
>>   2. a simple undertow based http check that issue an http get to an
>>      http endpoint
>>
>>   There is also a simple consul repository that let you to reuse consul
>>   checks [5] so i.e. you can have a single check to monitor the status
>>   of twitter and reuse it in all your microservices.
>>
>>   An example can be found in my fork [6]
>>
>> My next goals are:
>>
>> 1. define some core checks to monitor the health of the camel context
>>    i.e. fail if there is an excessive number of errors, if the latency
>>    is too high, etc.
>> 2. expose check through JMX.
>> 3. use health checks for ServiceCall EIP
>> 4. use health checks in Clustering/Superving route controller
>>
>>
>> Any feedback is very welcome,
>> Luca
>>
>>
>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>> [5] https://www.consul.io/docs/agent/checks.html
>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>
>>
>> ---
>> Luca Burgazzoli
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Luca Burgazzoli <lb...@gmail.com>.
Correct spring boot here is used for demonstration purpose only to
make it easy to configure health checks and to consume them using i.e.
curl but the core check is pure camel :)

---
Luca Burgazzoli


On Mon, Sep 4, 2017 at 5:16 PM, Claus Ibsen <cl...@gmail.com> wrote:
> Hi Luca
>
> I will take a closer look tomorrow, I just peaked a bit today.
>
> Just to be sure, the implementation of the logic that performs the
> actual health check is agnostic? i.e. its not tied to must be using
> Spring Boot. And that logic is if possible reusing the "ping check"
> (i.e. verifier extension).
>
> So the spring boot health check is currently for making it easier for
> end users to configure it via spring boot configuration?
>
>
>
> On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
>> Hello,
>>
>> I've been working a little on the Health Check API [1] implementation an
>> the code is available in my Apache Camel fork [2]. There is now a a new
>> package [3] that defines the following concepts:
>>
>> - HealthCheck
>>
>>   this represent an health check and defines the some basic contract i.e
>>   the response;
>>
>> - HealthCheckConfiguration
>>
>>   this is a basic coonfiguration object that holds some basic settings
>>   like the minimum delay between calls, the number of time a service may
>>   be reported as unhealthy before meking the check as failed; beside
>>   those simple options, is then responsability of the check impl. to
>>   eventually implement further limitations;
>>
>> - HealthCheckRegistry
>>
>>   this is just a registry, it doesn't have any method to trigger checks
>>   and it has intentionally been kept simple as in the future it may be
>>   superseeded by an internal camel registry [4];
>>
>> - HealthCheckRepository
>>
>>   this is a simple interface to define health check providers and by
>>   default there is one that grabs all the checks available in the
>>   registry so you can add your own check i.e. istantiating your bean
>>   in spring/spring-boot; components can provide theirs own repository.
>>
>> - HealthCheckService
>>
>>   this is a simple service that runs in the background and invokes the
>>   checks according to a schedule.
>>
>> The default camel context sets-up a default implementation of the health
>> check registry which you can override by putting your own implementation
>> in the camel registry as usual. Check are not active by default so you
>> need to explicit enable/configure them.
>>
>> The current implementation has a number of limitations:
>>
>> - it is spring-boot oriented for demostration purpose so you can't
>>   access health checks using JMX (but it is planned);
>> - it is focused on monitoring the status of external systems so there
>>   are a few implementations based on the Component verifier extension:
>>
>>   1. a ServiceNow instance check to report if an instances is alive
>>   2. a simple undertow based http check that issue an http get to an
>>      http endpoint
>>
>>   There is also a simple consul repository that let you to reuse consul
>>   checks [5] so i.e. you can have a single check to monitor the status
>>   of twitter and reuse it in all your microservices.
>>
>>   An example can be found in my fork [6]
>>
>> My next goals are:
>>
>> 1. define some core checks to monitor the health of the camel context
>>    i.e. fail if there is an excessive number of errors, if the latency
>>    is too high, etc.
>> 2. expose check through JMX.
>> 3. use health checks for ServiceCall EIP
>> 4. use health checks in Clustering/Superving route controller
>>
>>
>> Any feedback is very welcome,
>> Luca
>>
>>
>> [1] https://issues.apache.org/jira/browse/CAMEL-10026
>> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
>> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
>> [4] https://issues.apache.org/jira/browse/CAMEL-10792
>> [5] https://www.consul.io/docs/agent/checks.html
>> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>>
>>
>> ---
>> Luca Burgazzoli
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Claus Ibsen <cl...@gmail.com>.
Hi Luca

I will take a closer look tomorrow, I just peaked a bit today.

Just to be sure, the implementation of the logic that performs the
actual health check is agnostic? i.e. its not tied to must be using
Spring Boot. And that logic is if possible reusing the "ping check"
(i.e. verifier extension).

So the spring boot health check is currently for making it easier for
end users to configure it via spring boot configuration?



On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
> Hello,
>
> I've been working a little on the Health Check API [1] implementation an
> the code is available in my Apache Camel fork [2]. There is now a a new
> package [3] that defines the following concepts:
>
> - HealthCheck
>
>   this represent an health check and defines the some basic contract i.e
>   the response;
>
> - HealthCheckConfiguration
>
>   this is a basic coonfiguration object that holds some basic settings
>   like the minimum delay between calls, the number of time a service may
>   be reported as unhealthy before meking the check as failed; beside
>   those simple options, is then responsability of the check impl. to
>   eventually implement further limitations;
>
> - HealthCheckRegistry
>
>   this is just a registry, it doesn't have any method to trigger checks
>   and it has intentionally been kept simple as in the future it may be
>   superseeded by an internal camel registry [4];
>
> - HealthCheckRepository
>
>   this is a simple interface to define health check providers and by
>   default there is one that grabs all the checks available in the
>   registry so you can add your own check i.e. istantiating your bean
>   in spring/spring-boot; components can provide theirs own repository.
>
> - HealthCheckService
>
>   this is a simple service that runs in the background and invokes the
>   checks according to a schedule.
>
> The default camel context sets-up a default implementation of the health
> check registry which you can override by putting your own implementation
> in the camel registry as usual. Check are not active by default so you
> need to explicit enable/configure them.
>
> The current implementation has a number of limitations:
>
> - it is spring-boot oriented for demostration purpose so you can't
>   access health checks using JMX (but it is planned);
> - it is focused on monitoring the status of external systems so there
>   are a few implementations based on the Component verifier extension:
>
>   1. a ServiceNow instance check to report if an instances is alive
>   2. a simple undertow based http check that issue an http get to an
>      http endpoint
>
>   There is also a simple consul repository that let you to reuse consul
>   checks [5] so i.e. you can have a single check to monitor the status
>   of twitter and reuse it in all your microservices.
>
>   An example can be found in my fork [6]
>
> My next goals are:
>
> 1. define some core checks to monitor the health of the camel context
>    i.e. fail if there is an excessive number of errors, if the latency
>    is too high, etc.
> 2. expose check through JMX.
> 3. use health checks for ServiceCall EIP
> 4. use health checks in Clustering/Superving route controller
>
>
> Any feedback is very welcome,
> Luca
>
>
> [1] https://issues.apache.org/jira/browse/CAMEL-10026
> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
> [4] https://issues.apache.org/jira/browse/CAMEL-10792
> [5] https://www.consul.io/docs/agent/checks.html
> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>
>
> ---
> Luca Burgazzoli



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Re: Health Check API

Posted by Claus Ibsen <cl...@gmail.com>.
On Mon, Sep 4, 2017 at 4:01 PM, Luca Burgazzoli <lb...@gmail.com> wrote:
> Hello,
>
> I've been working a little on the Health Check API [1] implementation an
> the code is available in my Apache Camel fork [2]. There is now a a new
> package [3] that defines the following concepts:
>
> - HealthCheck
>
>   this represent an health check and defines the some basic contract i.e
>   the response;
>
> - HealthCheckConfiguration
>
>   this is a basic coonfiguration object that holds some basic settings
>   like the minimum delay between calls, the number of time a service may
>   be reported as unhealthy before meking the check as failed; beside
>   those simple options, is then responsability of the check impl. to
>   eventually implement further limitations;
>
> - HealthCheckRegistry
>
>   this is just a registry, it doesn't have any method to trigger checks
>   and it has intentionally been kept simple as in the future it may be
>   superseeded by an internal camel registry [4];
>
> - HealthCheckRepository
>
>   this is a simple interface to define health check providers and by
>   default there is one that grabs all the checks available in the
>   registry so you can add your own check i.e. istantiating your bean
>   in spring/spring-boot; components can provide theirs own repository.
>
> - HealthCheckService
>
>   this is a simple service that runs in the background and invokes the
>   checks according to a schedule.
>
> The default camel context sets-up a default implementation of the health
> check registry which you can override by putting your own implementation
> in the camel registry as usual. Check are not active by default so you
> need to explicit enable/configure them.
>
> The current implementation has a number of limitations:
>
> - it is spring-boot oriented for demostration purpose so you can't
>   access health checks using JMX (but it is planned);
> - it is focused on monitoring the status of external systems so there
>   are a few implementations based on the Component verifier extension:
>
>   1. a ServiceNow instance check to report if an instances is alive
>   2. a simple undertow based http check that issue an http get to an
>      http endpoint
>
>   There is also a simple consul repository that let you to reuse consul
>   checks [5] so i.e. you can have a single check to monitor the status
>   of twitter and reuse it in all your microservices.
>
>   An example can be found in my fork [6]
>
> My next goals are:
>
> 1. define some core checks to monitor the health of the camel context
>    i.e. fail if there is an excessive number of errors, if the latency
>    is too high, etc.
> 2. expose check through JMX.
> 3. use health checks for ServiceCall EIP
> 4. use health checks in Clustering/Superving route controller
>

I think the first goal should be a bit more logging/tracing what goes
on when health checks are running.
For example we should maybe allow end users to configure a logging
level, so they can turn it on INFO etc so they can see when Camel
performs checks in the background and what their outcome is. It can be
a bit of black-box to trouble shoot.

For #3 then I think this can be deferred a bit. I think #4 is more important.

And I think we should also add more health checks into existing
components. Currently there is only a few that has that.

We should also add so we can see in the camel-catalog if a component
has support for health-check or not. Then we can have an overview of
which components has and hasn't.

Also I think we need to get a release out with partial implementation
of all of this, as if we do too much in one giant release we dont get
community feedback, and we are doing too much changes in a single
minor Camel release (eg 2.20).





>
> Any feedback is very welcome,
> Luca
>
>
> [1] https://issues.apache.org/jira/browse/CAMEL-10026
> [2] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc
> [3] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/camel-core/src/main/java/org/apache/camel/health
> [4] https://issues.apache.org/jira/browse/CAMEL-10792
> [5] https://www.consul.io/docs/agent/checks.html
> [6] https://github.com/lburgazzoli/apache-camel/tree/CAMEL-10026-hc/examples/camel-example-spring-boot-health-checks
>
>
> ---
> Luca Burgazzoli



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2