]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1301] add back summary statistics for per-type counts
authorBrett Porter <brett@apache.org>
Wed, 16 Dec 2009 03:47:02 +0000 (03:47 +0000)
committerBrett Porter <brett@apache.org>
Wed, 16 Dec 2009 03:47:02 +0000 (03:47 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@891113 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/statisticsReport.jsp
archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.java
archiva-modules/plugins/repository-statistics/pom.xml
archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatistics.java
archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java

index ccc067f2e281cce482b33e0d57cfb87285e0d467..c01f02fda828ddfd03cbe0ce7fd148a19419f456 100644 (file)
@@ -298,8 +298,8 @@ public class GenerateReportAction
             }
 
             input = new StringBuffer(
-                "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count," +
-                    "Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" );
+                "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes," +
+                    "Jars,Wars\n" );
 
             // multiple repos
             for ( String repo : selectedRepositories )
@@ -322,14 +322,11 @@ public class GenerateReportAction
                 input.append( repositoryStats.getTotalArtifactFileSize() ).append( "," );
                 input.append( repositoryStats.getTotalArtifactCount() ).append( "," );
                 input.append( repositoryStats.getTotalGroupCount() ).append( "," );
-                input.append( repositoryStats.getTotalProjectCount() );//.append( "," );
-                // TODO
-//                input.append( repositoryStats.getPluginCount() ).append( "," );
-//                input.append( repositoryStats.getArchetypeCount() ).append( "," );
-//                input.append( repositoryStats.getJarCount() ).append( "," );
-//                input.append( repositoryStats.getWarCount() ).append( "," );
-//                input.append( repositoryStats.getDeploymentCount() ).append( "," );
-//                input.append( repositoryStats.getDownloadCount() ).append( "\n" );
+                input.append( repositoryStats.getTotalProjectCount() ).append( "," );
+                input.append( repositoryStats.getTotalCountForType( "maven-plugin" ) ).append( "," );
+                input.append( repositoryStats.getTotalCountForType( "maven-archetype" ) ).append( "," );
+                input.append( repositoryStats.getTotalCountForType( "jar" ) ).append( "," );
+                input.append( repositoryStats.getTotalCountForType( "war" ) );
                 input.append( "\n" );
             }
         }
@@ -356,8 +353,8 @@ public class GenerateReportAction
                 }
 
                 input = new StringBuffer(
-                    "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count," +
-                        "Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" );
+                    "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins," +
+                        "Archetypes,Jars,Wars\n" );
 
                 for ( RepositoryStatistics repositoryStats : stats )
                 {
@@ -366,14 +363,11 @@ public class GenerateReportAction
                     input.append( repositoryStats.getTotalArtifactFileSize() ).append( "," );
                     input.append( repositoryStats.getTotalArtifactCount() ).append( "," );
                     input.append( repositoryStats.getTotalGroupCount() ).append( "," );
-                    input.append( repositoryStats.getTotalProjectCount() );//.append( "," );
-                    // TODO
-//                input.append( repositoryStats.getPluginCount() ).append( "," );
-//                input.append( repositoryStats.getArchetypeCount() ).append( "," );
-//                input.append( repositoryStats.getJarCount() ).append( "," );
-//                input.append( repositoryStats.getWarCount() ).append( "," );
-//                input.append( repositoryStats.getDeploymentCount() ).append( "," );
-//                input.append( repositoryStats.getDownloadCount() );
+                    input.append( repositoryStats.getTotalProjectCount() ).append( "," );
+                    input.append( repositoryStats.getTotalCountForType( "maven-plugin" ) ).append( "," );
+                    input.append( repositoryStats.getTotalCountForType( "maven-archetype" ) ).append( "," );
+                    input.append( repositoryStats.getTotalCountForType( "jar" ) ).append( "," );
+                    input.append( repositoryStats.getTotalCountForType( "war" ) );
                     input.append( "\n" );
                 }
 
index 71405670be07c043c5baff22c687d5614f61f0fc..990b5833eae64c14b5ccc53dfc374bc9c7e8c3a3 100644 (file)
           <th>Artifact Count</th>
           <th>Group Count</th>
           <th>Project Count</th>
-          <%-- TODO
           <th>Plugins</th>
           <th>Archetypes</th>
           <th>Jars</th>
           <th>Wars</th>
-          <th>Deployments</th>
-          <th>Downloads</th>
-          --%>
         </tr>                  
                
         <c:forEach var="stats" items="${repositoryStatistics}" varStatus="i">
           <td align="right">${stats.totalArtifactCount}</td>
           <td align="right">${stats.totalGroupCount}</td>
           <td align="right">${stats.totalProjectCount}</td>
