Hi Chetan, Thank you for picking up SLING-4080 and the thread which stalled some time ago. I am +1 on getting it into commons so it Sling can be instrumented in a way that is safe to use in production 24*7. Very good to hear the same has been done in Oak. Apologies for having been unable to help more with this effort, being a bit snowed under at present. Best Regards Ian
On 5 January 2016 at 15:54, Chetan Mehrotra <[email protected]> wrote: > Hi Team, > > Reviving the old thread [1] around introducing an API to collect > Metric data using Metric library [2]. > > Recently as part of OAK-3814 in Jackrabbit Oak we added support for > collecting important runtime performance data using the Metric library > and it looks useful. Based on that experience I think it would be good > to have a similar API in Sling also. I have done initial > implementation at [3] which provides a simple wrapper API over Metrics > library > > Design Points > ========== > > 1. Expose the sub set of Metric API which is useful for majority code > which just need to collect data - Metric API has both data collection > and data reporting api. Former is the one which would be used by > majority of code while later is used only for tooling. So the api > proposed in [3] is subset of Metric API > > 2. Provide a NOOP implementation so as to make Metric integration > optional - As the new Metrics support would be getting used in core > areas of Sling which so far do not have any dependency. It should be > possible to have a simple NOOP implementation which can be inlined > into using bundle (if required). It would also allow us to turn of > Metric integration easily so as to access impact of monitoring (if > any/or if it gives problem) > > 3. WebConsole Integration - Metric bundle exposes a WebConsole plugin > [4] and printer to dump all metric data in a single place > > 4. Support for Adapting to underlying Metric instance - One can access > the Metric instance if required > > TODO > ====== > > 1. Have TimeSeries support - Would be good to have something similar > to Jackrabbit TimeSeries [6] in Sling. It would allow us to view the > data as it updated in time. This can be easily plugged in later with > current design > > Usage > ===== > > API is very much similar to [5] > > --------------------------------------------------------------------------- > > import org.apache.sling.metrics.Counter; > import org.apache.sling.metrics.MetricsService; > > @Reference > private MetricsService metricsService; > > private Counter counter; > > @Activate > private void activate(){ > counter = metricsService.counter("sessionCounter"); > } > > public void onSessionCreation(){ > counter.inc(); > } > --------------------------------------------------------------------------- > > 1. Get a reference to MetricsService > 2. Initialize the require Meter e.g. Counter in above case > 3. Make use of Meter to capture require stats > > Kindly provide your feedback here or in SLING-4080! > > Also should we move the code now to commons from whiteboard? > > Chetan Mehrotra > [1] http://markmail.org/thread/cyjc2v34l3lxrtxb > [2] http://metrics.dropwizard.io/ > [3] > https://svn.apache.org/repos/asf/sling/whiteboard/chetanm/metrics/src/main/java/org/apache/sling/metrics/ > [4] > https://issues.apache.org/jira/secure/attachment/12780565/metric-web-console.png > [5] http://metrics.dropwizard.io/3.1.0/getting-started/#counters > [6] > https://github.com/apache/jackrabbit/blob/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/TimeSeries.java >
