Java Simon is a simple monitoring API that allows you to follow and better understand your application. Monitors (familiarly called Simons) are placed directly into your code and you can choose whether you want to count something or measure time/duration. Access to Simons is provided via static SimonManager.
Check out our project page to learn more: http://code.google.com/p/javasimon/
In most cases you'll probably use Stopwatch to measure time spans - so let's briefly check what it can do:
* it can measure time splits, parallel measurement is supported;
* it provides total time, number of time splits, tracks max/min time, time stamp when extremes were measured, deviation, ...;
* and like every Simon it tracks first/last usage time stamp and enable/disable/reset features are also available.
One additional bonus that comes with the API is JDBC Proxy Driver that out of the box provides nice performance overview of your DB layer.
Why we brought in a new API when there is JaMON available? Well, we tried it with JaMON but than we wanted to crucial things that JaMON doesn't provide:
* we wanted to measure time in nanoseconds (hence JDK 1.5 or higher is required);
* we wanted all monitors to be organized somehow - so we implemented tree hierarchy similar to java.util.logging API - this provides powerful features like enable/disable/reset of the whole subtrees of this monitor hierarchy.
Version 1.0 contains core functionality and we realize it lacks many important features in the bigger picture of application monitoring. Our plans in the future covers:
* Declarative Simon configuration.
* JMX access to Simons, their values and enable/disable features.
* Sampling, collecting, agregating with persistence backend (file/DB).
...and probably more, but not all in the next major release. ;-)