-          <%-- TODO
-          <td align="right">${stats.pluginCount}</td>
-          <td align="right">${stats.archetypeCount}</td>
-          <td align="right">${stats.jarCount}</td>
-          <td align="right">${stats.warCount}</td>
-          <td align="right">${stats.deploymentCount}</td>
-          <td align="right">${stats.downloadCount}</td>
-          --%>
-        </tr>                          
+          <td align="right">${stats.totalCountForType['maven-plugin']}</td>
+          <td align="right">${stats.totalCountForType['maven-archetype']}</td>
+          <td align="right">${stats.totalCountForType['jar']}</td>
+          <td align="right">${stats.totalCountForType['war']}</td>
+        </tr>
         </c:forEach>
       </table>                 
     </c:when>
           <th>Artifact Count</th>
           <th>Group Count</th>
           <th>Project Count</th>
-          <%-- TODO
           <th>Plugins</th>
           <th>Archetypes</th>
           <th>Jars</th>
           <th>Wars</th>
-          <th>Deployments</th>
-          <th>Downloads</th>
-          --%>
-        </tr>                  
+        </tr>
                        
         <c:forEach var="stats" items="${repositoryStatistics}">
         <tr>
           <td align="right">${stats.totalArtifactCount}</td>
           <td align="right">${stats.totalGroupCount}</td>
           <td align="right">${stats.totalProjectCount}</td>
-          <%-- TODO
-          <td align="right">${stats.pluginCount}</td>
-          <td align="right">${stats.archetypeCount}</td>
-          <td align="right">${stats.jarCount}</td>
-          <td align="right">${stats.warCount}</td>
-          <td align="right">${stats.deploymentCount}</td>
-          <td align="right">${stats.downloadCount}</td>
-          --%>
+          <td align="right">${stats.totalCountForType['maven-plugin']}</td>
+          <td align="right">${stats.totalCountForType['maven-archetype']}</td>
+          <td align="right">${stats.totalCountForType['jar']}</td>
+          <td align="right">${stats.totalCountForType['war']}</td>
         </tr>
         </c:forEach>
       </table>
index 62b4a3ed0ad9f83f19e4beb5e060855b4c5f7acc..be7a07c4ae9bf2d573e7608c1e2a26cee2ea5460 100644 (file)
@@ -262,12 +262,9 @@ public class GenerateReportActionTest
         assertFalse( action.hasActionErrors() );
         assertFalse( action.hasFieldErrors() );
 
-//        assertEquals(
-//            "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" +
-//                date + ",0,0,0,0,0,1,0,1,1,0,0\n", IOUtils.toString( action.getInputStream() ) );
         assertEquals(
-            "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" +
-                date + ",0,0,0,0,0\n", IOUtils.toString( action.getInputStream() ) );
+            "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars\n" +
+                date + ",0,0,0,0,0,0,0,0,0\n", IOUtils.toString( action.getInputStream() ) );
         repositoryStatisticsManagerControl.verify();
     }
 
@@ -581,12 +578,10 @@ public class GenerateReportActionTest
     private void assertMultiRepoCsvResult()
         throws IOException
     {
-//        assertEquals(
-//            "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" +
-//                "snapshots,0,0,0,0,0,1,0,1,1,0,0\n" + "internal,0,0,0,0,0,1,0,1,1,0,0\n",
         assertEquals(
-            "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" +
-                "snapshots,0,0,0,0,0\n" + "internal,0,0,0,0,0\n", IOUtils.toString( action.getInputStream() ) );
+            "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars\n" +
+                "snapshots,0,0,0,0,0,0,0,0,0\n" + "internal,0,0,0,0,0,0,0,0,0\n",
+            IOUtils.toString( action.getInputStream() ) );
     }
 
     private RepositoryProblemFacet createProblem( String groupId, String artifactId, String repoId )
index e294ac20e9a53762b811e7c1e286e1aaa57d8b14..83a2df5d714605b85cc0263f20ba5c30e59eae20 100644 (file)
@@ -51,5 +51,9 @@
       <artifactId>jcl-over-slf4j</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-repository-layer</artifactId>
+    </dependency>
   </dependencies>
 </project>
