From 90e0bea02503b1437e1e645e03add9683d4d78d7 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Mon, 12 Mar 2012 13:03:38 +0000 Subject: [PATCH] [MRM-1580] system status page display queues. git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1299659 13f79535-47bb-0310-9956-ffa450edef68 --- .../api/model/AdminRepositoryConsumer.java | 2 + .../model/ArchivaRepositoryStatistics.java | 2 + .../archiva/rest/api/model/BrowseResult.java | 2 + .../rest/api/model/BrowseResultEntry.java | 3 +- .../rest/api/model/PolicyInformation.java | 2 + .../archiva/rest/api/model/SearchRequest.java | 2 + .../archiva/rest/api/model/StringList.java | 2 + .../archiva/rest/api/model/VersionsList.java | 2 + .../api/services/SystemStatusService.java | 9 ++++ .../services/DefaultSystemStatusService.java | 43 +++++++++++++++++++ .../apache/archiva/i18n/default.properties | 2 + .../main/webapp/js/archiva/general-admin.js | 30 +++++++++++-- .../js/archiva/templates/general-admin.html | 19 ++++++++ 13 files changed, 116 insertions(+), 4 deletions(-) diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/AdminRepositoryConsumer.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/AdminRepositoryConsumer.java index 539980a56..2d34caf48 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/AdminRepositoryConsumer.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/AdminRepositoryConsumer.java @@ -20,6 +20,7 @@ package org.apache.archiva.rest.api.model; */ import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; /** * AdminRepositoryConsumer @@ -28,6 +29,7 @@ import javax.xml.bind.annotation.XmlRootElement; */ @XmlRootElement( name = "adminRepositoryConsumer" ) public class AdminRepositoryConsumer + implements Serializable { private boolean enabled = false; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/ArchivaRepositoryStatistics.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/ArchivaRepositoryStatistics.java index 92c2fb00d..0de6c7bc7 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/ArchivaRepositoryStatistics.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/ArchivaRepositoryStatistics.java @@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.model; */ import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.Date; /** @@ -27,6 +28,7 @@ import java.util.Date; */ @XmlRootElement( name = "archivaRepositoryStatistics" ) public class ArchivaRepositoryStatistics + implements Serializable { private Date scanEndTime; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java index 8278ac1db..6b134fd45 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java @@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.model; */ import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.Collections; import java.util.List; @@ -28,6 +29,7 @@ import java.util.List; */ @XmlRootElement( name = "browseResult" ) public class BrowseResult + implements Serializable { private List browseResultEntries; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResultEntry.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResultEntry.java index be7eae2b6..718d37d6e 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResultEntry.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResultEntry.java @@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.model; */ import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; /** * @author Olivier Lamy @@ -26,7 +27,7 @@ import javax.xml.bind.annotation.XmlRootElement; */ @XmlRootElement( name = "browseResultEntry" ) public class BrowseResultEntry - implements Comparable + implements Comparable, Serializable { private String name; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/PolicyInformation.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/PolicyInformation.java index 1702a53a9..9880885b6 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/PolicyInformation.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/PolicyInformation.java @@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.model; */ import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.List; /** @@ -27,6 +28,7 @@ import java.util.List; */ @XmlRootElement( name = "policyInformation" ) public class PolicyInformation + implements Serializable { private List options; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/SearchRequest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/SearchRequest.java index b391650e2..898ad6c2e 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/SearchRequest.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/SearchRequest.java @@ -1,6 +1,7 @@ package org.apache.archiva.rest.api.model; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -24,6 +25,7 @@ import java.util.List; */ @XmlRootElement( name = "searchRequest" ) public class SearchRequest + implements Serializable { /** diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/StringList.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/StringList.java index 7381141ea..0d4aa0fcb 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/StringList.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/StringList.java @@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.model; */ import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -30,6 +31,7 @@ import java.util.List; */ @XmlRootElement( name = "stringList" ) public class StringList + implements Serializable { private List strings; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/VersionsList.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/VersionsList.java index e6729aa9f..683eb4c7d 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/VersionsList.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/VersionsList.java @@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.model; */ import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; import java.util.List; /** @@ -26,6 +27,7 @@ import java.util.List; */ @XmlRootElement( name = "versionsList" ) public class VersionsList + implements Serializable { private List versions; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/SystemStatusService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/SystemStatusService.java index 45e790f5f..370e01e43 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/SystemStatusService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/SystemStatusService.java @@ -18,6 +18,7 @@ package org.apache.archiva.rest.api.services; * under the License. */ +import org.apache.archiva.rest.api.model.QueueEntry; import org.apache.archiva.security.common.ArchivaRoleConstants; import org.codehaus.plexus.redback.authorization.RedbackAuthorization; @@ -26,6 +27,7 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import java.util.List; /** * @author Olivier Lamy @@ -48,4 +50,11 @@ public interface SystemStatusService String getCurrentServerTime( @PathParam( "locale" ) String locale ) throws ArchivaRestServiceException; + @Path( "queueEntries" ) + @GET + @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) + @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) + List getQueueEntries() + throws ArchivaRestServiceException; + } diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java index e07f77a40..de0776519 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java @@ -18,13 +18,22 @@ package org.apache.archiva.rest.services; * under the License. */ +import org.apache.archiva.rest.api.model.QueueEntry; import org.apache.archiva.rest.api.services.ArchivaRestServiceException; import org.apache.archiva.rest.api.services.SystemStatusService; +import org.codehaus.plexus.taskqueue.TaskQueue; +import org.codehaus.plexus.taskqueue.TaskQueueException; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; +import javax.inject.Inject; +import javax.ws.rs.core.Response; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.Locale; +import java.util.Map; /** * @author Olivier Lamy @@ -32,8 +41,21 @@ import java.util.Locale; */ @Service( "systemStatusService#rest" ) public class DefaultSystemStatusService + extends AbstractRestService implements SystemStatusService { + + private ApplicationContext applicationContext; + + Map queues = null; + + @Inject + public DefaultSystemStatusService( ApplicationContext applicationContext ) + { + this.applicationContext = applicationContext; + queues = getBeansOfType( applicationContext, TaskQueue.class ); + } + public String getMemoryStatus() throws ArchivaRestServiceException { @@ -56,4 +78,25 @@ public class DefaultSystemStatusService SimpleDateFormat sdf = new SimpleDateFormat( "EEE, d MMM yyyy HH:mm:ss Z", new Locale( locale ) ); return sdf.format( new Date() ); } + + public List getQueueEntries() + throws ArchivaRestServiceException + { + try + { + List queueEntries = new ArrayList( queues.size() ); + for ( Map.Entry entry : queues.entrySet() ) + { + queueEntries.add( new QueueEntry( entry.getKey(), entry.getValue().getQueueSnapshot().size() ) ); + } + + return queueEntries; + } + catch ( TaskQueueException e ) + { + log.error( e.getMessage(), e ); + throw new ArchivaRestServiceException( e.getMessage(), + Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() ); + } + } } diff --git a/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties b/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties index 15cd72c6e..ff30c3214 100644 --- a/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties +++ b/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties @@ -295,6 +295,8 @@ system-status.header.version.info=Version Information system-status.header.version.timestampStr=Build Timestamp system-status.header.scanning=Repository Scans Currently in Progress system-status.header.scanning.inprogress.none=No scans in progress. +system-status.queues.grid.header.key=Queue +system-status.queues.grid.header.number=Size diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js index b04bd841d..67b339156 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js @@ -561,11 +561,31 @@ $(function() { // system status part //--------------------------- + QueueEntry=function(key,entriesNumber){ + this.key=key; + this.entriesNumber=entriesNumber; + } + + + mapQueueEntries=function(data){ + if (data!=null){ + return $.map(data,function(item){ + return new QueueEntry(item.key,item.entriesNumber); + }) + } + return null; + } + displaySystemStatus=function(){ screenChange(); var mainContent=$("#main-content"); mainContent.html($("#system-status-main").tmpl()); + + var versionInfo=$.i18n.prop('system-status.header.version.buildNumber')+": "+window.archivaRuntimeInfo.buildNumber + +" - "+$.i18n.prop('system-status.header.version.timestampStr')+": "+window.archivaRuntimeInfo.timestampStr; + mainContent.find("#status_version_info").html(versionInfo); + $.ajax("restServices/archivaServices/systemStatusService/memoryStatus", { type: "GET", dataType: "text", @@ -585,9 +605,13 @@ $(function() { } }); - var versionInfo=$.i18n.prop('system-status.header.version.buildNumber')+": "+window.archivaRuntimeInfo.buildNumber - +" - "+$.i18n.prop('system-status.header.version.timestampStr')+": "+window.archivaRuntimeInfo.timestampStr; - mainContent.find("#status_version_info").html(versionInfo); + $.ajax("restServices/archivaServices/systemStatusService/queueEntries", { + type: "GET", + success: function(data){ + var queueEntries=mapQueueEntries(data); + mainContent.find("#status_queues").html($("#status_queues_tmpl" ).tmpl({queueEntries: queueEntries})); + } + }); } diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/general-admin.html b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/general-admin.html index 4bfcb089d..48a713987 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/general-admin.html +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/general-admin.html @@ -354,6 +354,25 @@ + + -- 2.39.5