+1 I like this approach compared to the previous proposals because it's simpler (doesn't require a custom registry) and makes it more straightforward to replace stats with Micrometer meters in the future.
- Aaron On Fri, Jun 7, 2019 at 4:58 PM Dale Emery <dem...@pivotal.io> wrote: > Proposal for instrumenting Geode > > > *Goals* > > - Allow routing measurements to statistics, Micrometer meters, or both as > appropriate, to allow publishing each measurement to the appropriate places. > > - Minimize the intrusiveness of new and existing metrics instrumentation. > > - Minimize the amount of code that must know how to route measurements to > stats and meters. > > - Maintain Geode performance. > > - Not preclude any options for deprecating and removing Geode’s statistics > mechanism in the future. And take steps to make deprecating and removing > the existing statistics mechanism easier. > > > *Proposal* > > - Continue to use Geode’s existing style of instrumentation class (e.g. > CachePerfStats) to instrument code. > > - Enhance the instrumentation classes to create and register meters when > appropriate, and to route each measurement to the appropriate stats and > meters. > > - When we want to route a given measurement to both a statistic and a > meter, use the "legacy meter" wrapper mechanism (described below). > > - Incrementally improve the instrumentation classes to focus more on > reporting domain events (e.g. regionAdded()) and less on reporting > measurements (e.g. incRegions()). > > > *Legacy Meter Wrappers* > > To route a given measurement to both a Micrometer meter and a Geode > statistic, do the following in the instrumentation class's constructor: > > - Create and register a normal Micrometer meter in the cache's meter > registry. > > - Wrap the registered meter in a custom "legacy meter" that reads and > writes the stat, and also writes to the registered meter. > > In the instrumentation methods (e.g. endPut()): > > - Use the legacy meter to report measurements. > > I've attached two diagrams below to show how the wrapper mechanism works > for "counter" style stats and meters. The first is a class diagram, showing > how the parts relate in general. The second is a sequence diagram that > shows in some detail how the parts interact to route a given measurement to > both a meter and a stat. > > If you want even more details, Jake Barrett has created a nice "proof of > concept" implementation: > https://github.com/apache/geode/compare/develop...pivotal-jbarrett:wip/LegacyMeterBuilder > > > > Please let us know if you have questions, comments, or concerns. > > > Cheers, > Dale > > — > Dale Emery > dem...@pivotal.io > > > > > > > > >