index 506f593d934603c8c2daafcba5a60102366f344b..80d50359e4e2ddfa242a97b3bd488934a0ac160c 100644 (file)
@@ -28,6 +28,10 @@ import java.util.List;
 
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.maven.archiva.repository.ManagedRepositoryContent;
+import org.apache.maven.archiva.repository.RepositoryContentFactory;
+import org.apache.maven.archiva.repository.RepositoryException;
+import org.apache.maven.archiva.repository.layout.LayoutException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,6 +48,11 @@ public class DefaultRepositoryStatisticsManager
      */
     private MetadataRepository metadataRepository;
 
+    /**
+     * @plexus.requirement
+     */
+    private RepositoryContentFactory repositoryContentFactory;
+
     public RepositoryStatistics getLastStatistics( String repositoryId )
     {
         // TODO: consider a more efficient implementation that directly gets the last one from the content repository
@@ -61,11 +70,12 @@ public class DefaultRepositoryStatisticsManager
         }
     }
 
-    private void walkRepository( RepositoryStatistics stats, String repositoryId, String ns )
+    private void walkRepository( RepositoryStatistics stats, String repositoryId, String ns,
+                                 ManagedRepositoryContent repositoryContent )
     {
         for ( String namespace : metadataRepository.getNamespaces( repositoryId, ns ) )
         {
-            walkRepository( stats, repositoryId, ns + "." + namespace );
+            walkRepository( stats, repositoryId, ns + "." + namespace, repositoryContent );
         }
 
         Collection<String> projects = metadataRepository.getProjects( repositoryId, ns );
@@ -84,7 +94,18 @@ public class DefaultRepositoryStatisticsManager
                         stats.setTotalArtifactCount( stats.getTotalArtifactCount() + 1 );
                         stats.setTotalArtifactFileSize( stats.getTotalArtifactFileSize() + artifact.getSize() );
 
-                        // TODO: add by type
+                        // TODO: need a maven2 metadata repository API equivalent
+                        try
+                        {
+                            String type = repositoryContent.toArtifactReference(
+                                ns.replace( '.', '/' ) + "/" + project + "/" + version + "/" +
+                                    artifact.getId() ).getType();
+                            stats.setTotalCountForType( type, stats.getTotalCountForType( type ) + 1 );
+                        }
+                        catch ( LayoutException e )
+                        {
+                            // ignore
+                        }
                     }
                 }
             }
@@ -92,7 +113,8 @@ public class DefaultRepositoryStatisticsManager
     }
 
 
-    public void addStatisticsAfterScan( String repositoryId, Date startTime, Date endTime, long totalFiles, long newFiles )
+    public void addStatisticsAfterScan( String repositoryId, Date startTime, Date endTime, long totalFiles,
+                                        long newFiles )
     {
         RepositoryStatistics repositoryStatistics = new RepositoryStatistics();
         repositoryStatistics.setScanStartTime( startTime );
@@ -112,7 +134,16 @@ public class DefaultRepositoryStatisticsManager
         //       it on the fly
         for ( String ns : metadataRepository.getRootNamespaces( repositoryId ) )
         {
-            walkRepository( repositoryStatistics, repositoryId, ns );
+            ManagedRepositoryContent content;
+            try
+            {
+                content = repositoryContentFactory.getManagedRepositoryContent( repositoryId );
+            }
+            catch ( RepositoryException e )
+            {
+                throw new RuntimeException( e );
+            }
+            walkRepository( repositoryStatistics, repositoryId, ns, content );
         }
         log.info( "Repository walk for statistics executed in " + ( System.currentTimeMillis() - startWalk ) + "ms" );
 
@@ -157,4 +188,9 @@ public class DefaultRepositoryStatisticsManager
     {
         this.metadataRepository = metadataRepository;
     }
+
+    public void setRepositoryContentFactory( RepositoryContentFactory repositoryContentFactory )
+    {
+        this.repositoryContentFactory = repositoryContentFactory;
+    }
 }
index 6b8020054ed038d475eadd2274bccfa414c9f2c2..735818ce5bcfea215df162ed953a456898acef17 100644 (file)
@@ -50,6 +50,8 @@ public class RepositoryStatistics
 
     static final DateFormat SCAN_TIMESTAMP = new SimpleDateFormat( "yyyyMMdd.HHmmss.SSS" );
 
+    private Map<String, Long> totalCountForType = new HashMap<String, Long>();
+
     public Date getScanEndTime()
     {
         return scanEndTime;
@@ -156,6 +158,10 @@ public class RepositoryStatistics
         properties.put( "totalGroupCount", String.valueOf( totalGroupCount ) );
         properties.put( "totalProjectCount", String.valueOf( totalProjectCount ) );
         properties.put( "newFileCount", String.valueOf( newFileCount ) );
+        for ( Map.Entry<String, Long> entry : totalCountForType.entrySet() )
+        {
+            properties.put( "count-" + entry.getKey(), String.valueOf( entry.getValue() ) );
+        }
         return properties;
     }
 
