[ 
https://issues.apache.org/jira/browse/FELIX-6292?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17150880#comment-17150880
 ] 

Amit Mondal commented on FELIX-6292:
------------------------------------

[~henzlerg] I just had a look into the _*HealthCheckMinitor*_ and it looks 
promising. I think it would surely work in my scenario but with a slight 
modification.

The use case is as follows:
 # Consumer needs to report errors/warnings to the monitoring system
 # Consumer introduces several custom health checks having different tags
 # Every health check has been configured to be executed in different intervals 
(every 6 hours, every day, every hour etc.) or using crons
 # After any health check gets executed, a dedicated component reports the 
health check results to the monitoring system if the health check result 
comprises any warning or error message.

Earlier I thought of an interface similar to the following (I also used it 
temporarily in my local codebase to test)

 
{code:java}
/**
 * The {@link HealthCheckPostExecutionListener} interface allows consumers to 
provide
 * custom functionality to process health check execution result.
 *
 * <p>
 * Any bundle wishing to provide custom post processing functionality needs to 
create
 * a service object that implements this interface and then register it with 
the OSGi
 * framework.
 * </p>
 *
 * @since 1.0
 */
@ConsumerType
@FunctionalInterface
public interface HealthCheckPostExecutionListener {
    /**
     * This method is called when after health check execution result is 
prepared.
     *
     * @param executionResult the execution result of the health check.
     */
    void onProcessed(HealthCheckExecutionResult executionResult);

}
{code}
 

Since it is an SPI interface, a consumer can provide the custom implementation 
which gets hooked into the _*HealthCheckFuture*_ and executed as soon as any 
health check is processed.

This is just a temporary solution I worked on for the time being. I really 
liked your solution since consumers can definitely perform more stuffs with the 
newly introduced _*Healthy*_ and _*Unhealthy*_ service instances.

To realize my use case, I do require to track all _*Unhealthy*_ service 
instances dynamically and report the status to the configured monitoring 
system. But according to the current solution, _*Healthy*_ and _*Unhealthy*_ 
interfaces are just marker interfaces and hence they don't comprise any 
abstract method. I believe, it would be more beneficial to introduce such a 
method in these consumer interfaces.
{code:java}
HealthCheckExecutionResult getHealthCheckExecutionResult(){code}
 

This would enable me to retrieve the results of the _*Healthy*_ or 
_*Unhealthy*_ health checks and perform custom operations.

Please let me know what you think about it.

> Introduce functionality to perform custom operation after a heath check is 
> executed
> -----------------------------------------------------------------------------------
>
>                 Key: FELIX-6292
>                 URL: https://issues.apache.org/jira/browse/FELIX-6292
>             Project: Felix
>          Issue Type: New Feature
>          Components: Health Checks
>            Reporter: Amit Mondal
>            Priority: Minor
>              Labels: ready-to-commit
>
> Sometimes consumers need to perform custom operations after a health check 
> gets executed. For example, one might need to send the health check result to 
> online monitoring system such as Kibana, Grafana etc. That's why we need to 
> introduce an extension point for consumers to extend the current 
> functionality.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to