== Metrics Example - CDI

=== Introduction

This example illustrates the integration between Camel, Dropwizard
Metrics and CDI.

The example emulates an unreliable service that processes a continuous
stream of events. The unreliable service fails randomly and metrics get
collected to report the number of generated events as well as the total
number of attempted, redelivered, failed and successful calls to the
service. A SLF4J reporter is configured so that these metrics details
get logged every 10 seconds in the console.

The example is implemented in Java with CDI dependency injection. It
uses JBoss Weld as the minimal CDI container to run the application,
though you can run the application in any CDI compliant container.

The `+camel-cdi+` and `+camel-metrics+` components are used in this
example. The `+camel-test-cdi+` module is used for the JUnit test
runner. Besides, the Metrics CDI extension is used so that metrics can
be injected and custom metrics registered via CDI. For instance, a ratio
gauge is registered to monitor the success rate, that is the ratio of
success calls on the number of generated events.

=== Build

You can build this example using:

[source,sh]
----
$ mvn package
----

=== Run

You can run this example using:

[source,sh]
----
$ mvn camel:run
----

When the Camel application runs, you should see the calls to the
`unreliable-service' being logged to the console, e.g.:

....
2016-01-18 15:19:04,390 [ timer://stream] INFO  unreliable-service - Processing event #8...
2016-01-18 15:19:06,399 [ timer://stream] ERROR unreliable-service - Failed processing event #8
2016-01-18 15:19:06,400 [ timer://stream] INFO  unreliable-service - Processing event #9...
2016-01-18 15:19:08,410 [ timer://stream] ERROR unreliable-service - Failed processing event #9
2016-01-18 15:19:08,411 [ timer://stream] INFO  unreliable-service - Processing event #10...
2016-01-18 15:19:08,412 [ timer://stream] INFO  unreliable-service - Successfully processed event #10
2016-01-18 15:19:09,415 [ timer://stream] INFO  unreliable-service - Processing event #11...
2016-01-18 15:19:09,416 [ timer://stream] INFO  unreliable-service - Successfully processed event #11
2016-01-18 15:19:10,420 [ timer://stream] INFO  unreliable-service - Processing event #12...
2016-01-18 15:19:10,421 [ timer://stream] INFO  unreliable-service - Successfully processed event #12
2016-01-18 15:19:11,424 [ timer://stream] INFO  unreliable-service - Processing event #13...
2016-01-18 15:19:12,428 [ timer://stream] WARN  unreliable-service - Processed event #13 after 1 retries
2016-01-18 15:19:12,430 [ timer://stream] INFO  unreliable-service - Successfully processed event #13
....

And every 10 seconds, the metrics report, e.g.:

....
2016-01-18 15:19:14,360 [rter-1-thread-1] INFO  metrics - type=GAUGE, name=success-ratio, value=0.9314661799835947
2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=attempt, count=26, mean_rate=1.3682531895692165, m1=1.245416192969619, m5=1.209807850571521, m15=1.2033118138834105, rate_unit=events/second
2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=error, count=2, mean_rate=0.25121358141009453, m1=0.4, m5=0.4, m15=0.4, rate_unit=events/second
2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=generated, count=15, mean_rate=0.7210025396112787, m1=0.6455184225121126, m5=0.6098087536676114, m15=0.6033118478925024, rate_unit=events/second
2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=redelivery, count=11, mean_rate=0.6872842357052532, m1=0.9385926899562456, m5=0.9868864401928024, m15=0.995580155717569, rate_unit=events/second
2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=success, count=12, mean_rate=0.5768131773739456, m1=0.6012785791263936, m5=0.6000546385677541, m15=0.6000061386568257, rate_unit=events/second
....

The Camel application can be stopped pressing ctrl+c in the shell.

=== Run unit tests

There are unit tests implemented, which can be run with the following command:

[source,sh]
----
$ mvn test
----

=== Help and contributions

If you hit any problem using Camel or have some feedback, then please
https://camel.apache.org/community/support/[let us know].

We also love contributors, so
https://camel.apache.org/community/contributing/[get involved] :-)

The Camel riders!