@@ -169,15 +175,14 @@ public class RepositoryStatistics
         totalGroupCount = Long.valueOf( properties.get( "totalGroupCount" ) );
         totalProjectCount = Long.valueOf( properties.get( "totalProjectCount" ) );
         newFileCount = Long.valueOf( properties.get( "newFileCount" ) );
-    }
-
-    @Override
-    public String toString()
-    {
-        return "RepositoryStatistics{" + "scanEndTime=" + scanEndTime + ", scanStartTime=" + scanStartTime +
-            ", totalArtifactCount=" + totalArtifactCount + ", totalArtifactFileSize=" + totalArtifactFileSize +
-            ", totalFileCount=" + totalFileCount + ", totalGroupCount=" + totalGroupCount + ", totalProjectCount=" +
-            totalProjectCount + ", newFileCount=" + newFileCount + '}';
+        totalCountForType.clear();
+        for ( Map.Entry<String, String> entry : properties.entrySet() )
+        {
+            if ( entry.getKey().startsWith( "count-" ) )
+            {
+                totalCountForType.put( entry.getKey().substring( 6 ), Long.valueOf( entry.getValue() ) );
+            }
+        }
     }
 
     @Override
@@ -226,6 +231,10 @@ public class RepositoryStatistics
         {
             return false;
         }
+        if ( !totalCountForType.equals( that.totalCountForType ) )
+        {
+            return false;
+        }
 
         return true;
     }
@@ -241,6 +250,32 @@ public class RepositoryStatistics
         result = 31 * result + (int) ( totalGroupCount ^ ( totalGroupCount >>> 32 ) );
         result = 31 * result + (int) ( totalProjectCount ^ ( totalProjectCount >>> 32 ) );
         result = 31 * result + (int) ( newFileCount ^ ( newFileCount >>> 32 ) );
+        result = 31 * result + totalCountForType.hashCode();
         return result;
     }
+
+    @Override
+    public String toString()
+    {
+        return "RepositoryStatistics{" + "scanEndTime=" + scanEndTime + ", scanStartTime=" + scanStartTime +
+            ", totalArtifactCount=" + totalArtifactCount + ", totalArtifactFileSize=" + totalArtifactFileSize +
+            ", totalFileCount=" + totalFileCount + ", totalGroupCount=" + totalGroupCount + ", totalProjectCount=" +
+            totalProjectCount + ", newFileCount=" + newFileCount + ", totalCountForType=" + totalCountForType + '}';
+    }
+
+    public Map<String, Long> getTotalCountForType()
+    {
+        return totalCountForType;
+    }
+
+    public long getTotalCountForType( String type )
+    {
+        Long value = totalCountForType.get( type );
+        return value != null ? value : 0;
+    }
+
+    public void setTotalCountForType( String type, long count )
+    {
+        totalCountForType.put( type, count );
+    }
 }
index 289a338208b555bc65d48727924403bb2d4ecb66..bb050b503dd1c1ffae35c0c9086a5141fe0a1d46 100644 (file)
@@ -31,7 +31,11 @@ import java.util.Map;
 import junit.framework.TestCase;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.maven.archiva.repository.RepositoryContentFactory;
+import org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryContent;
 import org.easymock.MockControl;
+import org.easymock.classextension.MockClassControl;
 
 public class RepositoryStatisticsManagerTest
     extends TestCase
@@ -61,6 +65,18 @@ public class RepositoryStatisticsManagerTest
         metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
         metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
         repositoryStatisticsManager.setMetadataRepository( metadataRepository );
+
+        ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration();
+        repository.setId( TEST_REPO_ID );
+        repository.setLocation( "" );
+        ManagedDefaultRepositoryContent content = new ManagedDefaultRepositoryContent();
+        content.setRepository( repository );
+        MockControl control = MockClassControl.createControl( RepositoryContentFactory.class );
+        RepositoryContentFactory contentFactory = (RepositoryContentFactory) control.getMock();
+        contentFactory.getManagedRepositoryContent( TEST_REPO_ID );
+        control.setDefaultReturnValue( content );
+        control.replay();
+        repositoryStatisticsManager.setRepositoryContentFactory( contentFactory );
     }
 
     public void testGetLatestStats()