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:00 UTC
[maven-studies] 16/23: Add MetricsSystem components
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 06a6a8971273f89d3dfe7032f34d5f7d48a28e6c
Author: Enrico Olivelli <eo...@apache.org>
AuthorDate: Sat Mar 28 15:52:25 2020 +0100
Add MetricsSystem components
---
maven-core/pom.xml | 4 ++
.../main/java/org/apache/maven/DefaultMaven.java | 9 +++
.../maven/lifecycle/internal/LifecycleStarter.java | 7 ++-
.../metrics/internal/DefaultMetricsSystem.java | 64 ++++++++++++++++++++++
.../org/apache/maven/metrics/MetricsSystem.java | 40 ++++++++++++++
pom.xml | 6 ++
6 files changed, 129 insertions(+), 1 deletion(-)
diff --git a/maven-core/pom.xml b/maven-core/pom.xml
index 43a6bee..6fba007 100644
--- a/maven-core/pom.xml
+++ b/maven-core/pom.xml
@@ -39,6 +39,10 @@ under the License.
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-metrics</artifactId>
+ </dependency>
<!-- Remove the following two deps to see how to remove Settings from the core -->
<dependency>
<groupId>org.apache.maven</groupId>
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 fc26290..6a847c8 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -46,6 +46,7 @@ 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;
@@ -98,6 +99,9 @@ public class DefaultMaven
@Inject
@Named( GraphBuilder.HINT )
private GraphBuilder graphBuilder;
+
+ @Requirement
+ private MetricsSystem metricsSystem;
@Override
public MavenExecutionResult execute( MavenExecutionRequest request )
@@ -128,6 +132,11 @@ 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 f616654..c0c1278 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
@@ -34,6 +34,7 @@ import org.apache.maven.lifecycle.MissingProjectException;
import org.apache.maven.lifecycle.NoGoalSpecifiedException;
import org.apache.maven.lifecycle.internal.builder.Builder;
import org.apache.maven.lifecycle.internal.builder.BuilderNotFoundException;
+import org.apache.maven.metrics.MetricsSystem;
import org.apache.maven.session.scope.internal.SessionScope;
import org.codehaus.plexus.logging.Logger;
@@ -71,6 +72,9 @@ public class LifecycleStarter
@Inject
private SessionScope sessionScope;
+
+ @Requirement
+ private MetricsSystem metricsSystem;
public void execute( MavenSession session )
{
@@ -128,8 +132,9 @@ public class LifecycleStarter
logger.info( String.format( "Using the %s implementation with a thread count of %d",
builder.getClass().getSimpleName(), degreeOfConcurrency ) );
}
+ long startBuild = System.currentTimeMillis();
builder.build( session, reactorContext, projectBuilds, taskSegments, reactorBuildStatus );
-
+ metricsSystem.getMetricsContext().getSummary("buildTime").add(System.currentTimeMillis() - startBuild);
}
catch ( Exception e )
{
diff --git a/maven-core/src/test/java/org/apache/maven/metrics/internal/DefaultMetricsSystem.java b/maven-core/src/test/java/org/apache/maven/metrics/internal/DefaultMetricsSystem.java
new file mode 100644
index 0000000..2e45c85
--- /dev/null
+++ b/maven-core/src/test/java/org/apache/maven/metrics/internal/DefaultMetricsSystem.java
@@ -0,0 +1,64 @@
+package org.apache.maven.metrics.internal;
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import org.apache.maven.classrealm.ClassRealmManager;
+import org.apache.maven.metrics.MetricsContext;
+import org.apache.maven.metrics.MetricsProvider;
+import org.apache.maven.metrics.MetricsSystem;
+import org.apache.maven.metrics.impl.NullMetricsProvider;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Default Implementation of Metrics System Runtime
+ * @author Enrico Olivelli
+ */
+@Singleton
+@Named
+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);
+ }
+
+ @Override
+ public MetricsContext getMetricsContext() {
+ return metricsProvider.getRootContext();
+ }
+
+ @Override
+ public MetricsProvider getMetricsProvider() {
+ return metricsProvider;
+ }
+
+}
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
new file mode 100644
index 0000000..d24a580
--- /dev/null
+++ b/maven-metrics/src/main/java/org/apache/maven/metrics/MetricsSystem.java
@@ -0,0 +1,40 @@
+package org.apache.maven.metrics;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Component to access Metrics System
+ * @author Enrico Olivelli
+ */
+public interface MetricsSystem
+{
+
+ /**
+ * Access current metrics context.
+ * @return the metrics context
+ */
+ MetricsContext getMetricsContext();
+
+ /**
+ * Low level Access to the Provider
+ * @return the provider
+ */
+ MetricsProvider getMetricsProvider();
+}
diff --git a/pom.xml b/pom.xml
index dd58b57..2b6f841 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,6 +84,7 @@ under the License.
<module>maven-builder-support</module>
<module>maven-model</module>
<module>maven-model-builder</module>
+ <module>maven-metrics</module>
<module>maven-core</module>
<module>maven-settings</module>
<module>maven-settings-builder</module>
@@ -185,6 +186,11 @@ under the License.
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
+ <artifactId>maven-metrics</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
<artifactId>maven-settings</artifactId>
<version>${project.version}</version>
</dependency>