diff options
author | Brett Porter <brett@apache.org> | 2009-12-07 22:32:10 +0000 |
---|---|---|
committer | Brett Porter <brett@apache.org> | 2009-12-07 22:32:10 +0000 |
commit | 7c7fffc71c4c2546c8e5aacb933bea9fd1c8ffa7 (patch) | |
tree | 2ea76540d2481df4db7e42d1f3f19cb076d1213b /archiva-modules/archiva-web | |
parent | 8afc66c9d202f12d1cfef8d80db88f3963928e3b (diff) | |
download | archiva-7c7fffc71c4c2546c8e5aacb933bea9fd1c8ffa7.tar.gz archiva-7c7fffc71c4c2546c8e5aacb933bea9fd1c8ffa7.zip |
[MRM-1293] introduce repository statistics as a new plugin that operates over the metadata repository. Currently a work in progress - repository size statistics are not stored, and only the scanner and scheduler have been hooked in (meaning reports will be out of date)
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@888164 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-modules/archiva-web')
8 files changed, 182 insertions, 94 deletions
diff --git a/archiva-modules/archiva-web/archiva-webapp/pom.xml b/archiva-modules/archiva-web/archiva-webapp/pom.xml index c839ce3cc..06fd7df9a 100644 --- a/archiva-modules/archiva-web/archiva-webapp/pom.xml +++ b/archiva-modules/archiva-web/archiva-webapp/pom.xml @@ -35,6 +35,10 @@ </dependency> <dependency> <groupId>org.apache.archiva</groupId> + <artifactId>repository-statistics</artifactId> + </dependency> + <dependency> + <groupId>org.apache.archiva</groupId> <artifactId>archiva-scheduler-repository</artifactId> </dependency> <dependency> diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java index c36cc1ab8..0aa427452 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java @@ -19,31 +19,30 @@ package org.apache.maven.archiva.web.action.admin.repositories; * under the License. */ -import org.apache.struts2.interceptor.ServletRequestAware; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; + import com.opensymphony.xwork2.Preparable; +import org.apache.archiva.metadata.repository.stats.RepositoryStatistics; +import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; import org.apache.maven.archiva.configuration.ArchivaConfiguration; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration; import org.apache.maven.archiva.configuration.functors.RepositoryConfigurationComparator; -import org.apache.maven.archiva.database.ArchivaDAO; -import org.apache.maven.archiva.database.constraints.MostRecentRepositoryScanStatistics; -import org.apache.maven.archiva.model.RepositoryContentStatistics; import org.apache.maven.archiva.security.ArchivaRoleConstants; -import org.apache.maven.archiva.web.util.ContextUtils; import org.apache.maven.archiva.web.action.PlexusActionSupport; +import org.apache.maven.archiva.web.util.ContextUtils; +import org.apache.struts2.interceptor.ServletRequestAware; import org.codehaus.plexus.redback.rbac.Resource; import org.codehaus.redback.integration.interceptor.SecureAction; import org.codehaus.redback.integration.interceptor.SecureActionBundle; import org.codehaus.redback.integration.interceptor.SecureActionException; -import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * Shows the Repositories Tab for the administrator. * @@ -63,19 +62,19 @@ public class RepositoriesAction private List<RemoteRepositoryConfiguration> remoteRepositories; - private Map<String, RepositoryContentStatistics> repositoryStatistics; - + private Map<String, RepositoryStatistics> repositoryStatistics; + private Map<String, List<String>> repositoryToGroupMap; /** - * @plexus.requirement role-hint="jdo" + * Used to construct the repository WebDAV URL in the repository action. */ - private ArchivaDAO dao; + private String baseUrl; /** - * Used to construct the repository WebDAV URL in the repository action. + * @plexus.requirement */ - private String baseUrl; + private RepositoryStatisticsManager repositoryStatisticsManager; public void setServletRequest( HttpServletRequest request ) { @@ -106,14 +105,13 @@ public class RepositoriesAction Collections.sort( managedRepositories, new RepositoryConfigurationComparator() ); Collections.sort( remoteRepositories, new RepositoryConfigurationComparator() ); - repositoryStatistics = new HashMap<String, RepositoryContentStatistics>(); + repositoryStatistics = new HashMap<String, RepositoryStatistics>(); for ( ManagedRepositoryConfiguration repo : managedRepositories ) { - List<RepositoryContentStatistics> results = - (List<RepositoryContentStatistics>) dao.query( new MostRecentRepositoryScanStatistics( repo.getId() ) ); - if ( !results.isEmpty() ) + RepositoryStatistics stats = repositoryStatisticsManager.getLastStatistics( repo.getId() ); + if ( stats != null ) { - repositoryStatistics.put( repo.getId(), results.get( 0 ) ); + repositoryStatistics.put( repo.getId(), stats ); } } } @@ -128,7 +126,7 @@ public class RepositoriesAction return remoteRepositories; } - public Map<String, RepositoryContentStatistics> getRepositoryStatistics() + public Map<String, RepositoryStatistics> getRepositoryStatistics() { return repositoryStatistics; } diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp index 22d56a94b..6ba718b5c 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp @@ -225,7 +225,7 @@ <table> <tr> <th>Last Scanned</th> - <td>${stats.whenGathered}</td> + <td>${stats.scanStartTime}</td> </tr> <tr> <th>Duration</th> diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java index b0e78bff6..11cc86144 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java @@ -1,10 +1,8 @@ package org.apache.maven.archiva.web.action.admin.repositories; import java.io.Serializable; -import java.util.ArrayList; import java.util.List; -import junit.framework.Assert; import org.apache.maven.archiva.configuration.ArchivaConfiguration; import org.apache.maven.archiva.database.ArchivaDAO; import org.apache.maven.archiva.database.ArtifactDAO; @@ -14,7 +12,6 @@ import org.apache.maven.archiva.database.SimpleConstraint; import org.apache.maven.archiva.database.constraints.UniqueArtifactIdConstraint; import org.apache.maven.archiva.database.constraints.UniqueGroupIdConstraint; import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint; -import org.apache.maven.archiva.model.RepositoryContentStatistics; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -67,19 +64,7 @@ public class ArchivaDAOStub { return artifacts; } - else - { - Assert.assertEquals( RepositoryContentStatistics.class, constraint.getResultClass() ); - - List<RepositoryContentStatistics> stats = new ArrayList<RepositoryContentStatistics>(); - for ( String repo : configuration.getConfiguration().getManagedRepositoriesAsMap().keySet() ) - { - RepositoryContentStatistics statistics = new RepositoryContentStatistics(); - statistics.setRepositoryId( repo ); - stats.add( statistics ); - } - return stats; - } + throw new UnsupportedOperationException(); } public Object save( Serializable obj ) diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java index 66857a461..40d78bc04 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java @@ -19,12 +19,19 @@ package org.apache.maven.archiva.web.action.admin.repositories; * under the License. */ +import java.util.Arrays; + import com.meterware.servletunit.ServletRunner; import com.meterware.servletunit.ServletUnitClient; import com.opensymphony.xwork2.Action; +import org.apache.archiva.metadata.repository.MetadataRepository; +import org.apache.archiva.metadata.repository.stats.DefaultRepositoryStatisticsManager; +import org.apache.archiva.metadata.repository.stats.RepositoryStatistics; +import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; +import org.codehaus.plexus.spring.PlexusInSpringTestCase; import org.codehaus.redback.integration.interceptor.SecureActionBundle; import org.codehaus.redback.integration.interceptor.SecureActionException; -import org.codehaus.plexus.spring.PlexusInSpringTestCase; +import org.easymock.MockControl; /** * Test the repositories action returns the correct data. @@ -48,6 +55,24 @@ public class RepositoriesActionTest public void testGetRepositories() throws Exception { + MockControl control = MockControl.createControl( MetadataRepository.class ); + MetadataRepository metadataRepository = (MetadataRepository) control.getMock(); + control.expectAndReturn( metadataRepository.getMetadataFacets( "internal", RepositoryStatistics.FACET_ID ), + Arrays.asList( "20091125.123456.678" ) ); + control.expectAndReturn( + metadataRepository.getMetadataFacet( "internal", RepositoryStatistics.FACET_ID, "20091125.123456.678" ), + new RepositoryStatistics() ); + control.expectAndReturn( metadataRepository.getMetadataFacets( "snapshots", RepositoryStatistics.FACET_ID ), + Arrays.asList( "20091112.012345.012" ) ); + control.expectAndReturn( + metadataRepository.getMetadataFacet( "snapshots", RepositoryStatistics.FACET_ID, "20091112.012345.012" ), + new RepositoryStatistics() ); + control.replay(); + + DefaultRepositoryStatisticsManager statsManager = + (DefaultRepositoryStatisticsManager) lookup( RepositoryStatisticsManager.class ); + statsManager.setMetadataRepository( metadataRepository ); + ServletRunner sr = new ServletRunner(); ServletUnitClient sc = sr.newClient(); @@ -66,6 +91,8 @@ public class RepositoriesActionTest assertEquals( 2, action.getManagedRepositories().size() ); assertEquals( 2, action.getRemoteRepositories().size() ); assertEquals( 2, action.getRepositoryStatistics().size() ); + + control.verify(); } public void testSecureActionBundle() diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.xml deleted file mode 100644 index c09e524a2..000000000 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.xml +++ /dev/null @@ -1,52 +0,0 @@ -<!-- - ~ 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. - --> - -<plexus> - <components> - <component> - <role>com.opensymphony.xwork2.Action</role> - <role-hint>repositoriesAction</role-hint> - <implementation>org.apache.maven.archiva.web.action.admin.repositories.RepositoriesAction</implementation> - <instantiation-strategy>per-lookup</instantiation-strategy> - <description>Shows the Repositories Tab for the administrator.</description> - <requirements> - <requirement> - <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role> - <field-name>archivaConfiguration</field-name> - </requirement> - <requirement> - <role>org.apache.maven.archiva.database.ArchivaDAO</role> - <role-hint>stub</role-hint> - <field-name>dao</field-name> - </requirement> - </requirements> - </component> - <component> - <role>org.apache.maven.archiva.database.ArchivaDAO</role> - <role-hint>stub</role-hint> - <implementation>org.apache.maven.archiva.web.action.admin.repositories.ArchivaDAOStub</implementation> - <requirements> - <requirement> - <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role> - <field-name>configuration</field-name> - </requirement> - </requirements> - </component> - </components> -</plexus> diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java new file mode 100644 index 000000000..30ba168df --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java @@ -0,0 +1,121 @@ +package org.apache.archiva.metadata.repository; + +/* + * 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 java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.apache.archiva.metadata.model.ArtifactMetadata; +import org.apache.archiva.metadata.model.MetadataFacet; +import org.apache.archiva.metadata.model.ProjectMetadata; +import org.apache.archiva.metadata.model.ProjectVersionMetadata; +import org.apache.archiva.metadata.model.ProjectVersionReference; + +public class TestMetadataRepository + implements MetadataRepository +{ + public ProjectMetadata getProject( String repoId, String namespace, String projectId ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, + String projectVersion ) + throws MetadataResolverException + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public Collection<String> getArtifactVersions( String repoId, String namespace, String projectId, + String projectVersion ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public Collection<ProjectVersionReference> getProjectReferences( String repoId, String namespace, String projectId, + String projectVersion ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public Collection<String> getRootNamespaces( String repoId ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public Collection<String> getNamespaces( String repoId, String namespace ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public Collection<String> getProjects( String repoId, String namespace ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public Collection<String> getProjectVersions( String repoId, String namespace, String projectId ) + throws MetadataResolverException + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void updateProject( String repoId, ProjectMetadata project ) + { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void updateArtifact( String repoId, String namespace, String projectId, String projectVersion, + ArtifactMetadata artifactMeta ) + { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void updateProjectVersion( String repoId, String namespace, String projectId, ProjectVersionMetadata versionMetadata ) + { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void updateProjectReference( String repoId, String namespace, String projectId, String projectVersion, + ProjectVersionReference reference ) + { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void updateNamespace( String repoId, String namespace ) + { + //To change body of implemented methods use File | Settings | File Templates. + } + + public List<String> getMetadataFacets( String repodId, String facetId ) + { + return Collections.emptyList(); + } + + public MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void addMetadataFacet( String repositoryId, String facetId, String name, MetadataFacet metadataFacet ) + { + //To change body of implemented methods use File | Settings | File Templates. + } +} diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/META-INF/plexus/components.xml b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/META-INF/plexus/components.xml index 921c1cca1..4601bf1e4 100644 --- a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/META-INF/plexus/components.xml +++ b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/META-INF/plexus/components.xml @@ -29,5 +29,10 @@ <resource>archiva-mime-types.txt</resource> </configuration> </component> + + <component> + <role>org.apache.archiva.metadata.repository.MetadataRepository</role> + <implementation>org.apache.archiva.metadata.repository.TestMetadataRepository</implementation> + </component> </components> </component-set>
\ No newline at end of file |