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>