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]
> > >
> > >
>

Reply via email to