]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1580] system status page display queues.
authorOlivier Lamy <olamy@apache.org>
Mon, 12 Mar 2012 13:03:38 +0000 (13:03 +0000)
committerOlivier Lamy <olamy@apache.org>
Mon, 12 Mar 2012 13:03:38 +0000 (13:03 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1299659 13f79535-47bb-0310-9956-ffa450edef68

13 files changed:
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/AdminRepositoryConsumer.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/ArchivaRepositoryStatistics.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResult.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/BrowseResultEntry.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/PolicyInformation.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/SearchRequest.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/StringList.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/VersionsList.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/SystemStatusService.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java
archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/general-admin.html

index 539980a56ec31f1fc9d11ae7cdec66f5c82b7344..2d34caf48345611ba9ee1bf295378c96460088bb 100644 (file)
@@ -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;
 
index 92c2fb00daee66137138269b47896cca1f25653e..0de6c7bc719cbe81f2fdf0ab7f2c46d80893933b 100644 (file)
@@ -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;
 
index 8278ac1dbac29df27fe474b836f0ea9bae62844c..6b134fd45ccbee97caa91862bc8dfab1940d5942 100644 (file)
@@ -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<BrowseResultEntry> browseResultEntries;
 
index be7eae2b646ca2b944bc6c81f4628f408abc37bc..718d37d6e39aaf4ff15e873a6c246793b6574b30 100644 (file)
@@ -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<BrowseResultEntry>
+    implements Comparable<BrowseResultEntry>, Serializable
 {
 
     private String name;
index 1702a53a9fee3e54bc4f122cc58cf2dab49ecfb3..9880885b6acf77c771f2a4fd78222e562f652cbc 100644 (file)
@@ -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<String> options;
 
index b391650e227d89211b90682eb01a3c0ea92732f9..898ad6c2eaba516c697a9a471e26451d082d57b8 100644 (file)
@@ -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
 {
 
     /**
index 7381141ea97cf9d0aa5f375a01082c222f55172d..0d4aa0fcbf14959eba9ccc410faa31b239f4bd98 100644 (file)
@@ -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<String> strings;
 
index e6729aa9f51ff3580e8044c01cbca1bde9ec466f..683eb4c7d99fbfca8c958c543f70e01abf084109 100644 (file)
@@ -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<String> versions;
index 45e790f5f0abcf407e55e01714294c5918786d77..370e01e43e3cba91b0817806234a508a8c842fc1 100644 (file)
@@ -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<QueueEntry> getQueueEntries()
+        throws ArchivaRestServiceException;
+
 }
index e07f77a4080c8bebbf47bc86a7e810489a0b775f..de0776519c54071393669f89fe8e11f78419e63e 100644 (file)
@@ -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<String, TaskQueue> 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<QueueEntry> getQueueEntries()
+        throws ArchivaRestServiceException
+    {
+        try
+        {
+            List<QueueEntry> queueEntries = new ArrayList<QueueEntry>( queues.size() );
+            for ( Map.Entry<String, TaskQueue> 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() );
+        }
+    }
 }
index 15cd72c6ec86af2bab01f29ae1737296c7456d81..ff30c3214c0783591cac7d4b058ff0bad534dd0f 100644 (file)
@@ -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
 
 
 
index b04bd841dc189d330f2bfc698949243517d10a66..67b3391561003ba5413d2c60641d9145cc9aeaf6 100644 (file)
@@ -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}));
+        }
+    });
 
   }
 
index 4bfcb089d82c5e4dbdc38ece929b291698af9355..48a7139875925b34de43aaf2311a8306da602f74 100644 (file)
 
 </script>
 
+<script id="status_queues_tmpl" type="text/html">
+  <table class="table table-condensed">
+    <thead>
+      <tr>
+        <th>${$.i18n.prop('system-status.queues.grid.header.key')}</th>
+        <th>${$.i18n.prop('system-status.queues.grid.header.number')}</th>
+      </tr>
+    </thead>
+    <tbody>
+    {{each(i,queueEntry) queueEntries}}
+      <tr>
+        <td>${queueEntry.key}</td>
+        <td>${queueEntry.entriesNumber}</td>
+      </tr>
+    {{/each}}
+    </tbody>
+  </table>
+</script>
+