summaryrefslogtreecommitdiffstats
path: root/archiva-modules/archiva-web
diff options
context:
space:
mode:
authorBrett Porter <brett@apache.org>2009-12-07 22:32:10 +0000
committerBrett Porter <brett@apache.org>2009-12-07 22:32:10 +0000
commit7c7fffc71c4c2546c8e5aacb933bea9fd1c8ffa7 (patch)
tree2ea76540d2481df4db7e42d1f3f19cb076d1213b /archiva-modules/archiva-web
parent8afc66c9d202f12d1cfef8d80db88f3963928e3b (diff)
downloadarchiva-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')
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/pom.xml4
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java46
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp2
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java17
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java29
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.xml52
-rw-r--r--archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java121
-rw-r--r--archiva-modules/archiva-web/archiva-webdav/src/test/resources/META-INF/plexus/components.xml5
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