You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2010/10/11 17:01:48 UTC
svn commit: r1021369 - in /sling/branches/eventing-3.0: pom.xml
src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java
src/test/java/org/apache/sling/event/impl/jobs/JobEventHandlerTest.java
Author: cziegeler
Date: Mon Oct 11 15:01:48 2010
New Revision: 1021369
URL: http://svn.apache.org/viewvc?rev=1021369&view=rev
Log:
Make servlet api optional and implement configuration printer for the web console
Modified:
sling/branches/eventing-3.0/pom.xml
sling/branches/eventing-3.0/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java
sling/branches/eventing-3.0/src/test/java/org/apache/sling/event/impl/jobs/JobEventHandlerTest.java
Modified: sling/branches/eventing-3.0/pom.xml
URL: http://svn.apache.org/viewvc/sling/branches/eventing-3.0/pom.xml?rev=1021369&r1=1021368&r2=1021369&view=diff
==============================================================================
--- sling/branches/eventing-3.0/pom.xml (original)
+++ sling/branches/eventing-3.0/pom.xml Mon Oct 11 15:01:48 2010
@@ -59,6 +59,9 @@
<extensions>true</extensions>
<configuration>
<instructions>
+ <Import-Package>
+ javax.servlet;javax.servlet.http;resolution:=optional,*
+ </Import-Package>
<Export-Package>
org.apache.sling.event;version=2.4.0,
org.apache.sling.event.jobs;version=1.0.0
Modified: sling/branches/eventing-3.0/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java
URL: http://svn.apache.org/viewvc/sling/branches/eventing-3.0/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java?rev=1021369&r1=1021368&r2=1021369&view=diff
==============================================================================
--- sling/branches/eventing-3.0/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java (original)
+++ sling/branches/eventing-3.0/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java Mon Oct 11 15:01:48 2010
@@ -50,7 +50,8 @@ import org.apache.sling.event.jobs.Stati
@Service(value=javax.servlet.Servlet.class)
@Properties({
@Property(name="felix.webconsole.label", value="slingevent", propertyPrivate=true),
- @Property(name="felix.webconsole.title", value="Sling Eventing", propertyPrivate=true)
+ @Property(name="felix.webconsole.title", value="Sling Eventing", propertyPrivate=true),
+ @Property(name="felix.webconsole.configprinter.modes", value={"zip", "txt"})
})
public class WebConsolePlugin extends HttpServlet {
@@ -201,12 +202,33 @@ public class WebConsolePlugin extends Ht
pw.println("<br/>");
}
- /** TODO */
+ /**
+ * Format an array.
+ */
private String formatArray(final String[] array) {
if ( array == null || array.length == 0 ) {
return "";
}
- return escape(Arrays.toString(array));
+ final StringBuilder sb = new StringBuilder();
+ boolean first = true;
+ for(final String s : array ) {
+ if ( !first ) {
+ sb.append('\n');
+ }
+ first = false;
+ sb.append(s);
+ }
+ return escape(sb.toString());
+ }
+
+ /**
+ * Format an array.
+ */
+ private String formatArrayAsText(final String[] array) {
+ if ( array == null || array.length == 0 ) {
+ return "";
+ }
+ return Arrays.toString(array);
}
/** TODO */
@@ -242,4 +264,92 @@ public class WebConsolePlugin extends Ht
"<button class='ui-state-default ui-corner-all' onclick='javascript:document.forms[\"%s\"].submit();'>" +
"%s</button></form>", hiddenValue, hiddenValue, q.getName(), hiddenValue, buttonLabel);
}
+
+ /** Configuration printer for the web console. */
+ public void printConfiguration(final PrintWriter pw, final String mode) {
+ if ( !"zip".equals(mode) && !"txt".equals(mode) ) {
+ return;
+ }
+ pw.println("Apache Sling Eventing");
+ pw.println("---------------------");
+
+ Statistics s = this.jobManager.getStatistics();
+ pw.println("Overall Statistics");
+ pw.printf("Start Time : %s%n", formatDate(s.getStartTime()));
+ pw.printf("Last Activated : %s%n", formatDate(s.getLastActivatedJobTime()));
+ pw.printf("Last Finished : %s%n", formatDate(s.getLastFinishedJobTime()));
+ pw.printf("Queued Jobs : %s%n", s.getNumberOfQueuedJobs());
+ pw.printf("Active Jobs : %s%n", s.getNumberOfActiveJobs());
+ pw.printf("Jobs : %s%n", s.getNumberOfJobs());
+ pw.printf("Finished Jobs : %s%n", s.getNumberOfFinishedJobs());
+ pw.printf("Failed Jobs : %s%n", s.getNumberOfFailedJobs());
+ pw.printf("Cancelled Jobs : %s%n", s.getNumberOfCancelledJobs());
+ pw.printf("Processed Jobs : %s%n", s.getNumberOfProcessedJobs());
+ pw.printf("Average Processing Time : %s%n", formatTime(s.getAverageProcessingTime()));
+ pw.printf("Average Waiting Time : %s%n", formatTime(s.getAverageWaitingTime()));
+
+ boolean isEmpty = true;
+ for(final Queue q : this.jobManager.getQueues()) {
+ isEmpty = false;
+ pw.printf("Active JobQueue: %s %s%n", q.getName(),
+ q.isSuspended() ? "(SUSPENDED)" : "");
+
+ s = q.getStatistics();
+ final QueueConfiguration c = q.getConfiguration();
+ pw.println("Statistics");
+ pw.printf("Start Time : %s%n", formatDate(s.getStartTime()));
+ pw.printf("Last Activated : %s%n", formatDate(s.getLastActivatedJobTime()));
+ pw.printf("Last Finished : %s%n", formatDate(s.getLastFinishedJobTime()));
+ pw.printf("Queued Jobs : %s%n", s.getNumberOfQueuedJobs());
+ pw.printf("Active Jobs : %s%n", s.getNumberOfActiveJobs());
+ pw.printf("Jobs : %s%n", s.getNumberOfJobs());
+ pw.printf("Finished Jobs : %s%n", s.getNumberOfFinishedJobs());
+ pw.printf("Failed Jobs : %s%n", s.getNumberOfFailedJobs());
+ pw.printf("Cancelled Jobs : %s%n", s.getNumberOfCancelledJobs());
+ pw.printf("Processed Jobs : %s%n", s.getNumberOfProcessedJobs());
+ pw.printf("Average Processing Time : %s%n", formatTime(s.getAverageProcessingTime()));
+ pw.printf("Average Waiting Time : %s%n", formatTime(s.getAverageWaitingTime()));
+ pw.printf("Status Info : %s%n", q.getStatusInfo());
+ pw.println("Configuration");
+ pw.printf("Type : %s%n", c.getType());
+ pw.printf("Topics : %s%n", formatArrayAsText(c.getTopics()));
+ pw.printf("Max Parallel : %s%n", c.getMaxParallel());
+ pw.printf("Max Retries : %s%n", c.getMaxRetries());
+ pw.printf("Retry Delay : %s ms%n", c.getRetryDelayInMs());
+ pw.printf("Priority : %s%n", c.getPriority());
+ pw.printf("Run Local : %s%n", c.isLocalQueue());
+ pw.printf("App Ids : %s%n", formatArrayAsText(c.getApplicationIds()));
+ pw.println();
+ }
+ if ( isEmpty ) {
+ pw.println("No active queues.");
+ pw.println();
+ }
+
+ pw.println("Apache Sling Eventing - Job Queue Configurations");
+ pw.println("------------------------------------------------");
+ this.printQueueConfiguration(pw, ((DefaultJobManager)this.jobManager).getMainQueueConfiguration());
+ final InternalQueueConfiguration[] configs = this.queueConfigManager.getConfigurations();
+ for(final InternalQueueConfiguration c : configs ) {
+ this.printQueueConfiguration(pw, c);
+ }
+
+ }
+
+ private void printQueueConfiguration(final PrintWriter pw, final InternalQueueConfiguration c) {
+ pw.printf("Job Queue Configuration: %s%n",
+ c.getName());
+ pw.printf("Valid : %s%n", c.isValid());
+ pw.printf("Type : %s%n", c.getType());
+ pw.printf("Topics : %s%n", formatArrayAsText(c.getTopics()));
+ pw.printf("Max Parallel : %s%n", c.getMaxParallel());
+ pw.printf("Max Retries : %s%n", c.getMaxRetries());
+ pw.printf("Retry Delay : %s ms%n", c.getRetryDelayInMs());
+ pw.printf("Priority : %s ms%n", c.getPriority());
+ pw.printf("Run Local : %s ms%n", c.isLocalQueue());
+ pw.printf("App Ids : %s ms%n", formatArrayAsText(c.getApplicationIds()));
+ pw.printf("Ranking : %s ms%n", c.getRanking());
+
+ pw.println();
+ }
}
Modified: sling/branches/eventing-3.0/src/test/java/org/apache/sling/event/impl/jobs/JobEventHandlerTest.java
URL: http://svn.apache.org/viewvc/sling/branches/eventing-3.0/src/test/java/org/apache/sling/event/impl/jobs/JobEventHandlerTest.java?rev=1021369&r1=1021368&r2=1021369&view=diff
==============================================================================
--- sling/branches/eventing-3.0/src/test/java/org/apache/sling/event/impl/jobs/JobEventHandlerTest.java (original)
+++ sling/branches/eventing-3.0/src/test/java/org/apache/sling/event/impl/jobs/JobEventHandlerTest.java Mon Oct 11 15:01:48 2010
@@ -96,19 +96,6 @@ public class JobEventHandlerTest extends
* Helper method to create a job event.
*/
private Event getJobEvent(String queueName, String id, String parallel) {
- final Dictionary<String, Object> props = new Hashtable<String, Object>();
- props.put(JobUtil.PROPERTY_JOB_TOPIC, "sling/test");
- if ( id != null ) {
- props.put(JobUtil.PROPERTY_JOB_NAME, id);
- }
- props.put(JobUtil.PROPERTY_JOB_RETRY_DELAY, 2000L);
- props.put(JobUtil.PROPERTY_JOB_RETRIES, 2);
- if ( queueName != null ) {
- props.put(JobUtil.PROPERTY_JOB_QUEUE_NAME, queueName);
- }
- if ( parallel != null ) {
- props.put(JobUtil.PROPERTY_JOB_PARALLEL, parallel);
- }
return getJobEvent(queueName, id, parallel, false);
}