You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by eo...@apache.org on 2020/05/10 14:08:02 UTC
[maven-studies] 18/23: Use Injection in order to load MetricsSystem
from extensions
This is an automated email from the ASF dual-hosted git repository.
eolivelli pushed a commit to branch maven-metrics
in repository https://gitbox.apache.org/repos/asf/maven-studies.git
commit 80067987947f97c96c80c4c164319e7fd8c01355
Author: Enrico Olivelli <eo...@apache.org>
AuthorDate: Sun Apr 5 14:18:56 2020 +0200
Use Injection in order to load MetricsSystem from extensions
---
.../main/java/org/apache/maven/DefaultMaven.java | 37 +++++++---------------
.../maven/lifecycle/internal/LifecycleStarter.java | 7 ++--
.../metrics/internal/DefaultMetricsSystem.java | 19 ++++-------
.../main/java/org/apache/maven/cli/MavenCli.java | 19 +++++++++++
.../org/apache/maven/metrics/MetricsProvider.java | 33 ++++++-------------
.../org/apache/maven/metrics/MetricsSystem.java | 2 ++
.../maven/metrics/impl/NullMetricsProvider.java | 28 ----------------
7 files changed, 52 insertions(+), 93 deletions(-)
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index 6a847c8..7f052c1 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -31,10 +31,6 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.execution.DefaultMavenExecutionResult;
import org.apache.maven.execution.ExecutionEvent;
@@ -46,7 +42,6 @@ import org.apache.maven.graph.GraphBuilder;
import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory;
import org.apache.maven.lifecycle.internal.ExecutionEventCatapult;
import org.apache.maven.lifecycle.internal.LifecycleStarter;
-import org.apache.maven.metrics.MetricsSystem;
import org.apache.maven.model.Prerequisites;
import org.apache.maven.model.building.ModelProblem;
import org.apache.maven.model.building.Result;
@@ -56,6 +51,8 @@ import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.repository.LocalRepositoryNotAccessibleException;
import org.apache.maven.session.scope.internal.SessionScope;
import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.aether.DefaultRepositorySystemSession;
@@ -66,42 +63,37 @@ import org.eclipse.aether.util.repository.ChainedWorkspaceReader;
/**
* @author Jason van Zyl
*/
-@Named
-@Singleton
+@Component( role = Maven.class )
public class DefaultMaven
implements Maven
{
- @Inject
+ @Requirement
private Logger logger;
- @Inject
+ @Requirement
protected ProjectBuilder projectBuilder;
- @Inject
+ @Requirement
private LifecycleStarter lifecycleStarter;
- @Inject
+ @Requirement
protected PlexusContainer container;
- @Inject
+ @Requirement
private ExecutionEventCatapult eventCatapult;
- @Inject
+ @Requirement
private LegacySupport legacySupport;
- @Inject
+ @Requirement
private SessionScope sessionScope;
- @Inject
+ @Requirement
private DefaultRepositorySystemSessionFactory repositorySessionFactory;
- @Inject
- @Named( GraphBuilder.HINT )
+ @Requirement( hint = GraphBuilder.HINT )
private GraphBuilder graphBuilder;
-
- @Requirement
- private MetricsSystem metricsSystem;
@Override
public MavenExecutionResult execute( MavenExecutionRequest request )
@@ -132,11 +124,6 @@ public class DefaultMaven
finally
{
legacySupport.setSession( null );
-
- logger.info("Dumping metrics provider info ("+metricsSystem.getMetricsProvider()+"): ");
- metricsSystem.getMetricsProvider().dump((k,v) -> {
- logger.info(k+": "+v);
- });
}
return result;
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
index c0c1278..7d04361 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
@@ -72,8 +72,9 @@ public class LifecycleStarter
@Inject
private SessionScope sessionScope;
-
- @Requirement
+
+ @Inject
+ @Named( MetricsSystem.HINT )
private MetricsSystem metricsSystem;
public void execute( MavenSession session )
@@ -134,7 +135,7 @@ public class LifecycleStarter
}
long startBuild = System.currentTimeMillis();
builder.build( session, reactorContext, projectBuilds, taskSegments, reactorBuildStatus );
- metricsSystem.getMetricsContext().getSummary("buildTime").add(System.currentTimeMillis() - startBuild);
+ metricsSystem.getMetricsContext().getSummary( "buildTime" ).add(System.currentTimeMillis() - startBuild);
}
catch ( Exception e )
{
diff --git a/maven-core/src/main/java/org/apache/maven/metrics/internal/DefaultMetricsSystem.java b/maven-core/src/main/java/org/apache/maven/metrics/internal/DefaultMetricsSystem.java
index 2e45c85..79dd9a4 100644
--- a/maven-core/src/main/java/org/apache/maven/metrics/internal/DefaultMetricsSystem.java
+++ b/maven-core/src/main/java/org/apache/maven/metrics/internal/DefaultMetricsSystem.java
@@ -32,33 +32,26 @@ import org.apache.maven.metrics.impl.NullMetricsProvider;
import org.codehaus.plexus.logging.Logger;
/**
- * Default Implementation of Metrics System Runtime
+ * Default Implementation of Metrics System Runtime.
+ * Implementations are supposed to be configured as Maven Extensions.
* @author Enrico Olivelli
*/
@Singleton
-@Named
+@Named( MetricsSystem.HINT )
public class DefaultMetricsSystem implements MetricsSystem {
-
- private final Logger log;
- private final MetricsProvider metricsProvider;
@Inject
- public DefaultMetricsSystem(Logger log, ClassRealmManager classRealmManager) throws Exception {
- this.log = log;
- String metricsProviderClass = System.getProperty("maven.metrics.provider", NullMetricsProvider.class.getName());
- log.info("Starting DefaultMetricsSystem maven.metrics.provider="+metricsProviderClass);
- metricsProvider = (MetricsProvider) Class.forName(metricsProviderClass, true, classRealmManager.getCoreRealm()).getConstructor().newInstance();
- log.info("Metrics provider: "+metricsProvider);
+ public DefaultMetricsSystem() {
}
@Override
public MetricsContext getMetricsContext() {
- return metricsProvider.getRootContext();
+ return NullMetricsProvider.INSTANCE.getRootContext();
}
@Override
public MetricsProvider getMetricsProvider() {
- return metricsProvider;
+ return NullMetricsProvider.INSTANCE;
}
}
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index cbdf47f..58abe73 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -116,6 +116,9 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static org.apache.maven.cli.ResolveFile.resolveFile;
+import org.apache.maven.metrics.MetricsProviderLifeCycleException;
+import org.apache.maven.metrics.MetricsSystem;
+import org.apache.maven.metrics.internal.DefaultMetricsSystem;
import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
// TODO push all common bits back to plexus cli and prepare for transition to Guice. We don't need 50 ways to make CLIs
@@ -155,6 +158,8 @@ public class MavenCli
private Logger slf4jLogger;
private EventSpyDispatcher eventSpyDispatcher;
+
+ private MetricsSystem metricsSystem;
private ModelProcessor modelProcessor;
@@ -679,6 +684,10 @@ public class MavenCli
container.getLoggerManager().setThresholds( cliRequest.request.getLoggingLevel() );
+ metricsSystem = container.lookup(MetricsSystem.class);
+ System.out.println("metricsSystem: "+metricsSystem);
+ System.out.println("LIST: "+container.lookupList(MetricsSystem.class));
+
eventSpyDispatcher = container.lookup( EventSpyDispatcher.class );
DefaultEventSpyContext eventSpyContext = new DefaultEventSpyContext();
@@ -970,6 +979,14 @@ public class MavenCli
private int execute( CliRequest cliRequest )
throws MavenExecutionRequestPopulationException
{
+ slf4jLogger.info("MetricsSystem: " + metricsSystem);
+ try {
+ metricsSystem.getMetricsProvider().start();
+ } catch (MetricsProviderLifeCycleException error) {
+ slf4jLogger.error( "Cannot start MetricsProvider, falling back to default", error);
+ metricsSystem = new DefaultMetricsSystem();
+ }
+
MavenExecutionRequest request = executionRequestPopulator.populateDefaults( cliRequest.request );
eventSpyDispatcher.onEvent( request );
@@ -979,6 +996,8 @@ public class MavenCli
eventSpyDispatcher.onEvent( result );
eventSpyDispatcher.close();
+
+ metricsSystem.getMetricsProvider().stop();
if ( result.hasExceptions() )
{
diff --git a/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsProvider.java b/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsProvider.java
index 66d197c..2f4bcb6 100644
--- a/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsProvider.java
+++ b/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsProvider.java
@@ -19,9 +19,6 @@ package org.apache.maven.metrics;
* under the License.
*/
-import java.util.Properties;
-import java.util.function.BiConsumer;
-
/**
* A MetricsProvider is a system which collects Metrics and publishes current values to external facilities.
*
@@ -34,23 +31,14 @@ import java.util.function.BiConsumer;
*/
public interface MetricsProvider
{
-
- /**
- * Configure the provider.
- *
- * @param configuration the configuration.
- *
- * @throws MetricsProviderLifeCycleException in case of invalid configuration.
- */
- void configure( Properties configuration ) throws MetricsProviderLifeCycleException;
-
/**
* Start the provider.
* For instance such method will start a network endpoint.
*
* @throws MetricsProviderLifeCycleException in case of failure
*/
- void start() throws MetricsProviderLifeCycleException;
+ default void start() throws MetricsProviderLifeCycleException {
+ }
/**
* Provides access to the root context.
@@ -61,23 +49,20 @@ public interface MetricsProvider
/**
* Releases resources held by the provider.<br>
- * This method must not throw exceptions.<br>
+ * This method must not throw exceptions.
+ * The provider may dump the results to the logs or send
+ * the results to an external <br>
* This method can be called more than once.
*/
- void stop();
-
- /**
- * Dumps all metrics as a key-value pair.
- * This method will be used in legacy monitor command.
- * @param sink the receiver of all of the current values.
- */
- void dump( BiConsumer<String, Object> sink );
+ default void stop() {
+ }
/**
* Reset all values.
* This method is optional and can be noop, depending
* on the underlying implementation.
*/
- void resetAllValues();
+ default void resetAllValues() {
+ }
}
diff --git a/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsSystem.java b/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsSystem.java
index d24a580..8874354 100644
--- a/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsSystem.java
+++ b/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsSystem.java
@@ -26,6 +26,8 @@ package org.apache.maven.metrics;
public interface MetricsSystem
{
+ static final String HINT = "metricsSystem";
+
/**
* Access current metrics context.
* @return the metrics context
diff --git a/maven-metrics/src/main/java/org/apache/maven/metrics/impl/NullMetricsProvider.java b/maven-metrics/src/main/java/org/apache/maven/metrics/impl/NullMetricsProvider.java
index f7ed453..12aeb87 100644
--- a/maven-metrics/src/main/java/org/apache/maven/metrics/impl/NullMetricsProvider.java
+++ b/maven-metrics/src/main/java/org/apache/maven/metrics/impl/NullMetricsProvider.java
@@ -19,13 +19,10 @@ package org.apache.maven.metrics.impl;
* under the License.
*/
-import java.util.Properties;
-import java.util.function.BiConsumer;
import org.apache.maven.metrics.Counter;
import org.apache.maven.metrics.Gauge;
import org.apache.maven.metrics.MetricsContext;
import org.apache.maven.metrics.MetricsProvider;
-import org.apache.maven.metrics.MetricsProviderLifeCycleException;
import org.apache.maven.metrics.Summary;
import org.apache.maven.metrics.SummarySet;
@@ -41,36 +38,11 @@ public class NullMetricsProvider implements MetricsProvider
public static final MetricsProvider INSTANCE = new NullMetricsProvider();
@Override
- public void configure( Properties configuration ) throws MetricsProviderLifeCycleException
- {
- }
-
- @Override
- public void start() throws MetricsProviderLifeCycleException
- {
- }
-
- @Override
public MetricsContext getRootContext()
{
return NullMetricsContext.INSTANCE;
}
- @Override
- public void dump( BiConsumer<String, Object> sink )
- {
- }
-
- @Override
- public void resetAllValues()
- {
- }
-
- @Override
- public void stop()
- {
- }
-
/**
* Default no-op implementation.
*/