Looks very interesting (and good work btw!), very impatient to see what the end dump looks like with wagon and potentially local (disk) I/O! Next step is likely to try to use as an extension a shade of a "common" impl (I'm thinking to microprofile metrics but could be codehale one) to have exporters and be able to persist that.
Romain Manni-Bucau @rmannibucau <https://twitter.com/rmannibucau> | Blog <https://rmannibucau.metawerx.net/> | Old Blog <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> | LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book <https://www.packtpub.com/application-development/java-ee-8-high-performance> Le lun. 13 avr. 2020 à 15:32, Enrico Olivelli <[email protected]> a écrit : > Hi, > news about the status of my POC: > 1) I have created a demo Metrics Provider [1] > 2) I have updated my branch on Maven Studies [2] > > It works everything as expected. > In order to setup an appealing "demo" I have to add "interesting" > metrics... > > Every suggestion is welcome, as my next step I will try to instrument the > I/O done by Maven itself like local repository access and the model > building time > > Enrico > > [1] https://github.com/eolivelli/simplemavenmetrics > [2] https://github.com/apache/maven-studies/tree/maven-metrics > > Il giorno dom 5 apr 2020 alle ore 14:37 Enrico Olivelli < > [email protected]> > ha scritto: > > > I have managed to use @Inject and the extensions mechanism. > > Thank you for your advices. > > > > I am now implementing some useful "simple" metrics providers (two > > "extensions") in order to see this stuff working. > > My idea is to have two interesting implementations: > > - Dump stats at the end of the CLI session (using local DropWizard > > counters/summaries) > > - Send stats to some Metrics Systems: I am using Prometheus.io at work > > so I will use that system > > > > It will be interesting to have some Grafana dashboard that tells be > > how Maven is working on my laptop or on Jenkins. > > > > Once my POC is ready the next step will be to start instrumenting > > useful places in Maven Core. > > We should instrument only "useful" parts of Maven Core. > > Many Metrics libraries provide standard JVM metrics by default. > > I think it will be mostly up to the plugins to expose use full value. > > > > Personally I am interesting in seeing this stuff: > > - execution time for checkstyle, spotbugs... > > - execution time for javac > > - number of network transfers (Wagon HTTP) and bandwidth.... > > - time to write to disk artifacts (to local repository, in 'install', > > to "target"....) > > > > Enrico > > > > Il giorno dom 29 mar 2020 alle ore 10:40 Romain Manni-Bucau > > <[email protected]> ha scritto: > > > > > > It depends how it is done. > > > > > > @Inject MetricsSystem ms; will likely fail but if you inject the > > container > > > and do the lookup you can handle the absence of the metrics, less > elegant > > > but working as well. > > > > > > Alternative is to inject a custom compiler component and have 2 > > components > > > impl (hints being different), one with injected metrics, one with noop > > > metrics hardcoded. > > > Depending the current maven version you select the right hint. > > > Think it is more or less what we do to handle aether change in some > > earlier > > > maven version. > > > > > > Romain Manni-Bucau > > > @rmannibucau <https://twitter.com/rmannibucau> | Blog > > > <https://rmannibucau.metawerx.net/> | Old Blog > > > <http://rmannibucau.wordpress.com> | Github < > > https://github.com/rmannibucau> | > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book > > > < > > > https://www.packtpub.com/application-development/java-ee-8-high-performance > > > > > > > > > > > > Le dim. 29 mars 2020 à 10:33, Enrico Olivelli <[email protected]> a > > > écrit : > > > > > > > Self answer: I had written the DefaultMetricsSystem file in the wrong > > > > directory ! (in maven core tests!) > > > > Sorry fo the noise > > > > > > > > I have just one problem. > > > > Currently I am using Jsr300 to plug the MetricsSystem to Maven Core > > > > and this would be the expected way for Plugins. > > > > > > > > Say now that I want to use my MetricsSystem bean (@Inject > > > > MetricsSystem) in the Maven Compiler Plugin or in Wagon... > > > > let's say we do a 3.8.2 Maven Compiler plugin and that we deliver > this > > > > MetricsSystem in Maven 3.7.0... > > > > Will Maven compiler plugin 3.8.2 work on Maven 3.6.x that does not > > > > bundle the definition of the MetricsSytem ? > > > > > > > > Ideally I would like to have a "null" value or a Default NOOP > > > > implementation when the plugin is not running on Maven 3.7.0 > > > > Will it work ? > > > > > > > > I will continue with the POC then I will share my model. > > > > The change to Maven Core is almost there. > > > > Now my plan is: > > > > - Create an independent "Maven Extension" (in my github space, non > ASF > > > > by now, to make it clear that this system is totally pluggable with > > > > extensions) that wraps Dropwizard Metrics and outputs the results to > > > > file at the end of the build > > > > - Add some initial metrics in Maven runtime > > > > - Try with some plugin > > > > > > > > > > > > > > > > > > > > Enrico > > > > > > > > Il giorno sab 28 mar 2020 alle ore 15:57 Enrico Olivelli > > > > <[email protected]> ha scritto: > > > > > > > > > > Hi, > > > > > I have pushed a new version of my prof-of-concept > > > > > > > https://github.com/apache/maven-studies/compare/maven-metrics?expand=1 > > > > > > > > > > I am introducing a MetricsSystem interface and a > DefaultMetricsSystem > > > > CDI bean. > > > > > I am new to sisu/plexsus container. > > > > > It looks like that DefaultMetricsSystem is getting instantiated in > > > > > Maven Core tests > > > > > > > > > > This is my work: > > > > > > > https://github.com/apache/maven-studies/compare/maven-metrics?expand=1 > > > > > > > > > > But if I run Maven from the command line I get the error below > > > > > > > > > > Maybe I missing some config/annotation > > > > > > > > > > Any help is appreciated ! > > > > > > > > > > Enrico > > > > > > > > > > > > > > > eolivelli@LAPTOP-OODVV59Q apache-maven-3.7.0-SNAPSHOT]$ bin/mvn > > > > > [WARNING] Error injecting: org.apache.maven.DefaultMaven > > > > > com.google.inject.ProvisionException: Unable to provision, see the > > > > > following errors: > > > > > > > > > > 1) No implementation for org.apache.maven.metrics.MetricsSystem was > > > > bound. > > > > > at ClassRealm[plexus.core, parent: null] (via modules: > > > > > org.eclipse.sisu.wire.WireModule -> > > > > > org.eclipse.sisu.plexus.PlexusBindingModule) > > > > > while locating > org.apache.maven.lifecycle.internal.LifecycleStarter > > > > > while locating org.apache.maven.DefaultMaven > > > > > > > > > > 1 error > > > > > at > > > > > > > com.google.inject.internal.InternalProvisionException.toProvisionException > > > > > (InternalProvisionException.java:226) > > > > > at com.google.inject.internal.InjectorImpl$1.get > > > > (InjectorImpl.java:1053) > > > > > at com.google.inject.internal.InjectorImpl.getInstance > > > > > (InjectorImpl.java:1086) > > > > > at org.eclipse.sisu.space.AbstractDeferredClass.get > > > > > (AbstractDeferredClass.java:48) > > > > > at com.google.inject.internal.ProviderInternalFactory.provision > > > > > (ProviderInternalFactory.java:85) > > > > > at > > > > > > > com.google.inject.internal.InternalFactoryToInitializableAdapter.provision > > > > > (InternalFactoryToInitializableAdapter.java:57) > > > > > at com.google.inject.internal.ProviderInternalFactory$1.call > > > > > (ProviderInternalFactory.java:66) > > > > > at > > > > > > > com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision > > > > > (ProvisionListenerStackCallback.java:112) > > > > > at > org.eclipse.sisu.bean.BeanScheduler$CycleActivator.onProvision > > > > > (BeanScheduler.java:230) > > > > > at > > > > > > > com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision > > > > > (ProvisionListenerStackCallback.java:120) > > > > > at > > > > com.google.inject.internal.ProvisionListenerStackCallback.provision > > > > > (ProvisionListenerStackCallback.java:66) > > > > > at > com.google.inject.internal.ProviderInternalFactory.circularGet > > > > > (ProviderInternalFactory.java:61) > > > > > at > > > > com.google.inject.internal.InternalFactoryToInitializableAdapter.get > > > > > (InternalFactoryToInitializableAdapter.java:47) > > > > > at > > com.google.inject.internal.ProviderToInternalFactoryAdapter.get > > > > > (ProviderToInternalFactoryAdapter.java:40) > > > > > at com.google.inject.internal.SingletonScope$1.get > > > > (SingletonScope.java:168) > > > > > at > > com.google.inject.internal.InternalFactoryToProviderAdapter.get > > > > > (InternalFactoryToProviderAdapter.java:39) > > > > > at com.google.inject.internal.InjectorImpl$1.get > > > > (InjectorImpl.java:1050) > > > > > at org.eclipse.sisu.inject.LazyBeanEntry.getValue > > > > (LazyBeanEntry.java:81) > > > > > at org.eclipse.sisu.plexus.LazyPlexusBean.getValue > > > > (LazyPlexusBean.java:51) > > > > > at org.codehaus.plexus.DefaultPlexusContainer.lookup > > > > > (DefaultPlexusContainer.java:263) > > > > > at org.codehaus.plexus.DefaultPlexusContainer.lookup > > > > > (DefaultPlexusContainer.java:255) > > > > > at org.codehaus.plexus.DefaultPlexusContainer.lookup > > > > > (DefaultPlexusContainer.java:249) > > > > > at org.apache.maven.cli.MavenCli.container (MavenCli.java:696) > > > > > at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:284) > > > > > at org.apache.maven.cli.MavenCli.main (MavenCli.java:195) > > > > > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 > (Native > > > > Method) > > > > > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke > > > > > (NativeMethodAccessorImpl.java:62) > > > > > at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke > > > > > (DelegatingMethodAccessorImpl.java:43) > > > > > at java.lang.reflect.Method.invoke (Method.java:564) > > > > > at > > org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced > > > > > (Launcher.java:282) > > > > > at org.codehaus.plexus.classworlds.launcher.Launcher.launch > > > > > (Launcher.java:225) > > > > > at > > org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode > > > > > (Launcher.java:406) > > > > > at org.codehaus.plexus.classworlds.launcher.Launcher.main > > > > > (Launcher.java:347) > > > > > [ERROR] Error executing Maven. > > > > > [ERROR] com.google.inject.ProvisionException: Unable to provision, > > see > > > > > the following errors: > > > > > > > > > > 1) No implementation for org.apache.maven.metrics.MetricsSystem was > > > > bound. > > > > > at ClassRealm[plexus.core, parent: null] (via modules: > > > > > org.eclipse.sisu.wire.WireModule -> > > > > > org.eclipse.sisu.plexus.PlexusBindingModule) > > > > > while locating > org.apache.maven.lifecycle.internal.LifecycleStarter > > > > > while locating org.apache.maven.DefaultMaven > > > > > at ClassRealm[plexus.core, parent: null] (via modules: > > > > > org.eclipse.sisu.wire.WireModule -> > > > > > org.eclipse.sisu.plexus.PlexusBindingModule) > > > > > while locating org.apache.maven.Maven > > > > > > > > > > 1 error > > > > > role: org.apache.maven.Maven > > > > > > > > > > Il giorno mar 17 mar 2020 alle ore 08:35 Hervé BOUTEMY > > > > > <[email protected]> ha scritto: > > > > > > > > > > > > Le samedi 14 mars 2020, 15:14:17 CET Enrico Olivelli a écrit : > > > > > > > I am starting this work. > > > > > > > I have pushed a copy of current maven core master to > > maven-studies. > > > > > > nice > > > > > > > > > > > > [...] > > > > > > > I don't know how classloading works very well in the case of > > > > Maven/Plexus. > > > > > > your approach looks reasonable: you're adding extensions to the > > "core" > > > > > > classloader [1] > > > > > > > > > > > > Regards, > > > > > > > > > > > > Hervé > > > > > > > > > > > > [1] > > https://maven.apache.org/guides/mini/guide-maven-classloading.html > > > > > > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > > > To unsubscribe, e-mail: [email protected] > > > > > > For additional commands, e-mail: [email protected] > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: [email protected] > > > > For additional commands, e-mail: [email protected] > > > > > > > > > > >
