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/03/28 14:52:39 UTC
[maven-studies] branch maven-metrics updated: 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
The following commit(s) were added to refs/heads/maven-metrics by this push:
new fa326e0 Add MetricsSystem components
fa326e0 is described below
commit fa326e08ce7d0088d4440911f4497b5e7161e67a
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 7a723a2..e9899b2 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 7f052c1..03bb341 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -42,6 +42,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;
@@ -94,6 +95,9 @@ public class DefaultMaven
@Requirement( hint = GraphBuilder.HINT )
private GraphBuilder graphBuilder;
+
+ @Requirement
+ private MetricsSystem metricsSystem;
@Override
public MavenExecutionResult execute( MavenExecutionRequest request )
@@ -124,6 +128,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 cee8073..b0220f4 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
@@ -30,6 +30,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.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
@@ -68,6 +69,9 @@ public class LifecycleStarter
@Requirement
private SessionScope sessionScope;
+
+ @Requirement
+ private MetricsSystem metricsSystem;
public void execute( MavenSession session )
{
@@ -125,8 +129,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 ef2764d..0ccb76c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,6 +85,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>
@@ -181,6 +182,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>